2016-09-10 9 views
1

私はASTにeclipse(org.eclipse.jdt)を使用します。抽象構文ツリーへのJavaコードの解析

私は(?)フィールドの宣言とそれらの使い方を得るために、いくつかの便利なコードをオンラインで入手しました。しかし、私はルートノードを取得する方法に立ち往生しています。

ASTParser parser = ASTParser.newParser(AST.JLS3); 
parser.setKind(ASTParser.K_COMPILATION_UNIT); 
parser.setSource(buffer.toString().toCharArray()); 
parser.setResolveBindings(true); 

CompilationUnit cu = (CompilationUnit) parser.createAST(null); 
ASTNode root = cu.getRoot(); 
System.out.println(root.toString()); 

私が次のことをすると、ルートASTノードではなく、入れたjavaコード全体が表示されます。

私はASTを誤解しているかどうかわかりませんが、1つのノードに複数の子供がいることを除けば、バイナリ検索ツリーのように描いていました。 (picture

これについての説明や助け?

+1

なぜルートノードを印刷したいですか?あなたはどんな出力を期待していましたか? 'toString()'のJavadocが "デバッグ目的にのみ適したこのノードの文字列表現を返します"と言うと、この動作は驚くかもしれません。一方、私はより自然な行動を容易に考えることができません。 –

答えて

0

toStringメソッドは、ASTをJavaに戻すだけです。

フルAST構造を見たい場合は、ASTVisitorクラスを使用してacceptメソッドを呼び出す必要があります。

root.accept(visitor); 

visitorASTVisitorを拡張するクラスのインスタンスです。 ASTVisitorには多くのpreVisit,visitおよびpostVisitのメソッドがあり、異なるASTノードを表示するためにオーバーライドできます。

+0

私はいくつかのメソッド(VariableDeclarationFragment、SimpleNodeなど)を持つASTVisitorを作成することができました。しかし私の要点は、それらを木にする方法でしたか? ASTにはその機能がありますか、それともツリーを作成する独自のメソッドを作成する必要がありますか? –

+0

ASTはツリーです。ツリー構造で印刷する場合は、さまざまな訪問者の呼び出しを使用してコードをコーディングする必要があります。 –

+0

よろしくお願いいたします。その答えは、私が探していたものです。私はASTという名前にだまされていたので、Javaコードを解析されたツリーにする機能があると思った。私はこのような何かにJavaコードを変換することを望んでいた:[リンク](http://www.oranlooney.com/static/misl/ast.png) –

関連する問題