首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用Java创建.class文件

不使用Java创建.class文件
EN

Stack Overflow用户
提问于 2012-09-08 20:08:21
回答 2查看 208关注 0票数 2

我正在尝试创建一种叫做芒果的玩具编程语言。我首先希望它能编译成Java,然后作为Java进行编译和执行。但我发现这是一个非常缓慢的方法。所以我决定把它编译成Java代码并执行它。我给出了芒果代码和等价的java代码。你能帮我用字节码把我的芒果代码编译成等价的.class文件吗?

在test.mango中

代码语言:javascript
复制
println("Hello World!")

就等于

代码语言:javascript
复制
public class test 
{
   public static void main(String[] args){
       System.out.println("Hello World!")
   }
}

我确实使用了javap在test.java上生成以下字节码

代码语言:javascript
复制
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并执行它时,我会在命令提示符中得到以下错误

代码语言:javascript
复制
java.lang.ClassFormatError: Incompatible magic value number 1131375984

我只读了两个学期的Java编程。我的教授告诉我,您可以使用Java在JVM之上编写编程语言。所以只有我想试一试。我没有编程语言设计方面的经验。所以任何帮助都是有用的。我确实查看了Java规范中的任何线索,但没有得到任何线索。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-08 20:16:57

Java类文件以二进制格式表示字节码,而不是ASCII文本。这意味着指令并不是真正的人类可读的编译形式-类文件只是一堆原始数据。尝试打开用javac创建的类文件,并检查输出的样子。有关类文件的二进制格式的更多信息,请参见维基百科关于Java类文件的文章。

也许您可以使用煤烟作为编译器链中的中间工具来创建类文件,而不是直接输出二进制字节码。

票数 3
EN

Stack Overflow用户

发布于 2012-09-08 20:21:34

我会考虑使用一个字节码库,例如:

  • 鸦胆子
  • bcel
  • 贾尼诺
  • 贾斯敏 (可能;很久没看过了)

您几乎肯定不希望在二进制级别上工作。

您将需要非常熟悉JVM规范

在深入研究之前,我强烈建议您先看看其他简单的JVM语言;事情变得相当复杂,速度也很快。开发JVM语言本身并不需要Java经验,但这并不简单,您需要相当多的知识才能获得更多的知识。

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

https://stackoverflow.com/questions/12334065

复制
相关文章

相似问题

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