; Scanner specification defines terminals (tokens). (define scanner-spec-lec20 '((white-sp (whitespace) skip) (comment ("%" (arbno (not #\newline))) skip) (identifier (letter (arbno (or letter digit "?"))) symbol) (number (digit (arbno digit)) number))) ; Grammar specification describes allowable syntax. (define grammar-lec20 '((expr (number) lit-expr) (expr (identifier) var-expr) (expr ("(" subexpr ")") sub-expr) (subexpr ("lambda" "(" (arbno identifier) ")" expr) lambda-expr) (subexpr ("if" expr expr expr) if-expr) (subexpr ((arbno expr)) app-expr))) ; Automagically define a scanner and parser. (define scan&parse (sllgen:make-string-parser scanner-spec-lec20 grammar-lec20)) ; Automagically generate the define-datatype records for an ; Abstract Syntax Tree representation of the grammar. (sllgen:make-define-datatypes scanner-spec-lec20 grammar-lec20)