首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何创建JVM编程语言?

如何创建JVM编程语言?
EN

Stack Overflow用户
提问于 2010-08-01 10:28:09
回答 8查看 27K关注 0票数 95

我用C语言(使用Lex & Bison)为动态类型编程语言创建了一个编译器,它支持循环、函数内部的函数声明、递归调用等。我还创建了一个虚拟机,用于运行编译器创建的中间代码。

我在考虑把它编译成Java字节码,而不是我自己的中间代码。

我看到关于创建JVM语言的问题已经在asked上出现了,但我觉得答案并不是很有意义。

所以我的问题是:

  1. 我想为JVM创建一门语言必须要读JVM specification这本书,你还能推荐其他什么书(当然除了龙书)?我最关心的是关于如何创建一种JVM语言的书籍或教程,而不是一般的编译器。
  2. 有许多Java库可以读、写和更改.class文件,比如jclasslibbcelgnu bytecode等等。你会推荐哪一个?另外,你知道C库也可以做同样的工作吗?
  3. 我正在考虑看看另一种针对JVM虚拟机的语言,比如Clojure,Jython或者JRuby。但是所有这些语言都是非常高级和复杂的(为它们创建编译器)。我正在寻找一种更简单的编程语言(我不介意它是未知的还是未使用的),它的目标是JVM,而且它的编译器是开源的。有什么想法吗?
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-08-02 04:35:52

我也推荐使用ASM,但是看看Jasmin,我在一个大学项目中使用过(或者说不得不使用),它工作得很好。我使用Java和Jasmin为编程语言编写了一个词法分析器-解析器-分析器-优化器-生成器组合,因此它可以生成JVM代码。我上传了代码here;有趣的部分应该是source code itself。在文件夹bytecode/InsanelyFastByteCodeCreator.java中,您可以找到一段将AST Tree转换为Jasmin汇编程序输入格式的代码。这很简单。

源语言(由词法分析器转换为AST )是名为MiniJava的Java子集。它缺少一些“复杂”的特性,如继承、构造函数、静态方法、私有字段和方法。这些功能都不难实现,但还有另一个任务需要编写x86后端(以便生成机器汇编器),如果没有处理这些事情的JVM,这些事情往往会变得很困难。

如果您想知道这个奇怪的类名:大学项目的任务是将AST转换为图(表示输入代码),优化该图,然后将其转换为Java字节码。这大约是项目工作的3/4,而InsanlyFastByteCodeCreator只是测试一切的捷径。

看看Jon Meyer和Troy Downing的“Java Virtual Machine”一书。这本书大量引用了Jasmin汇编程序;它对理解JVM的内部原理非常有帮助。

票数 64
EN

Stack Overflow用户

发布于 2010-08-03 05:10:46

上个学期我参加了一门“编译器构造”课程。我们的项目正是你想要做的。

我用来编写我的语言的语言是Scala。它在JVM上运行,但支持许多Java不支持的高级特性(仍然完全兼容纯java JVM)。

为了输出java字节码,我使用了Scala CAFEBABE library。有很好的文档,你不需要深入到java类中去理解要做什么。

除了这本书,我认为你可以通过阅读我们在课程中所做的labs找到很多信息。

票数 16
EN

Stack Overflow用户

发布于 2010-08-01 10:46:26

ASM可以作为生成字节码的一种解决方案。首先,查看有关从manual生成元素的主题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3380498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档