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 : ...