パーサー、次の要件を備えたGenerator for Java
-
03-07-2019 - |
質問
次のことを行うJava用のパーサージェネレーターを探しています。私の言語プロジェクトは非常に単純で、トークンの小さなセットのみが含まれています。
変更できるように純粋なREADABLE Javaコードで出力します(これがANTLRを使用しない理由です) 少なくともJava 1.4で実行および動作する成熟したライブラリ
次の項目を確認しましたが、動作する可能性があります:JavaCC、jlex、Ragel?
解決
ラットを使用する必要があります...このように、レクサーとパーサーを分離する必要はありません。プロジェクトを拡張したい場合は簡単です。それはJavaであり、JavaでASTを処理できます...
他のヒント
SableCC で良い経験をしました。
(継承を介して)拡張するAST / Visitorモデルが提供されるという点で、ほとんどのジェネレーターとは異なります。
「品質」についてコメントできないコードの読みやすさの点では(使用してからしばらく経ちましたが)、コードをまったく読む必要のない品質を備えています。サブクラスのコードだけ。
SableCC をご覧ください。 Sableccは、アクションコードを混在させることなく、言語の文法をEBNFとして受け入れ、ツリーノードビジターを使用して横断できる構文ツリーを生成するJavaパーサーを生成する、使いやすいパーサージェネレーターです。 SableCCは強力ですが、ANTLR、JavaCC、yaccなどよりもはるかに簡単に使用できます。また、別個のレクサーも必要ありません。言語プロセッサの構築とは、文法から生成されたビジタークラスを拡張し、構文解析構文がパーサーによって検出されたときに呼び出されるメソッドをオーバーライドすることです。文法ルールXYZごとに、訪問者はパーサーがルールに一致したときに呼び出されるメソッドinAXYZ(Node xyz).... outAXYZ(Node xyz)を持ちます。
私たちはJavaCCを(かなり小さな言語でも)使用しており、満足しています。