(module grammar3 (lib "eopl.ss" "eopl") (require "drscheme-init.scm") (define lex0 '((whitespace (whitespace) skip) (comment ("%" (arbno (not #\newline))) skip) (identifier (letter (arbno (or letter digit))) symbol) (number (digit (arbno digit)) number))) (define grammar3 '((expression (number) lit-exp) (expression (identifier) var-exp) (expression ("let" (arbno identifier "=" expression) "in" expression) let-exp) (expression ("(" "-" (arbno expression) ")") sum-exp) )) ;; build a scanner with empty grammar (define scan0 (sllgen:make-string-scanner lex0 '())) ;; build data-types (sllgen:make-define-datatypes lex0 grammar3) ;; build scanner with grammar (define just-scan (sllgen:make-string-scanner lex0 grammar3)) ;; build parser (define scan&parse (sllgen:make-string-parser lex0 grammar3)) ;; show the datatypes (define show-the-datatypes (lambda () (sllgen:show-define-datatypes lex0 grammar3))) (define stmt1 "let x = (- y z) u = (- g h) v = (- i j) in (- (- x u) (- v k))") )