编译原理
- 层级
- 本科生
- 状态
- 建设中
提示:本课程仍在持续设计和校准中,页面内容仅供参考,不代表最终教学版本。
教学大纲
课程概览
编译原理课程围绕一个可运行编译器展开,从词法、语法、语义、IR、优化到代码生成。课程把编译器作为理解程序语言、静态分析、运行时和安全检查的共同基础。
这是程序分析、软件安全和形式化工具链的基础课程。
先修要求
- 离散数学、数据结构和系统编程。
- 熟悉至少一门强类型或脚本语言。
- 能阅读递归算法和基本形式语言材料。
学习目标
- 实现词法分析、语法分析和语义检查。
- 设计中间表示并完成基本优化。
- 生成可执行或可解释的目标代码。
- 理解类型、作用域、控制流和数据流。
- 把编译技术应用到静态检查和安全工具。
教学组织
- 每周 2 次课堂:一次讲授核心概念,一次用于实验、论文讨论或项目评审。
- 课程按 16 周推进,每周都有可检查的作业、实验或项目里程碑。
- 强调可复现材料:代码、配置、数据、实验日志和报告需要能被助教或同学复查。
周计划
第 1 周
第 2 周
语言设计和编译器结构实验与评审
确定课程语言和测试框架。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 3 周
第 4 周
词法分析和正则语言实验与评审
实现 lexer 和错误位置报告。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 5 周
第 6 周
语法分析和 AST实验与评审
实现 parser 并输出 AST。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 7 周
第 8 周
作用域、类型和语义检查实验与评审
完成符号表和类型检查。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 9 周
第 10 周
IR、控制流和数据流实验与评审
生成 IR 和控制流图。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 11 周
第 12 周
优化和分析实验与评审
实现常量传播或死代码消除。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 13 周
第 14 周
代码生成和运行时实验与评审
生成目标代码或字节码解释器。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 15 周
第 16 周
编译器扩展与安全检查实验与评审
加入一项语言特性或静态安全检查。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
考核方式
个人作业
25%概念题、阅读题、设计题和小型编程或实验任务。
实验与项目
40%编译器阶段作业、测试套件和自选扩展。
课堂参与与评审
10%参与讨论、演示、代码或论文评审,以及同伴反馈。
期末报告与答辩
25%提交可复现材料、技术报告和演示,说明方法、结果、限制与后续工作。
课程项目
学生分阶段实现一个小型编译器,并在最后加入一个自选扩展,例如类型特性、优化、解释器、错误诊断或安全 lint。
课程政策
- 允许使用 AI 工具,但所有生成代码、实验记录和设计建议必须经过学生本人审查,并在报告中说明使用方式。
- 严禁提交不能解释的代码、证明、配置或实验结果;答辩时每名成员都需要解释自己负责部分的设计、测试和取舍。
- 迟交会影响迭代评分,但课程更看重可复现、可审计和可维护的结果,而不是临时堆砌。
参考课程
国际名校
- CMU15-411/611 Compiler Design
- CornellCS 4120/4121: Introduction to Compilers
- ETH Zurich252-0210-00L Compiler Design
- Georgia TechCS 4240: Compilers and Interpreters
- MIT6.035: Computer Language Engineering
- PrincetonCOS 320: Compiling Techniques
- StanfordCS 143: Compilers
- UC BerkeleyCS 164: Programming Languages and Compilers
- University of WashingtonCSE 401: Introduction to Compiler Construction