私はJavaでコンパイラ設計プロジェクトに取り組んでいます。字句解析は(jflexを使用して)行われ、構文解析を行うのにどのyaccのようなツールが最適であるか(最も効率的で、最も使いやすいなど)、そしてその理由を考えています。
5 に答える
特にYACCのような動作(テーブル駆動型)が必要な場合、私が知っているのはCUPだけです。
Javaの世界では、 ANTLRやJavaCCのような再帰下降パーサーに傾倒する人が増えているようです。
そして、効率がパーサジェネレータを選ぶ理由になることはめったにありません。
過去に、私はレクサーとパーサーの両方にANLTRを使用しましたが、JFlexのホームページにはANTLRと相互運用できると書かれています。ANTLRのオンラインドキュメントがそれほど素晴らしいとは言えません。私は「決定的なANTLRリファレンス」に投資することになり ました。これはかなり役に立ちました。
GNUBisonにはJavaインターフェイスがあります。
http://www.gnu.org/software/bison/manual/html_node/Java-Bison-Interface.html
これを使用して、Javaコードを生成できます。
jaccもあります。
Jaccは、可能な限りyaccに近いものですが、純粋なJavaで実装され、Javaパーサーを生成します。
jFlexとのインターフェースが良好です
もう1つのオプションは、GOLDパーサーです。
多くの選択肢とは異なり、GOLDパーサーは文法から解析テーブルを生成し、それらをバイナリの実行不可能なファイルに配置します。サポートされている各言語には、バイナリテーブルを読み取り、ソースファイルを解析するエンジンがあります。
私は特にJava実装を使用していませんが、Delphiエンジンを使用してかなり良い結果が得られました。