* must have an a list (labels (label index)*) labels ::= "labels" (label instrNo)* stmnt ::= for | if | innerstatement innerStatement ::= PRINT (item ((COMMA | SEMIC) item)*)? | NEXT | GOTO INT | GOSUB INT | INPUT VAR| INPUT STRING VAR | LET VAR expr | RETURN for ::= FOR var expr TO expr if ::= IF expr ?comp expr THEN innerStatement expr ::= a postfix arithmetic statement FOR ::= 'FOR' IF ::= 'IF' THEN ::= 'THEN' TO ::= 'TO' LET ::= 'LET' RETURN ::= 'RETURN' INT ::= an integer NEXT ::= 'NEXT' INPUT ::= 'INPUT' STRING ::= QUOTE PRINTABLECHARS QUOTE QUOTE ::= '"' PRINTABLECHARS ::= VAR ::= a single character (upper case)