Java JVM / .NET CLR的代码生成

时间:2009-12-14 15:50:05

标签: code-generation clr jvm compilation

我正在大学做编译器学科,我们必须为我们想要的任何平台生成我们发明语言的代码。我认为最简单的情况是为Java JVM或.NET CLR生成代码。任何一个选择的建议,以及哪些API可以帮助我完成这项任务?我已经完成了所有的语义分析,只需要为给定的程序生成代码。

谢谢

3 个答案:

答案 0 :(得分:4)

据我所知,在更高层次上,两个虚拟机实际上非常相似:两者都是经典的基于堆栈的机器,主要是高级操作(例如虚拟方法调度是操作码)。也就是说,CLR让你可以根据需要使用金属,因为它有原始数据指针,包括算术,原始函数指针,联合等。它还有适当的尾调用。因此,如果语言的实现需要上述任何一个(例如,Scheme规范要求尾调用),或者如果通过具有这些功能而显着优势,那么您可能希望采用CLR方式。

另一个优点是你得到一个库存API来发出字节码 - System.Reflection.Emit - 尽管它对于完全成熟的编译器场景有些限制,但对于简单的编译器来说它仍然足够。

使用JVM,您获得的两个主要优点是更好的可移植性,以及字节码本身可以说更简单(因为功能较少)这一事实。

答案 1 :(得分:1)

另一个选项我遇到了一个名为run sharp的库,可以使用emit在运行时生成MSIL代码。但是以更好用户友好的方式更像c#。可以在此处找到该库的最新版本。 http://code.google.com/p/runsharp/

答案 2 :(得分:0)

在.NET中,您可以使用Reflection.Emit命名空间生成MSIL代码。

请参阅msdn链接: http://msdn.microsoft.com/en-us/library/3y322t50.aspx