跳转至

编译原理

先区分课程路线

“南京大学编译原理”并不对应一套跨院系统一的课程。计算机学院与软件学院的公开课程在授课团队、实现语言、工具链和作业组织上均可能不同;学分、开课学期和考核方式也应以学生所在年级的培养方案、教务系统和当年课程通知为准。

共同知识框架

不同路线通常都会涉及以下编译阶段,但覆盖深度和实现顺序可能不同:

  1. 词法与语法分析:将源程序转换为 Token 流和抽象语法树(AST),理解正规语言、上下文无关文法及常见分析方法。
  2. 语义分析:建立符号表,处理作用域、名字解析和类型检查。
  3. 中间表示:把 AST 转换为三地址码等 IR,并建立控制流等后续分析所需结构。
  4. 优化:在明确语义保持条件的前提下进行局部或全局变换。
  5. 目标代码生成:完成指令选择、寄存器分配及目标汇编输出。

这些主题是知识地图,不代表任一教学班的正式先修关系或考试范围。程序设计、数据结构、离散数学/形式语言、计算机系统基础通常有助于学习;正式先修要求须查当年培养方案。

计算机学院路线

  • 2026 公开课程页:计算机学院现有公开入口为 Compiler 2026。该页面是核对 2026 年教师、进度和材料的优先来源,不能用其他院系或往年页面替代。
  • 2025 历史实例Compiler 2025 展示的是当年以 C-- 源语言到 MIPS/SPIM 为目标的实践路线,分为词法/语法、语义分析、中间代码、优化和目标代码生成等阶段。它可用于理解课程结构,但不证明 2026 或以后沿用相同作业、截止时间和评分规则。

因此,Java/ANTLR 资料不应被写成计算机学院当前课程的统一实现路线。选课后应先确认当年指定语言、框架、目标平台和提交仓库。

软件学院公开路线

软件学院另有独立的编译课程与公开材料:

学习与实现建议

  1. 先锁定版本:只使用当年课程页给出的文法、测试接口、依赖版本和提交说明。
  2. 按阶段建立可测试接口:为词法、语法、语义、IR 和代码生成分别准备最小正例、反例与边界测试。
  3. 区分语言规范和实现选择:文法、类型规则和目标机约束来自任务规范;ANTLR、手写递归下降或其他工具只是实现手段。
  4. 记录语义保持依据:优化阶段不仅要“跑得通”,还应说明变换适用条件,并用差分测试或参考解释器核对行为。

学术诚信警告

编译器作业通常要求独立或按指定小组完成。不要查找、复制、改写或传播往届编译器源码、测试答案和实验报告,也不要让生成式 AI 代写可提交实现。公开教材和课程讲义可用于理解概念;代码复用、协作范围及 AI 工具使用边界必须以当年书面规则为准。保留自己的设计记录和调试过程,以便课程组核验。

参考资料