当前位置:  开发笔记 > 编程语言 > 正文

javac.exe AST编程访问示例

如何解决《javac.exeAST编程访问示例》经验,为你挑选了2个好方法。

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



1> jamesh..:

是的,这是可能的,但仅限于Java 6. Peter vonderAhé在本次访谈中谈到了两个JSR .JSR 199:

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

JSR 269是注释处理API.

本文提供了访问Compiler Tree API的绝佳概述." 访问抽象语法树:编译器树API "部分似乎特别适合您的问题.

根据您正在做的事情,您可能还需要查看Jackpot Rule Language,它是一个插入编译器树的独立重构引擎.



2> Chris Jester..:

编译并运行它-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.:-) 祝好运!

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有