该示例代码使用纯 C++ 编写,但是主要使用 C 风格代码。相比与使用 antlr 等自动生成工具,工作量较大(大约会多花接近 30% 的时间)。该代码阅读难度极低,没有任何魔法操作(主要咱也不会啊)。
-
环境配置
无要求(相信大家都有 g++ 和 make 吧)。
-
打开方式
对应于 12 个 lab,该分支存在 12 个 commit,请使用 git log 查看。你可以使用 git checkout 查看对应某一个 lab 的代码,也推荐你使用 git show 来查看某一次提交的改动,这将会很有帮助。
-
代码说明
代码注释中的生成式以 doc/grammars 中的为准。parser 部分配合文档中手写 parser 的指导食用更佳。
-
注意事项
代码仅供参考,应该能通过所有正确测例,不对任何错误测例做保证!
由于助教也是第一次写编译器,且能力较菜,这份代码参(chao)考(xi) 自 chibicc ,如果有同学感兴趣可以看看这个功能更加强大、全面的小型 c 编译器。
这部分内容为 lab12 难点简要说明,第一次阅读请无视。
lab12 总体难度较大。简要说明处理难点:
- 真正引入了不同长度的类型,这要求我们的寻址方式在 lab11 的基础上作出进一步改动,变量的 offset 含义也要出现变化。
- 正确理解指针和数组 index 操作的含义,理解数组变量的真正含义。
- 正确生成计算数组成员地址的汇编代码