expr : binary_op(s?) term
binary_op : term (/[+-*/><]/|'=='|'!='|'>='|'<='|'and'|'or')
term : unary_op # Must be above id, array_ref & func_ref
| func_call # Must be above id, array_ref & func_ref
| const # Must be above id, array_ref & func_ref
| array_ref # Must be above id
| func_ref # Must be above id
| id
| parens
unary_op : ('+'|'-'|'not') term
####
unary_op : '+' term
| '-' term
| 'not' term
##
##
expr : binary_op(s?) term
# Lowest precendance.
binary_op : binary_op_2 /and|or/
...
binary_op_8 : binary_op_9 /[+-]/
binary_op_9 : term /[*/]/
# Highest precendance.
term : ...