PROG ::= INSTR* INSTR ::= | DIR | EXPR semicolon DIR ::= hash ident EXPR EXPR ::= | ADDSUB ADDSUB ::= MULDIVMOD ((add|sub) MULDIVMOD)* MULDIVMOD ::= LITERAL ((mul|div|mod) LITERAL)* LITERAL ::= | ident | int