web-dev-qa-db-ja.com

Java

私はJavaでコンパイラ設計プロジェクトに取り組んでいます。字句解析は(jflexを使用して)行われ、構文解析を行うのにどのyaccのようなツールが最適であるか(最も効率的で、最も使いやすいなど)、そしてその理由を考えています。

28
vuzun

特にYACCのような動作(テーブル駆動)が必要な場合、私が知っているのは [〜#〜] cup [〜#〜] だけです。

Javaの世界では、 [〜#〜] antlr [〜#〜]JavaCC

そして、効率がパーサジェネレータを選ぶ理由になることはめったにありません。

18
kdgregory

過去に、私はレクサーとパーサーの両方にANLTRを使用しましたが、JFlexホームページにはANTLRと相互運用できると書かれています。 ANTLRのオンラインドキュメントがそれほど素晴らしいとは言えません。私は結局 'The Definitive ANTLR reference' に投資しましたが、これはかなり役に立ちました。

5
toolkit

GNUBisonにはJavaインターフェイス、

http://www.gnu.org/software/bison/manual/html_node/Java-Bison-Interface.html

あなたはそれを使って生成することができますJavaコード。

3
ZZ Coder

Jaccもあります。

Jaccは可能な限りyaccに近いですが、純粋なJavaで実装され、Javaパーサーを生成します。

それはjFlexとうまくインターフェースします

http://web.cecs.pdx.edu/~mpj/jacc/

3
CaTalyst.X

別のオプションは GOLDパーサー です。

多くの選択肢とは異なり、GOLDパーサーは文法から解析テーブルを生成し、それらをバイナリの実行不可能なファイルに配置します。サポートされている各言語には、バイナリテーブルを読み取り、ソースファイルを解析するエンジンがあります。

特にJava実装を使用していませんが、Delphiエンジンを使用してかなり良い結果が得られています。

2
Steve N