我正在尝试创建一种叫做芒果的玩具编程语言。我首先希望它能编译成Java,然后作为Java进行编译和执行。但我发现这是一个非常缓慢的方法。所以我决定把它编译成Java代码并执行它。我给出了芒果代码和等价的java代码。你能帮我用字节码把我的芒果代码编译成等价的.class文件吗?
在test.mango中
println("Hello World!")就等于
public class test
{
public static void main(String[] args){
System.out.println("Hello World!")
}
}我确实使用了javap在test.java上生成以下字节码
Compiled from "test.java"
public class test extends java.lang.Object{
public test();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3; //String Hello World!
5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}但是,当我将它保存为test.class并执行它时,我会在命令提示符中得到以下错误
java.lang.ClassFormatError: Incompatible magic value number 1131375984我只读了两个学期的Java编程。我的教授告诉我,您可以使用Java在JVM之上编写编程语言。所以只有我想试一试。我没有编程语言设计方面的经验。所以任何帮助都是有用的。我确实查看了Java规范中的任何线索,但没有得到任何线索。
发布于 2012-09-08 20:16:57
Java类文件以二进制格式表示字节码,而不是ASCII文本。这意味着指令并不是真正的人类可读的编译形式-类文件只是一堆原始数据。尝试打开用javac创建的类文件,并检查输出的样子。有关类文件的二进制格式的更多信息,请参见维基百科关于Java类文件的文章。
也许您可以使用煤烟作为编译器链中的中间工具来创建类文件,而不是直接输出二进制字节码。
发布于 2012-09-08 20:21:34
我会考虑使用一个字节码库,例如:
您几乎肯定不希望在二进制级别上工作。
您将需要非常熟悉JVM规范。
在深入研究之前,我强烈建议您先看看其他简单的JVM语言;事情变得相当复杂,速度也很快。开发JVM语言本身并不需要Java经验,但这并不简单,您需要相当多的知识才能获得更多的知识。
https://stackoverflow.com/questions/12334065
复制相似问题