One aspect of parsing precedence is associativity. A *left-associative* operator is one, such as *, with the property that `x * y * z` is parsed as `(x * y) * z`. A *right-associative* operator is one, such as =, with the property that `x = y = z` is parsed as `x = (y = z)`. These operators are left associative: # #? % & * ** + ++ , - . .. ..< .? / // << @@ ^ ^** ^^ _ | ||, and these operators are right associative: != -> : := ; < <- <= <== <=== <==> = =!= == === ===> ==> => > >= >> ? @ \ \\ |- and or SPACE .

Here are the operators arranged in order of increasing parsing precedence. For example, `*` has higher parsing precedence than `+`, and hence `2+3*5` is parsed as though it had been written as `2+(3*5)`. The symbol SPACE represents the operator that is used when two things are adjacent in program code.

8 ; 10 , 14 -> := <- = => >> 18 << 20 |- 22 <=== ===> 24 <==> 26 <== ==> 28 or 30 and 32 not 34 != < <= =!= == === > >= ? 36 || 38 : 40 | 42 ^^ 44 & 46 .. ..< 48 + ++ - 50 ** 54 % * / // \ \\ 56 @ 58 SPACE 60 (*) 62 @@ 64 ^* _* ~ 66 # #? . .? ^ ^** _ 68 ! |