term1 operator1 term2 operator2 term3
operator2 has precedence over operator1, the subexpression (term2 operator2 term3) is evaluated first.
* (multiply) has a higher priority than + (add), so 3+2*5 evaluates to 13 (rather than the 25 that would result if a strict left-to-right evaluation occurred). To force the addition to occur before the multiplication, you could rewrite the expression as (3+2)*5. Adding the parentheses makes the first three tokens a subexpression. Similarly, the expression -3**2 evaluates to 9 (instead of -9) because the prefix minus operator has a higher priority than the power operator.
| ~ ~~\ | (message send) |
| + - ¬ \ | (prefix operators) |
| ** | (power) |
| * / % // | (multiply and divide) |
| + - | (add and subtract) |
| (blank) || (abuttal) | (concatenation with or without blank) |
| = > < | (comparison operators) |
| == >> << | |
| \= ¬= | |
| >< <> | |
| \> ¬> | |
| \< ¬< | |
| \== ¬== | |
| \>> ¬>> | |
| \<< ¬<< | |
| >= >>= | |
| <= <<= | |
| & | (and) |
| | && | (or, exclusive or) |
A is a variable whose value is 3, DAY is a variable whose value is Monday, and other variables are uninitialized. Then:
Example 1.16. Arithmetic
A+5 -> "8" A-4*2 -> "-5" A/2 -> "1.5" 0.5**2 -> "0.25" (A+1)>7 -> "0" /* that is, False */ " "="" -> "1" /* that is, True */ " "=="" -> "0" /* that is, False */ " "\=="" -> "1" /* that is, True */ (A+1)*3=12 -> "1" /* that is, True */ "077">"11" -> "1" /* that is, True */ "077" >> "11" -> "0" /* that is, False */ "abc" >> "ab" -> "1" /* that is, True */ "abc" << "abd" -> "1" /* that is, True */ "ab " << "abd" -> "1" /* that is, True */ Today is Day -> "TODAY IS Monday" "If it is" day -> "If it is Monday" Substr(Day,2,3) -> "ond" /* Substr is a function */ "!"xxx"!" -> "!XXX!"
Note
Example 1.17. Arithmetic
-3**2 == 9 /* not -9 */ -(2+1)**2 == 9 /* not -9 */ 2**2**3 == 64 /* not 256 */