;; lang2.ss ;; Doug Blank (load "petite-init.ss") (load "sllgen.ss") (define scanner '((whitespace (whitespace) skip) (comment ("%" (arbno (not #\newline))) skip) (identifier (letter (arbno (or letter digit))) make-symbol) (number (digit (arbno digit)) make-number))) (define grammar '((statement ("{" statement ";" statement "}") compound-statement) (statement ("while" expression "do" statement) while-statement) (statement (identifier ":=" expression) assign-statement) (expression (number) lit-exp) (expression (identifier) var-exp) (expression ("let" (separated-list declaration ";") "in" expression) let-exp) (expression ("(" expression (arbno expression) ")") app-exp) (declaration (identifier "=" expression) decl))) (define parse (sllgen:make-string-parser scanner grammar)) ;; (parse "{x := foo; y := bar}") (define repl (sllgen:make-rep-loop "--> " (lambda (x) x) (sllgen:make-stream-parser scanner grammar))) (repl)