gigatron/rom/Docs/TinyBASIC_v3.ebnf
2025-01-28 19:17:01 +03:00

39 lines
1.4 KiB
EBNF

/*
* 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]