2012-07-26 71 views
10

This page描述了我可以如何使用javac中的代碼生成器生成代碼,因爲我可以構建AST(使用我編寫的獨立分析器)。該技術涉及編輯javac的源代碼以基本上繞過Java解析器,以便可以將他/她自己的AST提供給代碼生成器。這可以工作,但我希望以稍微乾淨的方式做到這一點。我想在我的項目中包含生成部分javac的代碼作爲庫,這樣我就可以使用它生成代碼,而不需要將其餘的javac源代碼帶入其中。是否有一個Java庫從AST生成類文件?

有沒有辦法做到這一點與javac,或者有可能是一個更好的庫?

此外,隨意更改問題的標題。我想不出一個更好的,但有點含糊不清。如果你建議編輯一個更好的標題,我會接受它。

+0

這是你自己的AST,一個常見的中間AST,或者已經被javac使用的AST嗎? (這部分對我來說不是很明顯。) – 2012-07-26 20:35:47

+0

我自己的AST。我用我寫的解析器生成它。 (對不明) – Hassan 2012-07-26 20:36:57

+0

如果是你自己的AST,你首先必須翻譯成javac使用的AST表單。 – 2012-07-26 21:09:56

回答

3

我覺得就像是BCEL(字節代碼工程庫)一個Java庫

我回來玩,當我把在編譯器構造一個類,你可能是什麼興趣,基本上,它有一個很好的包裝生成常量池,將已命名的字節碼指令插入方法等等,然後在完成後,可以在運行時使用自定義類加載器加載類,或以正常方式將其寫入文件。

對於BCEL,從語法樹到Java字節碼應該相對容易,雖然有點乏味,但您可能只想使用BCEL生成原始字節碼而不構建樹,在某些情況下。

+0

我一定會考慮BCEL。無論如何,Javac的來源有點混亂。 – Hassan 2012-08-01 19:49:02

0

另一個很酷的框架是ASM,一個字節碼分析和處理框架。

如果您不想使用框架,從現在開始(2014),不可能使用com.sun.source.tree。*的任意表示形式從樹中生成字節碼,如here

相關問題