2009-10-26 39 views
3

我正在重構一個項目,該項目在編譯期間使用javaCC創建專有語言解析器。由於可以同時存在不同的語言變體,因此決定在運行時從jj文件動態生成java源代碼,然後將java文件編譯成類文件並加載它們。JavaCC:我希望從dymanicly生成的jj文件生成java類並在運行時編譯它們

爲了更有效地做到這一點,我想生成內存中的java文件到我想的某個流。 JavaCC的API Javadoc不太容易訪問:)。

任何人都可以告訴我如何取得最佳進展?

+0

JavaCC是開源的,所以它的API非常容易訪問。但是,我強烈建議你不要這樣做,因爲它將成爲維護的噩夢。相反,更改構建過程以單獨構建和打包語言的各種變體(從維護角度來看,它本身非常有問題) – kdgregory 2009-10-26 12:43:19

+0

該語言部分源自xsd模式文件。最初只有一個。在撰寫本文時,已經有五個,預計會增長。這就是爲什麼我們希望自動化語言解析器生成過程。 – Yaneeve 2009-10-26 13:10:18

回答

1

根據kdgregory的建議,您可能更適合修改構建過程。但是,this article描述瞭如何創建一個新的類加載器,它使用編譯器API即時編譯Java代碼位。將它修改爲從文件而不是字符串中讀取應該相當容易。

1

您可以使用編譯器API(也稱爲JSR-199)(請參閱javax.tools)在內存生成的類中進行編譯。您需要擴展javax.tools.SimpleJavaFileObject類以創建一個代表RAM中Java類的源文本的類。

看看下面的example,它有一個RAMResidentJavaFileObject的實現,它實際上是這樣做的。

相關問題