The Syntax of the Wolfram Language

The Wolfram Language uses various syntactic rules to interpret input that you give, and to convert strings and boxes into expressions. The version of these rules that is used for StandardForm and InputForm in effect defines the basic Wolfram Language. The rules used for other forms, such as TraditionalForm, follow the same overall principles, but differ in many details.

a, xyz, αβγsymbols
"some text", "α+β" strings
123.456, 3*^45numbers
+, ->, operators
(*comment*)input to be ignored

Types of tokens in the Wolfram Language.

When you give text as input to the Wolfram Language, the first thing that the Wolfram System does is to break the text into a sequence of tokens, with each token representing a separate syntactic unit.

Thus, for example, if you give the input xx+yy-zzzz, the Wolfram System will break this into the sequence of tokens xx, +, yy, - and zzzz. Here xx, yy, and zzzz are tokens that correspond to symbols, while + and - are operators.

Operators are ultimately what determine the structure of the expression formed from a particular piece of input. The Wolfram Language involves several general classes of operators, distinguished by the different positions in which they appear with respect to their operands.


Examples of classes of operators in the Wolfram Language.

Operators typically work by picking up operands from definite positions around them. But when a string contains more than one operator, the result can in general depend on which operator picks up its operands first.

Thus, for example, a*b+c could potentially be interpreted either as (a*b)+c or as a*(b+c) depending on whether * or + picks up its operands first.

To avoid such ambiguities, the Wolfram Language assigns a precedence to each operator that can appear. Operators with higher precedence are then taken to pick up their operands first.

Thus, for example, the multiplication operator * is assigned higher precedence than +, so that it picks up its operands first, and a*b+c is interpreted as (a*b)+c rather than a*(b+c).

The * operator has higher precedence than +, so in both cases Times is the innermost function:
Click for copyable input
The // operator has rather low precedence:
Click for copyable input
The @ operator has high precedence:
Click for copyable input

Whatever the precedence of the operators you are using, you can always specify the structure of the expressions you want to form by explicitly inserting appropriate parentheses.

Inserting parentheses makes Plus rather than Times the innermost function:
Click for copyable input
Extensions of symbol namesx_,#2,e::s, etc.
Function application variantse[e],e@@e, etc.
Powerrelated operatorse,e^e, etc.
Multiplicationrelated operators
e,e/e,ee,ee, etc.
Additionrelated operatorsee,e+e,ee, etc.
Relational operatorse==e,ee,ee,ee,ee, etc.
Arrow and vector operatorsee,ee,ee,ee, etc.
Logic operatorsee,e&&e,ee,ee, etc.
Pattern and rule operatorse..,e|e,e->e,e/.e, etc.
Pure function operatore&
Assignment operatorse=e,e:=e, etc.
Compound expressione;e

Outline of operators in order of decreasing precedence.

The table in "Operator Input Forms" gives the complete ordering by precedence of all operators in the Wolfram Language. Much of this ordering, as in the case of * and +, is determined directly by standard mathematical usage. But in general the ordering is simply set up to make it less likely for explicit parentheses to have to be inserted in typical pieces of input.

Operator precedences are such that this requires no parentheses:
Click for copyable input
FullForm shows the structure of the expression that was constructed:
Click for copyable input
Note that the first and second forms here are identical; the third requires explicit parentheses:
Click for copyable input
left groupingx/y/z(x/y)/z
right groupingx^y^zx^(y^z)

Types of grouping for infix operators.

Plus is a Flat function, so no grouping is necessary here:
Click for copyable input
Power is not Flat, so the operands have to be grouped in pairs:
Click for copyable input

The syntax of the Wolfram Language is defined not only for characters that you can type on a typical keyboard, but also for all the various special characters that the Wolfram Language supports.

Letters such as , , and from any alphabet are treated just like ordinary English letters, and can for example appear in the names of symbols. The same is true of letterlike forms such as , , and .

But many other special characters are treated as operators. Thus, for example, and are infix operators, while is a prefix operator, and and are matchfix operators.

is an infix operator:
Click for copyable input
is an infix operator which means the same as *:
Click for copyable input

Some special characters form elements of fairly complicated compound operators. Thus, for example, Null contains the compound operator with elements Null and Null.

The Null and Null form parts of a compound operator:
Click for copyable input
No parentheses are needed here: the "inner precedence" of is lower than Times:
Click for copyable input
Parentheses are needed here, however:
Click for copyable input

Input to the Wolfram Language can be given not only in the form of onedimensional strings, but also in the form of twodimensional boxes. The syntax of the Wolfram Language covers not only onedimensional constructs but also twodimensional ones.

This superscript is interpreted as a power:
Click for copyable input
xf is a twodimensional compound operator:
Click for copyable input
is part of a more complicated twodimensional compound operator:
Click for copyable input
The operator has higher precedence than +:
Click for copyable input