You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
beautiful-racket/beautiful-racket/br/basic/parser.rkt

55 lines
1.0 KiB
Racket

#lang ragg
;; adapted from http://www.ittybittycomputers.com/IttyBitty/TinyBasic/TBuserMan.txt
basic-program : line*
line : NUMBER statement CR | statement CR | CR
statement : "PRINT" printlist
| "PR" printlist
| "INPUT" varlist
| "LET" var "=" expression
| var "=" expression
| "GOTO" expression
| "GOSUB" expression
| "RETURN"
| "IF" expression relop expression "THEN" statement
| "IF" expression relop expression statement
;| "REM" commentstring ; todo: implement in tokenizer
| "CLEAR"
| "RUN"
| "RUN" exprlist
| "LIST"
| "LIST" exprlist
printlist : printitem [(":" | separator printlist)]
printitem : expression | STRING
varlist: var ["," varlist]
exprlist : expression ["," exprlist]
expression : [("+"|"-")] unsignedexpr
unsignedexpr : term [("+"|"-") unsignedexpr]
term : factor [("*"|"/") term]
factor : var
| number
| "(" expression ")"
| function
function : "RND(" expression ")"
| "USR(" exprlist ")"
number : NUMBER
separator : "," | ";"
var : UPPERCASE
digit: DIGIT
relop : "<" [("="|">")] | ">" [("="|"<")] | "="