============================================================================== == 単純な字句解析器・構文解析器・プリティプリンタ ============================================================================== 文献[1]p.150-151問11.7の解答例である. 「MLでプログラミングしてみることを勧める.」とあったのを受けてML系の言語の1つであるOCamlを用いてプログラミングされている. 字句解析器,構文解析器,プリティプリンタの生成にBNFC [2] を用いる必要がある. コマンドラインから make とタイプすると Top という実行ファイルが生成される.実行すると (vi)のような対話が可能である. ただし,解答の簡潔さのために入力を C-d (EOF)で終わる必要がある不具合をそのままにしている.生成された構文解析器の一部を修正すればこの必要は無い. 具体的にはParA.mlyの  pProgram : program TOK_EOF { $1 } を  pProgram : program { $1 } に書き換える. 以下の式も構文解析可能である. let factorial = (fix (fn x => (fn n => (case n of 1(x) => 1, 2(y) => (x (n - 1)))))) in (factorial 10) end; [1] 大堀 淳, ジャック ガリグ, 西村 進: コンピュータサイエンス入門 アルゴリズムとプログラミング言語, 岩波書店 (1999) [2] BNF Converter https://bnfc.digitalgrammars.com/ 2019/09/19 作成 2020/08/12 README.txtを改訂,1と2がreserved wordsになっていた不具合を修正