Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javac.exe AST编程访问示例_Java_Javac_Abstract Syntax Tree - Fatal编程技术网

javac.exe AST编程访问示例

javac.exe AST编程访问示例,java,javac,abstract-syntax-tree,Java,Javac,Abstract Syntax Tree,是否可以通过编程方式访问javac.exe中的抽象语法树(AST)?你能提供一个例子吗?是的,这是可能的,但只有在Java 6之后。讨论中的两个JSR。关于JSR 199: JSR199编译器API由三部分组成:第一部分基本上允许您通过API调用编译器。其次,API允许您自定义编译器查找和写出文件的方式。我指的是抽象意义上的文件,因为编译器处理的文件不一定在文件系统中。例如,JSR199的文件抽象允许您在数据库中拥有文件,并直接向内存生成输出。最后,JSR199API允许您以结构化的方式从编译器

是否可以通过编程方式访问javac.exe中的抽象语法树(AST)?你能提供一个例子吗?

是的,这是可能的,但只有在Java 6之后。讨论中的两个JSR。关于JSR 199:

JSR199编译器API由三部分组成:第一部分基本上允许您通过API调用编译器。其次,API允许您自定义编译器查找和写出文件的方式。我指的是抽象意义上的文件,因为编译器处理的文件不一定在文件系统中。例如,JSR199的文件抽象允许您在数据库中拥有文件,并直接向内存生成输出。最后,JSR199API允许您以结构化的方式从编译器收集诊断信息,以便您可以轻松地将错误消息(例如)转换为IDE编辑器中的行

JSR269是注释处理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"
    }
}