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