正在将 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 有许多 preVisitvisitpostVisit 方法,您可以覆盖这些方法以查看不同的 AST 节点。