Higher-level operations (1=highest)
are evaluated before lower-level operations,
same-level ones are evaluated from left to right.
The
operator precedence levels are:
1. ( ) [ ]
2. ? (length/setness)
3. - (negative number)
4. ~ (rounding)
5. .* (bits-and)
6. ./ (bits-clear)
7. .# (bits-xor)
8. .+ (bits-or)
9. ^ ^/ (power, root)
10. * / // \ (mul, div, idiv, mod)
11. + - (plus, minus)
12. ; (concatenation)
13. = # < > <= >= (comparisons)
14. , (Boolean and)
15. || (Boolean xor)
16. | (Boolean or)
17. ?? (ternary if)
18. \\ (ternary else)
19. from left to right
-a? = -(a?)
-a~b = (-a)~b
a.*b~c = a.*(b~c)
a./b.*c = a./(b.*c)
a.#b./c = a.#(b./c)
a.+b.#c = a.+(b.#c)
a^b.+c = a^(b.+c)
a*b^c = a*(b^c)
a+b*c = a+(b*c)
a;b-c = a;(b-c)
a#b;c = a#(b;c)
a,b=c = a,(b=c)
a||b,c = a||(b,c)
a|b||c = a|(b||c)
a|b??c\\d|e = (a|b)??c\\(d|e)
a??b\\c??d\\e = a??b\\(c??d\\e)
a^b^c = (a^b)^c