/* * Gigatron's Tiny BASIC definition * EBNF in W3C notation * Recommended railroad diagram generator: http://www.bottlecaps.de/rr/ui */ Line ::= Number Statements | Statements Statements ::= Statement (':' Statement)* Statement ::= ('PRINT'|'?') ((String|Expression) [,;])* (String|Expression)? | 'AT' Expression (',' Expression)? | 'PUT' Expression | 'CLS' | 'LINE' Expression ',' Expression | 'IF' Expression RelOp Expression 'THEN'? Statements | 'GOTO' Expression | 'INPUT' Variable (',' Variable)* | 'LET'? Variable ('(' Expression ')')? '=' Expression | 'FOR' Variable '=' Expression 'TO' Expression | 'NEXT' Variable | 'POKE' Expression ',' Expression | 'GOSUB' Expression | 'RETURN' | ('REM'|"'") Character* | 'MODE' Expression | 'NEW' | 'LIST' | 'RUN' | 'END' | 'SAVE' Expression ::= [+-]? Term ([+-] Term)* Term ::= Factor ([*/%] Factor)* Factor ::= Variable | Number | (Variable|'PEEK'|'RND'|'USR')? '(' Expression ')' RelOp ::= '=' | '<' | '>' | '<=' | '>=' | '<>' Number ::= [0-9]+ Variable ::= [A-Z] | '@' String ::= '"' ([#x20-#x21] | [#x23-#x7E])* '"' Character ::= [#x20-#x7E]