GLOBAL := ( FUNCTION | VARIABLE )* FUNCTION := TYPE MODIFIERS _IDENTIFIER ARGSLIST ( ';' | STMTLIST ) TYPE := 'int' MODIFIERS := '*'* ARGSLIST := '(' [ TYPE MODIFIERS _IDENTIFIER ( ',' TYPE MODIFIERS _IDENTIFIER )* ] ')' STMTLIST := '{' ( VARIABLE | STATEMENT | STMTLIST )* '}' VARIABLE := TYPE MODIFIERS _IDENTIFIER [ = EXPRESSION ] ';' STATEMENT := ( ';' | EXPRESSION ';' | WHILE | IF | RETURN ) WHILE := 'while' '(' EXPRESSION ')' CHUNK IF := 'if' '(' EXPRESSION ')' CHUNK RETURN := 'return' EXPRESSION ';' CHUNK := ( STMTLIST | STATEMENT ) EXPRESSION := P13EXPR P13EXPR := P6EXPR ( '=' P6EXPR )* P6EXPR := P5EXPR ( '==' P5EXPR )* P5EXPR := P3EXPR ( ( '<' | '>' ) P3EXPR )* P3EXPR := P2EXPR ( ( '+' | '-' ) P2EXPR )* P2EXPR := SUBEXPR ( ( '*' | '/' ) SUBEXPR )* SUBEXPR := ( '(' EXPRESSION ')' | _NUMBER | _IDENTIFIER )