2009-10-31 15 views
6

私はJavaのソースファイルを解析することができるJavaライブラリを探しています。それは私にコードのAST表現を与えます。Java言語用のJavaパーサはありますか?

実際には、クラスとメソッドの定義だけでアノテーションを使用します。私はメソッドコードのASTは必要ありません。

私はこの情報をコード生成に使用しています。このため、結果のクラスファイルから情報を取得するために、まずソースファイルをコンパイルできません。私はいくつかの追加のクラスを生成するまで、コードはエラーなしでコンパイルされません。

答えて

2

私はプロジェクトjavaparserを見つけました。このプロジェクトは単一のJavaファイルを解析し、うまく形成されたASTを返します。

9

Java 6はこれをコンパイラのネイティブな部分としてサポートしており、そのための標準API(javax.lang.model)を持っています。あなたはそれをhereで読むことができます。ユースケース(アノテーションやソースからのコード生成)に特化して設計されています。

+0

はい、これはよさそうです。どのクラスがソースファイルの読み込みを担当しているかのヒントを教えてください。 – tangens

+0

コマンドラインでjavacに指定するコンパイラ "plugin"を作成します。私が実装しているインターフェースは 'javax.annotation.processing.Processor'です。 – Ramon

+1

javax.lang.modelは、言語全体の抽象構文ツリーではなく、アノテーションを処理するために必要なものに基づいています。したがって、パッケージ、クラス、メソッド、フィールド、パラメータ、変数はありますが、式や文はありません。 –

2

私はNetBeans Javaparserはあなたが興味を持つだろう何かかもしれないと思う。

+0

今、私はこれの瓶を作りました。どのようにしてJavaソースファイルからASTを作成することができますか? – tangens

2

は、Java言語の文法ファイルでJavaCCを試すことができます。

8

ANTLR(http://www.antlr.org/)には、Java言語のパーサーがあり、ASTもサポートしています。

は(私は個人的にそれを試していない)* .Gファイルに

options { 
    output=AST; 
} 

してみてください。

+0

OK、Java.gをコンパイルしましたが、まだそれを使ってASTを取得する方法がわかりません。例がありますか? – tangens

+0

私はこの段階で(私はまだ学んでいます)提供することができます: 'options {output = AST; } ** .gファイル –

2

@tangensはJavaParserについて書いていますが、今は時代遅れのプロジェクトを参照しています。

2011年にまだアクティブに維持されているフォークがあり、Java 1.7と1.8も解析されています。

あなたはそこにそれを見つけることができます:https://github.com/javaparser/javaparser

免責事項:私はそのプロジェクトに貢献しています。

関連する問題