正在将 java 代码解析为抽象语法树
Parsing java code into 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.setResolveBindings(true);
CompilationUnit cu = (CompilationUnit) parser.createAST(null);
ASTNode root = cu.getRoot();
System.out.println(root.toString());
如果我执行以下操作,它会打印出我输入的整个 java 代码,而不是根 AST 节点。
我不知道我是否误解了 AST,但我把它想象成二叉搜索树,只是一个节点可以有多个子节点。 (picture)
对此有任何说明或帮助吗?
toString
方法只是将 AST 转换回 Java。
如果您想查看完整的 AST 结构,您需要使用 ASTVisitor
class 并调用 accept
方法:
root.accept(visitor);
其中 visitor
是扩展 ASTVisitor
的 class 的实例。 ASTVisitor
有许多 preVisit
、visit
和 postVisit
方法,您可以覆盖这些方法以查看不同的 AST 节点。
我使用 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,但我把它想象成二叉搜索树,只是一个节点可以有多个子节点。 (picture)
对此有任何说明或帮助吗?
toString
方法只是将 AST 转换回 Java。
如果您想查看完整的 AST 结构,您需要使用 ASTVisitor
class 并调用 accept
方法:
root.accept(visitor);
其中 visitor
是扩展 ASTVisitor
的 class 的实例。 ASTVisitor
有许多 preVisit
、visit
和 postVisit
方法,您可以覆盖这些方法以查看不同的 AST 节点。