Java JVM / .NET CLR 的代码生成

Ped*_*dro 3 clr jvm code-generation compilation

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

谢谢

Pav*_*aev 5

据我所知,在更高的层面上,两个虚拟机实际上非常相似:都是经典的基于堆栈的机器,具有大量的高级操作(例如,虚拟方法分派是一个操作码)。也就是说,如果您愿意,CLR 可以让您深入了解,因为它具有带算术的原始数据指针、原始函数指针、联合等。它还有适当的尾部调用。因此,如果语言的实现需要上述任何一项(例如,Scheme 规范要求尾部调用),或者如果拥有这些功能可以显着提高语言的优势,那么您可能会希望采用 CLR 方式。

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

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