Previous Up Next

3.2  プログラムファイルの構成・コンパイル方法

本実験で作成するインタプリタプログラムは,以下の 5 つのファイルから構成される.
syntax.ml
このファイルでは,抽象構文木のデータ構造(つまり抽象 構文)を定義している.抽象構文木は構文解析の出力であり,解釈部の入力 なので,インタプリタの全ての部分が,この定義に(直接/間接的に)依存す る.

parser.mly
C 言語に yacc や bison といった構文解析プログラム 生成ツールがあるように,Objective Caml にも ocamlyacc というツールがあり, .mly という拡張子のファイルに記述された文法定義から,構文解析プロ グラムを生成する.文法定義の仕方は yacc と似ている.

lexer.mll
C 言語に lex, flex といった字句解析プログラム生成ツー ルがあるように,Objective Caml にも ocamllex というツールがあり,.mll と いう拡張子のファイルに定義されたトークンとなる文字列のパターン定義か ら,字句解析プログラムを生成する.パターンの定義の仕方は lex と似て いる.

core.ml
解釈部プログラムである.構文解析部が生成した構文木から 計算を行なう.

main.ml
字句解析・構文解析・解釈部を組み合わせて,インタプリ タ全体を機能させる.プログラム全体の開始部分でもある.
最初に扱う mini Scheme1 インタプリタのための5つのファイルに加え,インタプ リタをコンパイルするための Makefilehttp://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/src/に置い てある.これら 6 つのファイルを同じディレクトリに保存し,どれかひとつ の .ml ファイルを Emacs に読み込む. そのバッファでC-c C-c とす ると,コンパイルのコマンドを聞かれるので, make depend とする.この 作業は初回のみ(正確にはファイルが増えた時もしくはmake cleanを行なっ た後)行えばよい. 次に,C-c C-c make -k とする. すると,ソース ファイルのあるディレクトリにscm という実行形式ファイルが生成される. (M-x shellでシェルモードに 入って) scm を起動すると =>というプロ ンプトが現れるので, mini Schemeプログラムを打つと結果が表示される.
> scm
⇒ x        ;; 起動時に大域変数 x の値は 10 になっている.
10
⇒ (+ x 3)
13
ソースを変更したあとは,C-c C-c make -k でコンパイルすることにな る.コンパイル時にエラーが発生した場合は M-x next-error とすることで, エラーの発生した場所にカーソルが移動する.

実行可能ファイルとなった Objective Caml プログラムをデバッグするには ocamldebug を使用する方法(Objective Camlマニュアル16章参照)と,インタラクティ ブコンパイラ ocaml にプログラムを構成する各モジュールをロードして, テストする方法がある.ocaml を起動する際に
ocaml -I<モジュールのあるディレクトリのパス> foo.cmo bar.cmo ...
のようにオブジェクトファイルを指定すると,Foo, Bar という モジュールが利用できるようになるので,トップレベルでテストする ことが可能になる.


Previous Up Next