pku-minic

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)这种寻址表达方式不挺好的么……