为使用ANTLR 4和Java构建编译器的程序生成字节码

为使用ANTLR 4和Java构建编译器的程序生成字节码,java,compiler-construction,antlr4,bytecode,cil,Java,Compiler Construction,Antlr4,Bytecode,Cil,我目前正在用ANTLR 4和Java为一种特定的编程语言开发一个编译器,现在我想为任何用这种特定语言编写的程序生成字节码或CIL,但我不确定从哪里开始 我已经搜索了很多页面,但找不到任何教程,而且我找到的任何示例都不能正确解释过程。我已经看到一个有用的库是asm,但我不理解它的实现 有没有人能用一个可能的例子来帮助我了解首选库及其实现?这不是一个ANTLR4问题,但是方法相对简单:研究执行器,它稍后将执行您的字节码。查找描述此特定计算机字节码的文档。然后编写一个侦听器或访问者来泄漏代码 这里的评

我目前正在用ANTLR 4和Java为一种特定的编程语言开发一个编译器,现在我想为任何用这种特定语言编写的程序生成字节码或CIL,但我不确定从哪里开始

我已经搜索了很多页面,但找不到任何教程,而且我找到的任何示例都不能正确解释过程。我已经看到一个有用的库是
asm
,但我不理解它的实现


有没有人能用一个可能的例子来帮助我了解首选库及其实现?

这不是一个ANTLR4问题,但是方法相对简单:研究执行器,它稍后将执行您的字节码。查找描述此特定计算机字节码的文档。然后编写一个侦听器或访问者来泄漏代码


这里的评论者似乎认为您想要生成Java字节码,但我实际上对此并不确定,因为您只在解析上下文中提到Java,而不是代码生成。

一个技巧是首先生成Java,用javap编译并反编译它,然后用它用ASM创建第二个字节码编译器。不过,用javap反编译也可以。您可以使用ASM替换类的某些部分。示例代码您必须自己搜索。编写ASM cde来拦截某个测试类的某些调用可能是一个很好的切入点。@JoopEggen问题是我没有java文件要编译。我所拥有的是一个包含另一种语言代码的文件,我在其中使用ANTLR 4开发了一个编译器,该编译器验证并执行该代码。现在我想做的是,能够为该语言的指令生成字节码。我只是建议,可以先将编译器编写成java,对其产品进行反编译,使每个构造都清晰,然后将编译器编写成字节码。或者编写小的java代码片段,编译和反编译以获得可用于ASM的工作目标代码。否则就有两个问题:一,。您是否正确应用了ASM,以及2。生成的代码是否正确。正如您必须了解它是如何工作的一样,起点是为它生成代码。它包含类文件格式的描述(第4章)和一些Java构造如何映射到字节码的示例(第3章),这有助于您正确思考。我从来没有用过关于这个话题的任何教程。他们只会重复信息(在最好的情况下)。有时它们是不正确的、草率的或过时的,你必须参考权威的源代码。一个非常好的教程是,生成字节码是整个系列的第8部分,它将引导你完成所有事情。代码在kotlin中,但应该很好地映射到java。我想补充一点,最好的起点是手动生成一些字节代码,以了解如何工作。我已经使用ANTLR4(访问者方法)创建了解释器,但我现在要做的是,对于我正在解释的语言,能够加载一个文件,其中包含用该语言编写的代码,并为该代码生成字节码,稍后可以执行。