2009-10-26 35 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的实现,它实际上是这样做的。

相关问题