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

37 lines
729 B
Racket

#lang ragg
8 years ago
;; recursive rules destucture easily in the expander
8 years ago
program : [line [CR line]*]
8 years ago
line: INTEGER statement+
8 years ago
8 years ago
statement : "END"
8 years ago
| "FOR" ID "=" expr "TO" expr ["STEP" expr]
| "GOSUB" INTEGER
8 years ago
| "GOTO" expr
8 years ago
| "IF" expr "THEN" (statement | expr) ["ELSE" (statement | expr)]; change: add expr
| "INPUT" [print-list ";"] ID
8 years ago
| ["LET"] ID "=" expr ; change: make "LET" opt
8 years ago
| "NEXT" ID+
| "PRINT" print-list
8 years ago
| "RETURN"
8 years ago
| REM-COMMENT
8 years ago
print-list : [expr [";" [print-list]]]
8 years ago
expr : comp-expr [("AND" | "OR") expr]
comp-expr : sum [("=" | ">" | ">=" | "<" | "<=" | "<>") comp-expr]
8 years ago
sum : product [("+" | "-") sum]
8 years ago
8 years ago
product : value [("*" | "/") product]
8 years ago
8 years ago
value : "(" expr ")"
| ID
| PROC "(" expr* ")"
8 years ago
| INTEGER
| STRING
| REAL
8 years ago