7 hours ago
- 《Crafting Interpreters》和《Writing An Interpreter In Go》教导词法分析、解析和解释,但不涉及原生代码生成。
- QBE 是一个紧凑的编译器后端,用10%的代码实现了工业编译器70%的性能,非常适合学习代码生成。
- 该项目使用简单的算术表达式文法来定义优先级和词法分析规则。
- 词法分析器是一个用Zig实现的状态机,生成数字、运算符和括号等记号。
- 解析器根据Sum、Product和Unary等文法规则构建包含二元和一元运算的抽象语法树。
- 解释器通过递归计算二元和一元运算的值来直接求值抽象语法树。
- 发射器生成静态单赋值形式的QBE中间语言,将操作映射到QBE指令。
- 编译器阶段包括生成QBE SSA代码、使用QBE生成汇编、再通过Zig编译生成可执行文件。
- QBE在可能时通过常量折叠进行优化,但除法会阻止完全优化,从而生成显式的汇编指令。
- 该项目需要QBE和Zig包来构建和运行,源代码可供进一步开发。