Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C++ 手写 lexer、Parser

该示例代码使用纯 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 操作的含义,理解数组变量的真正含义。
  • 正确生成计算数组成员地址的汇编代码

About

The MiniDecaf compilers.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors