第三回
「lexer(字句解析器)と parser(構文解析器)の作成」

インタープリタに入力するプログラムをいちいち
Plus (Number 3, Number 5) なんて書くのは面倒くさい、
というのは皆様お分かり頂けていると思います。
この問題は、lexer と parser を書く事で解決します!

というわけで、加算のみのインタープリタ用のlexer, parser を
作ってみました。(サンプルコード参照)
皆様はこれを真似して、前回作った四則演算のインタープリタ用のlexer,
parser を作って下さい!というのが今回の内容です。

今までは tuareg mode 等を使っていたかと思いますが、
これからは emacs等のエディタでプログラムを作って保存してから、
shell で make して実行ファイルを作るようにします。

Makefile も別紙のものを真似して作ってください。
OCamlMakefileを所定の位置に置くことに決めておくと、
以後Ocamlでのプログラミングの際、パスの通ったところに
OCamlMakefileをコピーして持って来て…という手間が省けます。
サンプルコードの場合は /asai_lab/ というディレクトリの下に
OCamlMakefileがあるわけなので、Makefile の中でその
ディレクトリを指定しています。
OCamlMakefile が手元に無い人は
http://www.ocaml.info/home/ocaml_sources.html#OCamlMakefile
から取ってきましょう。

lexer と parser の中身は、コンパイラの授業でやったのとほぼ同じです。
授業をとっていなかった人 or 忘れてしまった人も、ファイルを見ていれば
なんとなく作れるようになります。(体験談)

さて、lexer, parser, Makefile, OCamlMakefile, main, evalplus(配布したサンプルの場合)
らのファイルを適当なディレクトリに置いて make とすると、interp という
実行ファイルが出来ます。で、

% ./interp
input: 3 + 4;;
7
input: ^C (私の環境ではSignal -6 と表示されます)
%

という感じで実行します。
入力は複数行に渡ってもよく、入力の終わりは ;; を入れることになっています。
終了するときは ctrl-C です。

また、
% ledit ./interp
として起動すればdeleteキーや矢印キーが使えて便利です。
ちなみにこのサンプルは去年のB4に与えられた課題についてきた、
浅井先生が書いたサンプルを今回の課題用にさらに単純化したものです…

===========================================================
問題

1. サンプルコードを適当なディレクトリ下に作り、make して、
上記のように interp が動作することを確認して下さい。

2. 前々回作った四則演算インタープリタ用の lexer, parser を作り、
(当然、Makefile や main 等のファイルにも微変更が必要になります)
make して実行ファイルを作り、動作することを確認して下さい。
===========================================================