Yen*_*nvY 2 compiler-construction assembly llvm-ir
我有一个用LLVM和C ++实现的玩具解释器?通过走AST并使用JIT,基于Perl的语言,内置的数据结构和函数来生成LLVM IR?现在我想将其扩展为可编译的,生成程序集代码并使用gas和ld获取可执行文件。
如果我想要的只是一个可运行的编译器,无需复杂的优化即可创建“ JUST CORRECT” elf可执行文件,我是否必须将AST转换为RTL之类的IR或类似的东西?还是有其他选择而不是在语法分析阶段构建AST?
顺便说一句?我想知道在像lcc或tcc这样的小型编译器中,它的“ IR”和“目标代码”是什么?
您可以通过遍历AST并生成机器指令来完成许多过程语言的汇编代码,这些机器指令可以完成所访问的AST节点所隐含的工作。通常,此任务采用表达式评估的下推式堆栈模型进行,因为这样做的代码生成器不够智能,无法有效分配寄存器。但是,您可以通过这种方式获得有效的汇编代码。
不要指望这能为您提供良好的代码。但是您可能可以很快地构建这些。(预期必须生成一些令人作呕的汇编程序,例如“推X,推Y,弹出EAX,弹出EDX,添加EAX,EDX,推动EAX”)
您可能需要建立至少包含有关已声明变量类型的信息的符号表。在生成“ push I”作为机器指令之前,您真的需要知道整数中的“ I”。(浮点值和字符串需要产生不同的代码)。
如果您以前没有构建过编译器,那么以这种方式进行编译将是很棒的经验。您很快就会得到一个可以正常工作的编译器,并且您了解了很多有关为什么真正的编译器使用IR来实现代码优化的知识。
| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |