DECLARATION+ -> PROGRAM VARIABLE -> DECLARATION FUNCTION -> DECLARATION TYPE ID ';' -> VARIABLE TYPE ID '(' ( FORMALPARAMETER (',' FORMALPARAMETER)* )? ')' BLOCK -> FUNCTION TYPE ID -> FORMALPARAMETER '{' VARIABLE* STAT* '}' -> BLOCK FORSTAT -> STAT EXPR -> STAT BLOCK -> STAT ASSIGNSTAT -> STAT ';' -> STAT 'for' '(' ASSIGNSTAT ';' EXPR ';' ASSIGNSTAT ')' BLOCK -> FORSTAT ID '=' EXPR -> ASSIGNSTAT CONDEXPR -> EXPR AEXPR ( ('=='^|'!='^) AEXPR )? -> CONDEXPR MEXPR ('+'^ MEXPR)* -> AEXPR ATOM ('*'^ ATOM)* -> MEXPR ID -> ATOM INT -> ATOM '(' EXPR ')' -> ATOM