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