Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将java代码解析为抽象语法树_Java_Eclipse_Parsing_Abstract Syntax Tree - Fatal编程技术网

将java代码解析为抽象语法树

将java代码解析为抽象语法树,java,eclipse,parsing,abstract-syntax-tree,Java,Eclipse,Parsing,Abstract Syntax Tree,我将eclipse(org.eclipse.jdt)用于AST 我想(?)我在网上得到了一些有用的代码来获取字段声明和它们的用法。但是我被困在如何获取根节点上 ASTParser parser = ASTParser.newParser(AST.JLS3); parser.setKind(ASTParser.K_COMPILATION_UNIT); parser.setSource(buffer.toString().toCharArray()); parser.setResolveBindin

我将eclipse(org.eclipse.jdt)用于AST

我想(?)我在网上得到了一些有用的代码来获取字段声明和它们的用法。但是我被困在如何获取根节点上

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());
如果我执行以下操作,那么它将输出我输入的整个java代码,而不是根AST节点

我不知道我是否误解了AST,但我把它描绘成类似于二叉搜索树,只是一个节点可以有多个子节点。()


对此有任何澄清或帮助吗?

toString方法只是将AST转换回Java

如果要查看完整的AST结构,需要使用
ASTVisitor
类并调用
accept
方法:

root.accept(visitor);

其中
visitor
是扩展
ASTVisitor
的类的实例
ASTVisitor
有许多
preVisit
visit
postVisit
方法,您可以覆盖这些方法以查看不同的AST节点。

toString
方法只是将AST转换回Java

如果要查看完整的AST结构,需要使用
ASTVisitor
类并调用
accept
方法:

root.accept(visitor);

其中
visitor
是扩展
ASTVisitor
的类的实例
ASTVisitor
有许多
preVisit
visit
postVisit
方法,您可以覆盖这些方法以查看不同的AST节点。

为什么要打印根节点?你期望的产出是什么?鉴于
toString()
的Javadoc表示“返回此节点的字符串表示形式,仅适用于调试目的”,这种行为可能会令人惊讶。另一方面,我想不出更自然的行为。为什么要打印根节点?你期望的产出是什么?鉴于
toString()
的Javadoc表示“返回此节点的字符串表示形式,仅适用于调试目的”,这种行为可能会令人惊讶。另一方面,我想不出更自然的行为。我已经成功地创建了一个包含一些方法的ASTVisitor(如VariableDeclarationFragment、SimpleNode等)。但我的重点是如何把它们变成一棵树?AST是否具有该功能,或者我是否必须创建自己的方法来为其创建树?AST是一个树。如果你想把它打印成一个树形结构,你必须自己使用不同的访问者调用进行编码。好的,谢谢。这就是我一直在寻找的答案。我被AST这个名字愚弄了,所以我认为它具有将java代码转换成解析树的功能。我希望将java代码转换成这样的东西:我已经设法创建了一个ASTVisitor,其中包含一些方法(如VariableDeclarationFragment、SimpleNode等)。但我的重点是如何把它们变成一棵树?AST是否具有该功能,或者我是否必须创建自己的方法来为其创建树?AST是一个树。如果你想把它打印成一个树形结构,你必须自己使用不同的访问者调用进行编码。好的,谢谢。这就是我一直在寻找的答案。我被AST这个名字愚弄了,所以我认为它具有将java代码转换成解析树的功能。我希望将java代码转换成如下内容: