4

特定の問題で、不完全な可能性のある Java ソース コード フラグメントを解析する必要があります。たとえば、コードは、そのようなフラグメントで定義されていない変数を参照できます。

その場合でも、そのような不完全な Java コードを解析し、便利な検査可能な表現に変換し、そのような抽象表現からソース コードを生成できるようにしたいと考えています。

これに適したツールは何ですか? この投稿では、Antlr、JavaCC、または Eclipse JDT を使用するための提案を見つけました。ただし、不完全なJavaソースコードフラグメントの処理に関する参照が見つからなかったため、この質問があります(さらに、リンクされた質問は2年以上前のものであるため、何か新しいものがマップ上にあるかどうか疑問に思っています)。

例として、コードは次の式のようになります。

"myMethod(aVarName)"

その場合、変数がコード内で参照されていることを何とか検出できるようにしたいと考えてaVarNameいます。

4

4 に答える 4

6

うーん... この質問には、漠然とした単純な答えのようなものさえありません。上記のパーサー技術のいずれかを使用すると、正しい文法を記述し、パーサーを操作して未知のトークンのパスオーバーのようなフォールバック解析を行う場合、やりたいことを実行できます。

目的の場所にたどり着くための最小限の作業は、再開可能な解析を行い、適度に完全な Java 7 文法が付属している ANTLR を使用するか、Eclipse JDT から何を引き出すことができるかを確認することです (これは、 eclipse IDE でのエラーと意図の表記と構文の強調表示。)

この作業はどれも簡単ではないことに注意してください。クラスをインポートして実行するように指示するだけでなく、klocs を作成しているのです。

不正確/不完全な特定の時点で、これらの戦略はすべて失敗します。それは、少なくとも漠然と正しく言わない限り、コンピューター (またはそのことについては人でさえ) があなたの意味を識別できないためです。

于 2013-08-04T20:20:51.617 に答える
2

基本的な構文解析 (装飾されていない AST) だけが必要な場合は、既存の Java パーサーを使用できます。しかし、あなたの質問から、部分的なコードのより深い調査に興味があることがわかりました。まず、解決しようとしている問題が単純ではないことに注意してください。特に部分的なコードでは多くのあいまいさが生じるためです。

しかし、既存の解決策があります - 私は同様の問題を解決する必要があり、Barthélémy Dagenais と呼ばれる素敵な仲間それに取り組み、論文と1組のオープンソース ツールを作成していることがわかりました。 Eclipse では一般的に推奨されます)。私は両方を使用しましたが、どちらも機能しますが、それぞれに制限があります。奇跡を期待しないでください。

Eclipse ベースのツールの使用方法に関するクイック チュートリアルへの直接リンクを次に示します

于 2013-08-05T12:44:35.933 に答える
2

Eclipse には、不完全な Java コードに対処できるコンパイラが含まれています (基本的に、これが、これらの人が独自の Java コンパイラを実装する理由の 1 つです。(より良い説明については、こちらを参照してください))

ASTParser を説明するチュートリアルがいくつかありますが、ここにその 1 つを示します。

于 2013-08-05T10:54:30.857 に答える