簡體   English   中英

javac.exe AST編程訪問示例

[英]javac.exe AST programmatic access example

是否可以通過編程方式訪問javac.exe中的抽象語法樹(AST)? 你能提供一個例子嗎?

是的,這是可能的,但僅限於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 ,它是一個插入編譯器樹的獨立重構引擎。

使用-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 :-) 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM