==============================================================================
== 単純な字句解析器・構文解析器・プリティプリンタ
==============================================================================

文献[1]p.150-151問11.7より単純な練習問題です．以下のBNF文法を考えます．

PROGRAM ::= Expr ;
Expr ::= ( Expr + Expr ) | ( Expr - Expr ) | ( Expr * Expr )

(i) 構文木を表現するデータ型をファイル syntax.ml に定義しなさい．
(ii) ocamllex で字句解析器を，ocamlyacc で構文解析器を作成しなさい．
(iii) プリティプリンタを作成しなさい．
(iv) ";" までの文字列を読み構文解析を行い，結果をプリントすることを，入力が終了するまで繰り返すプログラムを作成しなさい．以下のように動作をする．

->3;
3
->((1+2)*(3-4));
((1 + 2) * (3 - 4))
->(1+x);
Fatal error: exception Failure("lexing: empty token")

[1] 大堀 淳, ジャック ガリグ, 西村 進: コンピュータサイエンス入門 アルゴリズムとプログラミング言語, 岩波書店 (1999)

2020/07/21 作成
