Here are the binary and unary operations allowed by ParaFlow listed in order of precedence: Prec. Symbol Function ------------------------ 0 . Field selector. 0 () Function call. 0 [] Array index. 1 ! Logical not 1 ~ Bitwise not 1 - Unary minus 2 * Multiplication 2 / Division 2 % Modulo (remainder after division) 2 << Bitwise shift left 2 >> Bitwise shift right 2 & Bitwise and 3 + Addition. String concatenation. 3 - Subtraction. 3 | Bitwise or. 3 ^ Bitwise xor. 4 == Logical equality (as opposed to assignment) 4 != Logical not equals 4 >= Greater than or equals 4 <= Less than or equals 4 > Greater than 4 < Less than 5 && Logical and. 6 || Logical or. 7 to Range specifier (1 to 10). 8 of Type compositer (array of int). 9 = Assignment. Set variable equal to a value. 9 += Add right side to left side. 9 -= Subtract right side from left side. 9 *= Multiply right side by left side. 9 /= Divide right side by left side. 9 : Make key : value pair. 10 , Separate items on a list In general this is close to the operations and precedence in C, C++, and Java. The main difference is in the bitwise operators. In practice bitwise shifts and bitwise ands are most often used for fast multiplication, division and modulus operations involving factors of two, so they are put at the same precedence level as these arithmetic operators rather than at the level of the logical operators. The 'to' and 'of' operators are new with ParaFlow. It is convenient that the to operator be relatively low precedence. The precedence of the of operator doesn't matter much since it is only used in type expressions, though it needs to be lower than the priority of [] for the parameterized types to work without additional parenthesis.