据我所知,将Java源代码解析为AST(抽象语法树)的唯一方法是使用Java Compiler Tree API:com.sun.source.tree
我有两个问题:
答案 0 :(得分:23)
关于你的第二个问题,除了Sun之外,还有许多可用的Java解析器。这是一个小样本:
我最好的建议是尝试每一种方法,看看哪种方法最适合您的需要。
答案 1 :(得分:7)
您可以使用tools.jar并使用它。 javac is open source所以你可以抓住那些代码(假设你可以处理许可证)。 Antlr也有Java语法。
答案 2 :(得分:7)
我使用过Eclipse的AST解析器。我发现它非常好(它是Eclipse插件的一部分,因此使用它确实有意义)。请参阅Exploring Eclipse's ASTParser。
答案 3 :(得分:3)
使用简单易用的Java Parser是...... JavaParser。该项目已经活跃了多年。虽然它最初托管在Google代码上,但现在可以在GitHub上使用:https://github.com/javaparser/javaparser
使用起来非常简单,依赖项的数量很少。它也可以在Maven上使用。
它已经使用了几年,所以它运行得很好并允许解析注释,更改AST并重新生成代码。
答案 4 :(得分:1)
这不是唯一的方法。
请参阅我们的 Java Front End,这是一个基于DMS Software Reengineering Toolkit构建的全功能Java解析器。它解析Java,并将AST构建为内部数据结构。
DMS的重点在于它提供了各种各样的附加有用的机制(属性语法,符号表,流分析,AST操作,包括访问和更新,以及源到源)转换)分析AST并将其转换为结果和/或修改后的源代码。如果您“只是”一个Java解析器(例如,JavaCC + Java语法),那么恕我直言,你将无法用它做很多事情。 DMS可以做很多事情,而不必自己发明所有额外的机器。
如果您真的不想使用DMS提供的额外机器,它将dump the tree as XML。
答案 5 :(得分:1)
我刚刚遇到Jexast,将JDT's ASTParser提取为work independent of Eclipse(取决于org.eclipse.jdt.internal.compiler.**
)。
我还没有尝试过,但看起来确实很有趣。