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/demo/basic/parser.rkt

63 lines
1.2 KiB
Racket

#lang ragg
;; adapted from http://www.ittybittycomputers.com/IttyBitty/TinyBasic/TBuserMan.txt
8 years ago
;; MS Basic extensions
;; http://www.atariarchives.org/basicgames/showpage.php?page=i12
8 years ago
;; games
;; http://www.vintage-basic.net/games.html
8 years ago
basic-program : [CR] line (CR line)* [CR]
line: [NUMBER] statement (":" statement)*
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
| "CLEAR"
| "RUN"
| "RUN" exprlist
| "LIST"
| "LIST" exprlist
8 years ago
; formerly printlist : printitem [(":" | (separator printitem)*)]
printlist : printitem (separator printitem)*
printitem : expression | STRING
8 years ago
varlist: var ("," var)*
8 years ago
exprlist : expression ("," expression)*
expression : [("+"|"-")] unsignedexpr
unsignedexpr : term [("+"|"-") unsignedexpr]
term : factor [("*"|"/") term]
factor : var
| number
| "(" expression ")"
| function
function : "RND(" expression ")"
| "USR(" exprlist ")"
8 years ago
| "TAB(" expression ")"
number : NUMBER
separator : "," | ";"
8 years ago
var : "A" | "B" | "C" | "D" | "T"
digit: DIGIT
relop : "<" [("="|">")] | ">" [("="|"<")] | "="