EoPL reading (135) 3.2 The Front End
とりあえず、scanner-spec-3-1 と grammar-3-1 を作ってみる。
(define scanner-spec-3-1 '((white-sp (whitespace) skip) (comment ("%" (arbno (not #\newline))) skip) (identifier (letter (arbno (or letter digit "?"))) symbol) (number (digit (arbno digit)) number))) (define grammar-3-1 '((program (expression) a-program) (expression (number) lit-exp) (expression (id) var-exp) (expression (primitive "(" (separated-list expression ",") ")" ) primappexp) (primitive ("+") add-prim) (primitive ("-") subtract-prim) (primitive ("*") mult-prim) (primitive ("add1") incr-prim) (primitive ("sub1") decr-prim)))
で、gosh でナニ。
$ gosh gosh> (add-load-path ".") ("." "/usr/share/gauche/site/lib" "/usr/share/gauche/0.8.13/lib") gosh> (load "define-datatype") define-datatype.scm version J3 2002-01-02 10:55 #t gosh> (load "sllgen") sllgen.scm 2000-09-25 11:48 #t gosh> (load "Fig3.3") #t gosh> (define scan&parse (sllgen:make-string-parser scanner-spec-3-1 grammar-3-1)) scan&parse gosh> (sllgen:make-define-datatypes scanner-spec-3-1 grammar-3-1) *** ERROR: unbound variable: eopl:printf Stack Trace: _______________________________________ 0 (eopl:printf "Error reported by sllgen during ~s:~%" who) At line 2126 of "./sllgen.scm" 1 (sllgen:make-rhs-datatype-list (sllgen:production->rhs production) ... At line 2007 of "./sllgen.scm" 2 (for-each (lambda (production) (sllgen:add-value-to-table! datatyp ... At line 2001 of "./sllgen.scm" 3 (sllgen:build-define-datatype-definitions scanner-spec grammar) At line 97 of "./sllgen.scm" gosh>
む。やっぱ未定義のシンボルが結構ありそげ。ってか printf って何だ。grep したら define-datatype.scm にも呼び出しがあるな。orz
とりあえず以下を sllgen.scm に盛り込み。
(define eopl:printf print)
再度評価してみたら以下。
gosh> (load "sllgen") sllgen.scm 2000-09-25 11:48 #t gosh> (sllgen:make-define-datatypes scanner-spec-3-1 grammar-3-1) Error reported by sllgen during ~s:~%defining-datatypes ~%Illegal item ~s (~a) in rhs ~sidunknown symbol(id) *** ERROR: wrong number of arguments for #<closure error> (required 1, got 0) Stack Trace: _______________________________________ 0 (sllgen:make-rhs-datatype-list (sllgen:production->rhs production) ... At line 2009 of "./sllgen.scm" 1 (for-each (lambda (production) (sllgen:add-value-to-table! datatyp ... At line 2003 of "./sllgen.scm" 2 (sllgen:build-define-datatype-definitions scanner-spec grammar) At line 99 of "./sllgen.scm" gosh>
えーと、これは何でしょ。backtrace とか出てるんですがもう限界。