Gau*_*tam 6 compiler-construction jvm antlr bytecode abstract-syntax-tree
我正在努力学习构建一个简单的编译器作为业余爱好.我的目标是Java虚拟机.
我使用ANTLR插件为Eclipse编写了一个简单的语法.
有人告诉我,Antlr生成的AST上有一个称为方法节点的东西,必须调用它.我打算用ASM生成字节码.那么什么是方法节点?如何从ASM调用它并使其访问方法指令?
那么编译器的语义分析器呢?应该手动编写还是有任何生成器?
你在这里问了很多不相关的问题。根据您定义的语言,您的语言中可能有一个方法节点,或者如果您的语言无条件编译为方法,则不会有任何方法节点main(String[])。
有多种方法可以将 AST 转换为目标语言。大多数情况下,您不会直接生成代码,而是为您的目标平台生成 AST,并使用一个漂亮的打印机使用 Treewalker 从中生成代码。
语义分析就是编译器的编程。在语法层面上阅读和理解输入就是解析。您需要自己编写语义分析器,否则您根本就不会编写编译器。;-)
我猜你用Jasmin来编译汇编代码?一个很好的开始是为您的输入语言和目标语言(Jasmin)编写语法,并考虑哪些输入结构将呈现哪些输出。如何for i := 1 to 10在 Jasmin 中编写循环?解决小问题并根据需要扩展编译器,但要慢慢地,尽早彻底地测试新实现的转换。
非常好的读物:让我们构建一个编译器,作者:Jack Crenshaw。
| 归档时间: |
|
| 查看次数: |
3124 次 |
| 最近记录: |