编译原理冲刺 · 第 01 课 ⏱ 冲刺模式 · ≤1周

编译全景图

一张图看懂编译器在干什么 —— 也是整门课、整张卷子的"货架"。对应教材第 1 章(1.1–1.3)。
🎯 本课唯一目标
默写出编译的 5 个阶段、说出每个阶段干什么,并知道后面要学的每个题型(词法、LL(1)、算符优先、四元式、优化)分别住在哪个阶段
为什么第一课先学它? 两个理由都直接对着分数:①第 1 章概念题(选择/填空/简答)是送分题,必拿;②更重要的是,零基础最怕"学了一堆零件不知道装哪"。这张图就是收纳架——之后每学一个题型,你都往架子上对应的格子里一放,就不会乱。

一、编译程序到底是什么

编译程序(compiler)就是一个"翻译官"程序:把人写的高级语言源程序,翻译成机器能直接跑的目标程序(汇编/机器语言)[1]。翻译完,目标程序就能独立运行了。

它和解释程序(interpreter)的区别是经典考点,一句话记牢:

⚑ 必背对比

编译:先把整个源程序翻译成目标程序,再运行目标程序。(多一步产出,运行快)

解释边翻译边执行不产生目标程序。(无产出,灵活但慢)

二、编译的 5 个阶段(核心图)

源程序进来,像在流水线上被加工 5 道工序,最后吐出目标程序。每道工序的"输入→输出"都不同:

① 词法分析把字符流切成"单词"字符流 → 单词序列
② 语法分析按文法搭成语法树单词 → 语法树
③ 语义分析
+中间代码
查类型,译成四元式语法树 → 中间代码
④ 代码优化等价变换,更快更省中间代码 → 优化的中间代码
⑤ 目标代码生成生成汇编/机器码,分配寄存器中间代码 → 目标程序
⟳ 表格管理(符号表) ⚠ 出错处理
这两项不是阶段,而是贯穿全程的辅助工作 ↑
■ 前端(与源语言有关、与机器无关):①②③+机器无关优化 | ■ 后端(与目标机有关):机器相关优化+⑤

逐格说人话(每格记一句就够)[2]

🗺 把卷子贴到图上(你的收纳架)

第3章 → 阶段①|第2章(文法)是②的地基|第4、5章 → 阶段②|第7章 → 阶段③|第10章 → 阶段④。
看出来没有?老师划的重点,几乎全集中在"前端"——尤其是词法②和语法②。这就是复习火力的分配方向。

三、两个零碎但爱考的小概念

编译程序的结构(1.3):就是把上面 5 个阶段各做成一个"器"——词法分析器、语法分析器、语义分析与中间代码产生器、优化器、目标代码生成器,再加表格管理出错处理两个贯穿模块[1]

"遍 / 趟"(pass):对源程序(或中间结果)从头到尾扫描一次叫一遍。可以一遍编译,也可以多遍。
易混点:阶段是逻辑划分,是物理扫描次数,两者不必一一对应——一遍里可以同时做好几个阶段的活。

四、老师示范一题

例题 编译程序通常划分为哪几个阶段?其中哪些属于编译前端?符号表管理属于某个阶段吗?
答:通常划分为 5 个阶段——词法分析、语法分析、语义分析与中间代码产生、代码优化、目标代码生成
其中前端包括:词法分析、语法分析、语义分析与中间代码产生,以及与机器无关的优化;目标代码生成(及机器相关优化)属于后端
符号表(表格)管理不属于任何单一阶段,它和出错处理一样贯穿编译全过程
💡 答这类题的套路:先按顺序列 5 阶段 → 再答前/后端归属 → 点出"符号表和出错处理是贯穿全程、不是阶段"这个采分点。

五、你来做(练这一课的命)

点选项立即判分。做错没关系——错一次记得牢。这是主动回忆,比单纯看书有效得多。

1. 编译过程的第一个阶段是?
2. 把单词串按文法组织成语法树、检查程序结构是否合法,是哪个阶段?
3. 检查类型是否匹配、变量是否"先声明后使用",属于哪个阶段?
4. "在不改变运行结果的前提下让目标程序更快更省"指的是?
5. 不生成目标程序、边翻译边执行的语言处理程序是?
得分:0 / 5
口诀:词 → 语 → 义 → 中 → 优 → 目
(符号表 & 出错处理,贯穿全程不掉线)
📺 主源推荐(看一讲,半小时巩固)
哈工大《编译原理》国家精品课 · 第 1 讲「绪论」(陈鄞),中文、考试导向,把本课内容讲一遍 —— 中国大学MOOC 课程主页[2]。时间紧就只看绪论这一讲。
🙋 这是你的课,不是单向讲义。任何一句没看懂、或想多要几道题——直接在对话里问我(你的老师)。比如:"再考我两道编译vs解释的题""把'遍'再讲清楚点"。
  1. [1] 编译程序定义、5 阶段划分与编译程序结构、前端/后端:陈火旺《程序设计语言编译原理》第 1 章(1.1–1.3);交叉印证见 龙书 (Compilers: Principles, Techniques, and Tools)
  2. [2] 阶段职责与课程结构:哈工大《编译原理》国家精品课(中国大学MOOC),共 20 讲含绪论。