There are two types of operators: BOOLEAN or ARITHMETIC
Examples:
((1 / 2) + 3)
a - (b % 2)
6 * f(2, 3)
(f() and g(a)) or ((4 * h(b)) = 1)
/!\ Parentheses are important, 1/2+3 gives 0.2 while (1/2)+3 gives 3.5 ; because expressions are read from the right.
Grammar:
EXP -> INT EXPSUITE | ID EXPSUITE | (EXP) EXPSUITE
EXPSUITE -> + EXP | - EXP | * EXP | / EXP | e
| and EXP | or EXP | xor EXP | = EXP
| <EQ EXP | &rt;EQ EXP;
EQ -> = | e
ID -> STRING | STRING ( ARGSDEF ) | STRING ( ARGSCALL )
IDNEXT -> ID | ID , IDNEXT;
EXPNEXT -> EXP | EXP , EXPNEXT;
ARGSDEF -> EXP EXPNEXT | e
ARGSCALL -> ID IDNEXT | e
STRING -> [a-z][a-zA-Z0-9]*
INT -> [1-9][0-9]* | 0