OCaml で LL(1) パーサー ジェネレーターを探しています... 誰か助けてくれませんか?
4 に答える
LALR パーサーは、LL パーサーが解析できる言語の厳密なスーパーセットを解析できます。したがって、Ocaml に同梱されており、LALR(1) パーサー ジェネレーターである ocamlyacc を使用することをお勧めします。これには文法の若干の書き直しが必要になる場合がありますが、それほど難しくはありません。
camlp4に含まれているストリームパーサーは(私の知る限りでは)LL(1)パーサーです。http://caml.inria.fr/pub/docs/manual-camlp4/manual003.htmlを参照して ください
Planck LL(n) パーサー コンビネーター ライブラリ: https://bitbucket.org/camlspotter/planck/overview
これは私のおもちゃのプロジェクトとして始まり、実際のユーザーはいませんが、オリジナルと 100% 互換性のある OCaml 構文レクサー/パーサーを Planck で実装できました。
使用はお勧めしませんが、興味があれば…試してみてください。
メンヒルについて良いことを聞いた
ホームページの上部には次のように書かれています。
Menhir は、OCaml プログラミング言語用の LR(1) パーサー ジェネレーターです。つまり、Menhir は LR(1) 文法仕様を OCaml コードにコンパイルします。Menhir は、François Pottier と Yann Régis-Gianas によって設計および実装されました。
Menhir は ocamlyacc と 90% 互換性があります。従来の ocamlyacc 文法仕様は、Menhir によって受け入れられ、コンパイルされます。結果のパーサーが実行され、正しい解析ツリーが生成されます。