Lv0. 环境配置 Lv0.1. 配置Docker 这个Dockerfile写得有点太FHS了,连带着……
Lv1. main函数 Lv1.2. 词法/语法分析初见 这一部分我先前曾在南大编译C版本中做过一部分,区别在于南大编译采……
Lv2. 初试目标代码生成 Lv2.1. 处理Koopa IR 文本形式IR确实好做啊,这一点问题没有;但是这C/C++的……
Lv3. 表达式 靠着debug信息逆向一个IR Builder出来,好玩么?好像有点好玩,但更多的还是折磨,我感觉(……
Lv4. 变量与赋值 因为SysY里的const完全是编译期计算的(实际上是constexpr),所以可以在语义分析阶段就……
Lv5. 语句块与作用域 为了符合「作用域」的定义,哈希表应该采用头插法。 这块我写得真的是非常诡异……为了暴露哈希表的细节,……
Lv6. `if`语句 libkoopa中branch和jump语句在生成时的递归动作会使得%end基本块在%else之前被……
Lv7. `while`语句 我突然理解caller-saved寄存器是什么意思了。 那套yield写得其实有问题,现在改好了。……
Lv8. 函数和全局变量 原来我在迭代化的时候写的this_*都是没用的……行吧,后序遍历太强大了。 这个call带返回值的设……
LvX. `loongarch32r`后端和小游戏 LA的ld和st感觉有点跟RV为了不像而不像了——offset(base)这种寻址表达方式不挺好的么……