Compiler construction 将抽象语法树转换为字节码

Compiler construction 将抽象语法树转换为字节码,compiler-construction,jvm,antlr,bytecode,abstract-syntax-tree,Compiler Construction,Jvm,Antlr,Bytecode,Abstract Syntax Tree,作为一种爱好,我正在努力学习构建一个简单的编译器。我的目标是Java虚拟机 我使用ANTLR插件为Eclipse编写了一个简单的语法 有人告诉我在Antlr生成的AST上有一个方法节点,必须调用它。 我计划使用ASM生成字节码。 那么什么是方法节点,如何从ASM调用它并使其访问方法说明 还有编译器的语义分析器呢。这应该是手动编写的还是有任何生成器?您在这里会问许多不相关的问题。根据您定义的语言,您的语言中可能有一个方法节点,或者如果您的语言编译为main(String[])方法,则不会有任何方法

作为一种爱好,我正在努力学习构建一个简单的编译器。我的目标是Java虚拟机

我使用ANTLR插件为Eclipse编写了一个简单的语法

有人告诉我在Antlr生成的AST上有一个方法节点,必须调用它。 我计划使用ASM生成字节码。 那么什么是方法节点,如何从ASM调用它并使其访问方法说明


还有编译器的语义分析器呢。这应该是手动编写的还是有任何生成器?

您在这里会问许多不相关的问题。根据您定义的语言,您的语言中可能有一个方法节点,或者如果您的语言编译为
main(String[])
方法,则不会有任何方法节点

有多种方法可以将AST转换为目标语言。大多数情况下,您不会直接生成代码,而是为您的目标平台生成一个AST,并让一台漂亮的打印机使用treewalker从中生成代码

语义分析是编译器的编程。在语法层面上阅读和理解输入就是解析。您需要自己编写语义分析器,否则根本不会编写编译器。;-)

我想你用什么来编译汇编代码?一个非常好的开始是为输入语言和目标语言(Jasmin)编写语法,并思考哪些输入结构将呈现什么输出。如何在Jasmin中为i:=1到10编写
循环?处理小问题并根据需要扩展编译器,但要缓慢,尽早彻底地测试新实现的转换


非常好的阅读:。

非常感谢,最近我得到了几乎相同的答案,让我们构建一个编译器,由Jack Crenshaw编写,看起来非常好,我将开始阅读。