next up previous
Next: 1.2 コンパイラの呼び方 Up: 1 Schemeのコンパイラ Previous: 1 Schemeのコンパイラ

1.1 コンパイラの構造

コンパイラの処理の中での式の場合分けは, インタプリタに似てきます.

(defun comp (x env)
  (cond
   ((symbolp x) (gen-var x env))
   ((atom x) (gen 'CONST x))
   ((member (car x) '(quote begin set! if lambda))
    (comp-specialform (car x) (cdr x) env))
   ((scheme-macro (car x))
    (comp (scheme-macro-expand x) env))
   (t 
    (comp-call (car x) (cdr x) env))))
interpreterと同様に場合にわけて,それぞれをコンパイルする ことを考えます. コード生成は,命令コードとその命令への引数とをまとめてリストにし たもののリストで表現することにします.

(defun gen (opcode &rest args)
  (list (cons opcode args)))


generated through LaTeX2HTML. M.Inaba 平成18年5月6日