有Java字节码生成指南吗?

有Java字节码生成指南吗?,java,compiler-construction,jvm,pascal,bytecode,Java,Compiler Construction,Jvm,Pascal,Bytecode,我们正在编写某种类型的编译器从Pascal到JVM字节码。我们已经实现了表达式树生成,所以下一步应该是创建.class文件。你能推荐一些指南/教程,说明如何至少从一些静态数据生成任何.class文件吗?因为我已经在谷歌上搜索了2个小时并阅读了JVM规范,但我真的需要一些最简单的例子来开始开发整个东西。有人已经编写了一个广泛使用的字节码生成库: 如果你能想出如何将AST放入CGLIB,你会大吃一惊。实际上,你下载的文件夹中有一个示例文件。它名为Helloworld,位于examples子文件夹中。

我们正在编写某种类型的编译器PascalJVM字节码。我们已经实现了表达式树生成,所以下一步应该是创建
.class
文件。你能推荐一些指南/教程,说明如何至少从一些静态数据生成任何
.class
文件吗?因为我已经在谷歌上搜索了2个小时并阅读了JVM规范,但我真的需要一些最简单的例子来开始开发整个东西。

有人已经编写了一个广泛使用的字节码生成库:


如果你能想出如何将AST放入CGLIB,你会大吃一惊。

实际上,你下载的文件夹中有一个示例文件。它名为Helloworld,位于
examples
子文件夹中。它展示了如何编译(从头开始生成)
.class
对应于简单hello world应用程序的文件。它还显示了如何从
.class
文件中获取日期,但这是另一个故事

也许这不是最好的方法,但是当您需要从java字节码生成开始,并且需要一些基本的示例时,最好看看标准包中捆绑的示例


此外,Groovy使用ASM生成其代码:)

我不知道您是否知道,但是FPC有一个用于生成符合JDK 1.5的字节码的方法。这一发展看起来相当近期(2011年11月)。您应该看看它。

有几个广泛使用的字节码生成项目

ASM和CGLib可能是两个最好的例子

您可能不想从头开始为自己构建一个生成库——这是一项大量的工作,很难做到正确,并且可能不会为您提供过多的现有项目

ASM被JVM上的非Java语言广泛使用,有OK-ish文档,而且还不错

我没有那么多地使用CGLib,但我觉得开始使用CGLib并不容易


最后一个数据点是,Java 8团队正在使用ASM对一些新的Java功能(包括lambda表达式)进行原型设计。

谢谢!唯一令人伤心的是,没有关于代码生成的教程:(仅限于
.class
文件操作。无论如何,我会尝试想出一些解决方案。如果你能找出如何将你的Pascal AST映射到Java Beans上,它会起作用吗?这是困难的部分,因为据我所知Pascal不支持对象。CGLIB不能帮助你做到这一点;没有库会自动做到这一点。这就是你需要解决的问题还有你的领域知识。Pascal不支持对象?几十年来都不是这样。我已经写了几十年了,所以这是我的错误。我不知道源代码是如何面向对象的,除了OP.avra:Pascal不支持对象Pascal(苹果,后来的turbo Pascal和Delphi)Dos+1。请注意,这是GPL,但如果你想出售结果,它不是一个理想的来源。Thans,这真的是一个有趣的东西。我不会出售它。这是一个在大学编译器课程期间制作的项目。但是当所有学校都教pascal时,也许我会制作一些NetBeans模块,这样学生们就会有一些好主意为什么不直接使用Lazaru呢它是可定制的,他们正在制作教育版?