如果我想为Java创建一种新语言,我应该创建一个能够生成与JVM规范兼容的字节码的编译器,对吧?以及JDK库?
我在哪里可以找到一些信息?
感谢。
答案 0 :(得分:2)
我将从一个生成Java源代码的编译器开始。您可能会发现这更容易阅读/理解/调试。稍后您可以对其进行优化以生成字节代码。
编辑:
如果您的功能无法轻松转换为Java代码,您应该能够使用Jasmin创建少量的字节代码类,并具有可以测试死机的所有奇特功能。从生成的Java代码中,这看起来像普通的方法调用。 JVM仍然可以内联该方法,因此这可能根本不会影响性能。
答案 1 :(得分:2)
取决于“为Java创建新语言”的意思 - 你的意思是编译为字节码的语言,它生成的代码可以从任何Java应用程序(例如Groovy)或解释语言中使用(对此你想用Java编写解析器吗? 如果是前者那么@Joachim是对的,看看JVM规范;对于后者,请查看JavaCC之类的内容,为您的语言语法创建解析器。
答案 2 :(得分:1)
Java Virtual Machine Spec应该包含您需要的大部分内容。
答案 3 :(得分:1)
用于字节码生成/操作的优秀库是ASM:http://asm.ow2.org。
它非常灵活多变。但请注意,它的API基于事件(类似于Sax解析器) - 它会读取.class文件,并在遇到新实体(类声明,方法声明,语句等)时调用方法。这看起来有点尴尬,但它节省了大量内存(与替代方案相比:库读取输入,吐出完全进化的树结构,然后你必须迭代它)。
答案 4 :(得分:0)
我认为这不会有太多实际帮助,但它有许多我认为你会觉得有用的理论上的东西。