将java代码解析为抽象语法树
我将eclipse(org.eclipse.jdt)用于AST 我想(?)我在网上得到了一些有用的代码来获取字段声明和它们的用法。但是我被困在如何获取根节点上将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
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代码转换成如下内容: