[英]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.