首页 文章

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

提问于
浏览
7

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

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

有人告诉我,Antlr生成的AST上有一个称为方法节点的东西,必须调用它 . 我打算用ASM生成字节码 . 那么什么是方法节点?如何从ASM调用它并使其访问方法指令?

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

1 回答

  • 3

    你在这里问了很多不相关的问题 . 根据您定义的语言,可能会有您的语言中的方法节点,或者如果您的语言无条件地编译为 main(String[]) 方法,则不会有任何方法节点 .

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

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

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

    very 好读:Let's Build a Compiler, by Jack Crenshaw .

相关问题