Skip to content

香港编译原理课程内容与项目要求

编译原理(Compiler Design / Compiler Construction)是计算机科学专业的核心必修课之一,香港各大学普遍将其开设在本科高年级或授课型硕士阶段。由于课程涉及大量理论(形式语言、自动机)与工程实践(完整编译器实现),因此授课+项目结合是香港高校的主流模式。本文从课程定位、内容模块、项目形式、考核方式四个维度,梳理香港编译原理课程的典型样貌,供内地学生选课与预习参考。

注:具体课程代码、学分数与项目细节以各校教务系统最新公布为准。


一、课程定位与先修要求

编译原理属于计算机科学理论与系统的交叉课程,香港高校普遍将其归类于以下三个方向的交集:

常见先修课程

常见课程级别

级别 典型人群 课程深度
本科高年级选修 大三、大四 CS / SE 学生 完整覆盖五大阶段,项目通常 4-6 周
本科必修 部分学校列为必修 理论深度略浅,项目偏教学型
授课型硕士 IT / CS / SE 硕士 周期短、项目密集,常 4-6 人组队

二、课程内容模块:五大经典阶段

无论是哪所香港高校,编译原理课程内容几乎都遵循经典编译器的五大阶段结构:

  1. 词法分析(Lexical Analysis):将源程序字符流转换为 token 流
  2. 语法分析(Syntax Analysis / Parsing):根据文法构建抽象语法树(AST)
  3. 语义分析(Semantic Analysis):类型检查、符号表、类型系统与作用域
  4. 中间代码生成与优化(IR & Optimization):三地址码、控制流图、数据流分析
  5. 目标代码生成(Code Generation):寄存器分配、指令选择、汇编或 LLVM IR 输出

各阶段常见子模块

阶段 典型理论内容 常用工具
词法分析 正则表达式、NFA/DFA 转换、最小化 Flex / Lex / 手写
语法分析 LL/LR/LALR 解析、递归下降、错误恢复 Bison / Yacc / ANTLR
语义分析 类型推导、属性文法、作用域链、符号表 手写实现
中间表示 SSA、三地址码、控制流图 LLVM IR、TAC
优化 常量折叠、死代码消除、循环优化、数据流 LLVM Pass、自研 Pass
代码生成 寄存器分配(图染色)、指令选择 LLVM 后端、汇编输出

进阶方向:部分学校的课程会额外涉及数据流分析框架、活跃变量分析、活跃区间分析,以及 LLVM 基础设施应用(在已有编译器上做优化 Pass),而非要求学生从零实现全部阶段。


三、项目形式:从零实现 vs. 框架扩展

香港高校编译原理课程的项目形式,大致可分为以下三种路线:

路线 A:从零实现完整编译器(教学型项目)

这是最经典的项目路线,适合本科课程:

路线 B:基于 LLVM 框架的优化项目

适合研究型课程或硕士项目:

路线 C:模块化分阶段交付

部分学校为降低期末压力,会将项目拆分为 3-4 个 milestone:

Milestone 内容 占比
M1 词法 + 语法分析 15-20%
M2 语义分析 + 符号表 15-20%
M3 IR 生成 20-25%
M4 优化 + 代码生成 + 报告 30-40%

每个 Milestone 有独立 DDL,采用自动评测机打分,得分制学生即可获相应分数。


四、考核方式:理论与实践并重

香港高校的编译原理课程,考核通常由三部分组成,具体权重以 syllabus 为准:

组成部分 典型权重 形式
期末笔试 40-60% 闭卷,涵盖理论推导与简答题
项目实现 30-50% 代码 + 报告 + 自动评测
平时作业 + 课堂表现 10-20% Quiz、小型练习、出勤

笔试常考题型

项目评分维度


五、内地学生选课与预习建议

如果你从内地来到香港读本科或硕士,选这门课前建议做以下准备:

  1. 提前熟悉 C/C++ 编译流程:至少会用 gcc -E/-S/-c 看预处理、汇编、链接结果,理解 .i / .o / .s 文件差异。
  2. 了解 LLVM 基础:阅读官方 Kaleidoscope 教程,跑通一个最小的 LLVM Pass Demo。
  3. 复习形式语言与自动机:重点掌握 DFA 最小化、LL(1) 与 LR(1) 项目集构造。
  4. 熟悉 Git 协作:课程项目通常以小组形式提交,Git 协作与 PR 流程几乎是必备技能。
  5. 预留充足时间:编译器项目调试周期长,尤其是词法/语法阶段的错误恢复,容易在 DDL 前一周爆肝。

常见挑战


六、与内地编译原理课的对比

维度 内地高校 香港高校
理论深度 较深,偏推导 较深,但更强调工程落地
项目规模 通常 2-3 人 1-4 人皆有,硕士项目更大
工具链 手写 + Flex/Bison 手写 + LLVM 比例较高
评分重点 笔试占比较高 项目占比常 40%+,强调自动化评测
教学语言 中文为主 英文授课,英文报告
资源获取 国内 MOOC(B 站)丰富 教材多采用 Dragon Book / Tiger Book

七、结语

编译原理是香港高校 CS 课程的”试金石”——它既考察理论功底(文法、自动机、数据流),又考察工程能力(完整编译器实现、团队协作、自动化测试)。对内地学生来说,这是一门投入产出比,只要你前期做好形式语言预习与 C/C++ 工程训练,通常能在 4-6 周的项目周期内拿到比较理想的成绩。

需要特别提醒的是,不同学校的课程编号、教学语言、项目难度差异较大,建议选课前查阅目标学校 CS 系官网的 syllabus,并尽可能联系学长学姐了解近两年的项目风格与评分偏好。

各校具体课程代码、考核权重与项目难度,以官方最新公布为准。


hkguide.org 还收录了大量香港学习、生活、就业相关实用指南,如果你正在规划赴港升学或已经在港学习,不妨进一步浏览站内其他专题内容,获取更全面的信息支持。

常见问答

香港高校的编译原理课程一般有哪些选修项目?

香港高校编译原理课程的内容基本遵循经典编译器的五大阶段结构,分别是词法分析、语法分析、语义分析、中间代码生成与优化、目标代码生成。常见子模块包括正则表达式与 NFA/DFA 转换、LL/LR/LALR 解析、类型推导与符号表、SSA 与三地址码、常量折叠与死代码消除、寄存器分配与指令选择等。部分学校的进阶方向会额外涉及数据流分析框架、活跃变量分析,以及基于 LLVM 基础设施编写优化 Pass。

内地学生去香港读编译原理课,需要提前做哪些准备?

建议在赴港前做好五项准备:一是提前熟悉 C/C++ 编译流程,会用 gcc -E/-S/-c 看预处理、汇编、链接结果;二是阅读 LLVM 官方 Kaleidoscope 教程,跑通一个最小的 LLVM Pass Demo;三是复习形式语言与自动机,重点掌握 DFA 最小化以及 LL(1)、LR(1) 项目集构造;四是熟悉 Git 协作流程,因为课程项目通常以小组形式提交;五是预留充足时间,编译器项目调试周期长,尤其是词法与语法阶段的错误恢复,容易在 DDL 前集中爆肝。

香港编译原理课程的项目一般要做多久?团队几个人合适?

项目时长通常与所选路线相关。路线 A 从零实现完整编译器,周期约 4-6 周,团队规模多为 1-3 人;路线 B 基于 LLVM 框架做优化项目,周期 6-10 周,团队规模 2-4 人;路线 C 采用模块化分阶段交付,将项目拆分为 3-4 个 milestone,每个 milestone 有独立 DDL。授课型硕士项目周期较短但更密集,常以 4-6 人组队。具体的项目周期与团队人数,以各校当年 syllabus 为准。

香港编译原理课程的考核方式是怎样的?笔试和项目各占多少?

考核通常由三部分组成:期末笔试、项目实现、平时作业与课堂表现。笔试权重一般在 40-60%,项目实现占比约 30-50%,平时表现占 10-20%。笔试常考题型包括文法歧义性判断、NFA 转 DFA 并最小化、LL(1) First/Follow 集、LR(0)/LR(1) 项目集构造、类型系统推导、数据流分析 IN/OUT 集合、活跃变量分析、寄存器分配的图染色算法手工推演等。项目评分则覆盖功能正确性、代码质量、优化效果(路线 B)、报告与答辩等维度,具体权重以 syllabus 为准。

与内地编译原理课相比,香港高校的教学风格有什么明显差异?

从文章梳理的对比来看,差异主要体现在六个维度:理论深度方面,两边都偏深,但香港更强调工程落地;项目规模上,内地多为 2-3 人小组,香港本科 1-4 人皆有,硕士项目更大;工具链方面,内地手写加 Flex/Bison 较多,香港使用 LLVM 的比例较高;评分重点上,内地笔试占比较高,香港项目常占 40% 以上并强调自动化评测;教学语言方面,内地以中文为主,香港普遍英文授课并要求英文报告;教材与资源方面,内地国内 MOOC 与 B 站资源丰富,香港多采用 Dragon Book 或 Tiger Book 作为主要参考。

延伸阅读