# NJU 编译原理

## 课程简介

- 所属大学：南京大学

- 先修要求：离散数学

- 编程语言：Java

- 课程难度：🌟🌟🌟

- 预计学时：80 小时

  

南京大学的编译原理课程，设计者选用了当下热门的 ANTLR （ANother Tool for Language Recognition） v4 编程语言解析生成工具辅助教学，能让使用者专心词法或者语法分析的设计，而让 ANTLR 4 来生成重复的模板代码。IDE 也有其插件，装上后，可以实现即时的可视化语法树，方便学生理解。

ANTLR 4 是 LL 解析器生成器，比起 LR 和 LALR 解析器生成器，它可处理语法的范围相对狭窄。但另一方面其生成的解析器有易于理解和使用的优势。此外，因为其支持“无限长的 token 超前扫描”，所以可处理语法范围狭窄的问题也得到了很好的改善。

老师通过适当的图解和生活例子，幽默风趣地讲述编译原理，让人听来不算乏闷。尤其是今年这版，采取先实际使用 ANTLR 4 完成一些小例子，再补足理论知识的方式。让人能带着问题去找到适配的理论，更让人印象深刻。通过理论知识的学习，逐渐揭开 C 语言的“神秘面纱”。

理论部分基本按照龙书节奏叙述。包括词法分析、语法分析、语义分析、运行时环境、寄存器分配、代码优化与生成等内容。

实践则是本课程的亮点，一步步的，由简单到复杂地实现一个属于自己的编译器。

教授本课的老师极为慷慨，校外学生同样能享受到 Online Judge 以及参与课程讨论，老师还极为细心地整理历年来的学习资料，在课程网站里十分容易找到。

老师还把教学班的 [Zulip](https://2024-compilers-at-software-nju.zulipchat.com/join/wxwq3fib56ltlff2mk6qyrz5/) 地址公开（若有变更，在课程网站也能找到），这意味着你有任何问题，都能在上面提问，同时你也能看到跟你一起学习的南大学生的问题，这些问题都会得到助教和老师的回答，所以我并不用再赘述踩了哪些坑或者经验，因为你能在一个平台上，和一帮正在学习相同内容的人，一起交流问题。

最大感受是，心里不再对实现一个编译器有畏难情绪，也不再无从下手，学完课程，会有一套初步的行之有效的思路，让我们面对挑战。

## 课程资源

- 课程网站：<http://docs.compilers.cpl.icu/>
- 课程视频：<https://space.bilibili.com/479141149/channel/collectiondetail?sid=2312309>
- 课程教材：龙书等
- 课程作业：10 个书面作业 + 8 ~ 10 个编程作业带你实现一个编译器

