STAT: WHILESTAT | IFSTAT | FOREACHSTAT | EXPSTAT | COMPOUNDSTAT | 'return' [ EXPSTAT ] | VARDEC EXPSTAT: EXPRESSION ';' COMPOUNDSTAT: { STATSEQ } STATSEQ: STAT | STATSEQ STAT EXPRESSION: EXPRESSION BINEXPOP EXPRESSION | PREFIXOP EXPRESSION | EXPRESSION POSTFIXOP | '(' EXPRESSION ')' | IDENT | NUMBER | STRING | FUNCTION | ASSIGNEXP WHILESTAT: 'while' '(' EXPRESSION ')' STATEMENT ASSIGNEXP: VAR BINSTATOP ( ASSIGNEXP | EXPRESSION ) IFSTAT: 'if' '(' EXPRESSION ')' STATEMENT ['else' STATEMENT] FOREACHSTAT: 'foreach' IDENT 'in' VECTOR BINEXPOP: '+' | '-' | '*' | '/' | '==' | '<' | '>' | '<=' | '>=' BINSTATOP: '=' | '*=' | '+=' | '-=' | '/=' PREFIXOP: '++' | '--' | '-' POSTFIXOP: '++' | '--' | '[' NUMBER ']' FUNCTION: IDENT '(' FUNCARGLIST ')' FUNCDEF: 'procedure' IDENT '(' [ FUNCARGLIST ] ')' '{' [STATEMENT] '}' FUNCARGLIST: IDENT [',' FUNCARGLIST] VARDEC: ('local' | 'global') IDENT [ '=' EXPRESSION ] VAR: IDENT [ '[' EXPRESSION ']' ] STRING: '"''"' NUMBER: IDENT: