ROOT ::= EXPR* INSTR ::= | EXPR semicolon EXPR ::= | OR | ASSERT EXPR OR ::= AND (or AND)* AND ::= EQNE (and EQNE)* EQNE ::= CMP ((eq|ne) CMP)? CMP ::= TERM ((lt|le|gt|ge) TERM)? TERM ::= FACTOR ((add|sub) FACTOR)* FACTOR ::= POW ((mul|div|mod) POW)* POW ::= NOT (pow NOT)? NOT ::= not* LITERAL LITERAL ::= BUILTIN | opar EXPR cpar BUILTIN ::= bool | int | float | string