javac.exe AST程序访问例
-
10-07-2019 - |
题
是否有可能访问的抽象的法树(AST)内部javac.exe 编程方式?你能提供一个例子吗?
解决方案
是的,这是可能的,但仅由于Java6. 彼得von der Ahé 谈到两个Jsr在 这个采访.JSR199:
JSR199编译器API由三件事:第一个基本上允许你调用一个编译器通过API。第二,API允许你自编译器是如何找到并写入了文件。我的意思是文件在抽象意义,因为该文件的编译器处理不一定在本文件系统。JSR199的文件的抽象可以让你有文件放在一个数据库,以及产生直接输出到存储器,例如。最后,JSR199API让你收集诊断从编译器在一个结构化的方式,以便可以容易地改变错误信息,例如,进行IDE的编辑。
JSR269是注释处理。
这篇文章 提供了一个很好的概述访问 编译器树API."部分访问的抽象语法树:编译器树API"似乎尤其适合于你的问题。
取决于你在做什么,你也可能想看看 大奖的规则语言, ,这是一个独立的重构引擎,插入编译器树。
其他提示
编译和运行-cp tools.jar
这(在那里你必须指定tools.jar
的位置,很明显)。
import com.sun.source.util.Trees;
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
public class JCTreeTest {
private static final JavaCompiler javac
= ToolProvider.getSystemJavaCompiler();
public static void main(String[] args) {
final StandardJavaFileManager jfm
= javac.getStandardFileManager(null, null, null);
final JavaCompiler.CompilationTask task
= javac.getTask(null, jfm, null, null, null,
jfm.getJavaFileObjects(args));
final Trees trees = Trees.instance(task);
// Do stuff with "trees"
}
}
据编译和运行对我来说,虽然我还没有与树玩的东西我自己,所以你必须的阅读的javadoc 自己。 :-)祝你好运!
不隶属于 StackOverflow