- 1-1什么是编译
- 1-2编译系统的结构
- 1-3词法分析
- 1-4语法分析概述
- 1-5语义分析概述
- 1-6中间代码生成和编译器后端
- 2-1词法语法分析基本概念
- 2-2文法定义
- 2-3语言的定义
- 2-4文法的分类
- 2-5CFG的分析树
- 3-1正则表达式
- 3-2正则定义
- 3-3有求自动机
- 3-4有穷自动机的分类
- 3-5从正则表达式到有穷自动机
- 3-6从NFA到DFA的转换
- 3-7识别单词的DFA
- 4-1自顶向下分析概述
- 4-2文法转换
- 4-3LL1文法
- 4-4FIRST集和FOLLOW集
- 4-5递归的预测分析法
- 4-6非递归的预测分析法
- 4-7预测分析法中的错误处理
- 4-8自底向上的分析概述
- 4-9LR分析法概述
- 4-10 LR0分析
- 4-11 LR0分析表构造
- 4-12SLR
- 4-13LR1分析
- 4-14LALR分析法
- 4-15二义性文法的LR分析
- 4-16LR分析中的错误处理
- 5-1语法制导翻译概述
- 5-2语法制导定义
- 5-3SSD的求值顺序
- 5-4S属性定义与L属性定义
- 5-5语法制导翻译方案
- 5-6在非递归的预测分析过程中进行翻译
- 5-7在递归预测过程中进行翻译
- 5-8L属性定义的自底向上翻译
- 6-1类型表达式
- 6-2声明语句的翻译
- 6-3简单赋值语句的翻译
- 6-4数组引用的翻译
- 6-5控制流语句SDT
- 6-6布尔表达式SDT
- 6-7控制流的例子
- 6-8布尔表达式的回填
- 6-9控制流语句的回填
- 6-10SWITCH语句的翻译
- 6-11过程调用语句的翻译
- 7-1运行存储分配概述
- 7-2静态存储分配
- 7-3栈式存储分配
- 7-4调用序列和返回序列
- 7-5非局部数据的访问
- 7-6符号表
- 7-7符号表建立
- 8-1流图
- 8-2常用代码优化方法一
- 8-3常用代码优化方案二
- 8-4基本快的优化
- 8-5数据流分析
- 8-6到达定值分析
- 8-7到达定值方程的计算
- 8-8活跃变量分析
- 8-9可用表达式分析
- 8-10支配结点和回边
- 8-11自然循环及其识别
- 8-12删除全局工工资表达式和赋值语句
- 8-13代码移动
- 8-14作用于归纳变量的强度削弱
- 8-15归纳变量的删除
- 9-1代码生成器的主要任务
- 9-2一个简单的目标机模型
- 9-3指令选择
- 9-4寄存器的选择
- 9-5寄存器选择函数getReg的设计
- 9-6窥孔优化
突破系统设计瓶颈:哈工大编译原理20讲精要解析
内容简介:编译原理——哈尔滨工业大学这门经典课程,用20讲内容系统讲解从词法分析到代码生成的完整编译链条。作为计算机专业的核心课程,它最珍贵的价值在于培养全局系统设计思维。记得第一次调试语法分析器时的经历让我深刻理解模块耦合问题——表面错误往往隐藏在其他模块,这种跨模块调试经验是课堂上学不到的实战智慧。
【课程描述】
这门课的最大特色是理论知识与工程实践的完美融合。在构建编译器过程中,我们需要处理词法分析、语法分析、语义分析等多个模块的协同工作,这要求学习者既要理解正则表达式、有限自动机等理论基础,又要掌握指针操作、内存分配等底层细节。
实验环节最让我印象深刻的是符号表设计。当遇到指针地址计算错误时,原本简单的类型声明问题因为系统复杂度被放大,整整调试三天才发现是int*指针算术运算的认知偏差。这种痛并快乐着的调试经历,恰恰是培养系统思维最好的磨刀石。
课程采用递进式教学设计:从文法分类(CFG、正则文法)到LL(1)预测分析,再到LR(0)分析表构造,每个技术点都配有真实编译器案例。比如在中间代码生成阶段,通过对比三地址码与P-code的优劣,帮助理解抽象语法树到目标代码的转换逻辑。
特别推荐第16-19讲的代码优化专题,包含数据流分析、循环优化等工业级编译器技术,这些内容在国内同类课程中实属罕见。通过DAG图优化实验,可以直观感受代码优化带来的性能提升。
课程核心模块
▶ 基础构建篇(第1-7讲)
从文法定义到词法分析器实现,重点培养形式化描述能力:
- 正则表达式与有限自动机的等价转换
- FIRST/FOLLOW集计算算法
- 递归与非递归预测分析法对比
▶ 核心突破篇(第8-15讲)
语义分析与中间代码生成关键技术:
- 属性文法与语法制导翻译方案
- 符号表的多层次实现策略
- 过程调用栈帧的动态分配
▶ 高阶实战篇(第16-20讲)
工业级代码优化与生成技术:
- 基本块划分与流图构建
- 寄存器分配的图着色算法
- 窥孔优化与指令选择策略
适合哪些学习者
本课程需要C语言和数据结构基础,特别推荐以下人群:
- 希望深入理解编程语言底层机制的在职工程师
- 准备参与编译器/解释器开发项目的技术骨干
- 计划考研深造计算机系统方向的高年级本科生
课程带来的独特价值
通过20讲的系统学习,你不仅能掌握Lex/Yacc等工具链的使用,更重要的是获得:
- 复杂系统分解与集成的架构能力
- 跨模块调试与错误定位的工程思维
- 形式语言到机器指令的转换视野
最后分享个学习心得:在完成语法制导翻译实验时,建议先用小样例验证语义动作的正确性,再扩展到完整语法规则——这种渐进式验证方法能显著降低调试复杂度。








