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 とか出てるんですがもう限界。