PROG = FDEF ... FDEF = IDEN '(' [IDEN ... ','] ')' STATS EXP = EXP_3 [('=') EXP] EXP_3 = EXP_2 [('&&' | '||') EXP_3] EXP_2 = EXP_1 [('<' | '>' | '<=' | '>=' | '==' | '!=') EXP_2] EXP_1 = EXP_0 [('+' | '-') EXP_1] EXP_0 = FACTOR [('*' | '/' | '%') EXP_0] FACTOR = '(' EXP ')' | '[' [EXP ... ',' ] ']' | IDEN '[' EXP ']' | IDEN ['(' [EXP... ',' ] ')'] | [('-' | '!')] | STAT = EXP | STATS | ['var'] IDENT ['[' EXP ']'] ['=' EXP] | IF | WHILE | RET STATS = '{' [STAT ';' ... ] '}' IF = 'if' '(' EXP ')' STAT ['else' STAT] WHILE = 'while' '(' EXP ')' STAT RET = 'return' [EXP]