跳转至

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 地址公开(若有变更,在课程网站也能找到),这意味着你有任何问题,都能在上面提问,同时你也能看到跟你一起学习的南大学生的问题,这些问题都会得到助教和老师的回答,所以我并不用再赘述踩了哪些坑或者经验,因为你能在一个平台上,和一帮正在学习相同内容的人,一起交流问题。

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

课程资源