PROG ::= (INSTR (EOI INSTR)*)? INSTR ::= EXPR EXPR ::= TERM TERM ::= FACTOR ((add | sub) FACTOR)* FACTOR ::= UNOP ((mul | div | mod) UNOP)* UNOP ::= (add | sub)? POW POW ::= GROUP (pow GROUP)? GROUP ::= BASE | opar EXPR cpar BASE ::= int