复习提纲

2802 字
14 分钟
复习提纲
Warning

含AI生成内容

编译原理 复习提纲(考试导向)#

★ = 计算大题、必练;☆ = 概念简答、必背。


〇、战略:题型与分值分布#

题号章节分值性质核心考点
第1章 编译程序结构10☆概念阶段划分、编译vs解释、汇编器、基本任务
第2章 文法和语言10☆概念句柄刻画可归约串、回溯、3型文法别名、二义性
第3章 词法分析20★计算正规式→NFA→DFA→最小化、正规式恒等式证明
第4章 自顶向下20★计算消左递归+提公因子、判LL(1)、预测分析表
第5章 算符优先20★计算短语/素短语、优先关系表、分析过程
第6章 LR分析20★计算LR(1)项目集DFA、分析表、分析过程

复习优先级:第 4/5/6 章(算法最重、最易丢分)> 第 3 章 > 第 1/2 章(背概念保底)。


一、第1章 编译程序概论 ☆#

必背概念

  • 翻译程序 / 编译程序(高级→低级,一次性生成目标程序)/ 解释程序(逐句翻译边翻边执行、不生成目标程序)。
  • 编译六阶段:词法分析 → 语法分析 → 语义分析 → 中间代码生成 → 代码优化 → 目标代码生成
  • 贯穿始终的两个辅助模块:符号表管理出错处理
  • 前端(与源语言相关、与机器无关,1~4阶段)/ 后端(与目标机相关,第6阶段);优化可前可后。
  • 遍/趟(pass):对源程序(或中间结果)从头到尾扫描一次。

常考题型

  • 简答:编译分哪几个阶段,各阶段功能(4分必考)。
  • 填空/选择:编译与解释的根本区别;分”遍”的优缺点;符号表的作用。

易错点

  • 汇编语言翻译成机器码的是汇编器,不是编译器。
  • 编译方式生成目标程序、执行快;解释方式不生成目标程序、便于调试但慢。
  • 多遍:优点=结构清晰、功能单一、省内存;缺点=增加 I/O、降低效率。

二、第2章 文法和语言 ☆#

必背概念

  • 研究语言三方面:语法(Syntax)/语义(Semantics)/语用(Pragmatics)。
  • 符号串运算:连接、方幂 x⁰=ε、正闭包 A⁺、闭包 A*=A⁺∪{ε}。
  • 文法四元组 G=(V_N, V_T, P, S)
  • Chomsky 分类(必背表)
名称限制自动机
0短语结构文法α→β,α含至少一个非终结符图灵机
1上下文有关文法|β|≥|α|线性界限自动机
2上下文无关文法(CFG)A→β下推自动机
3正规/正则文法A→a 或 A→aB有穷自动机
  • 推导:直接推导 ⇒、推导 ⇒*;最左推导 / 最右推导=规范推导
  • 句型(S⇒x)/ 句子(句型且 x∈V_T)/ 语言 L(G)。
  • 短语、直接短语、句柄(第5、6章反复用,务必吃透):
    • 短语:S⇒*αAδ 且 A⇒⁺β,则 β 是相对 A 的短语。
    • 直接短语:A⇒β(一步),β 是直接短语。
    • 句柄 = 最左直接短语
  • 二义性:一个句子存在两棵不同语法树(或两个不同最左/最右推导)。二义性不可判定。

常考题型

  • 填空:规范归约用句柄刻画可归约串;自顶向下的问题是递归(左递归)和回溯;3型文法又称正规文法
  • 简答:什么是二义性 + 为什么不可判定。
  • 计算:给文法句型求全部短语/直接短语/句柄;求文法生成的语言(如 S→1S|2S|ε 生成 {1,2}*)。

三、第3章 词法分析 ★#

必背概念

  • 正规文法(3型,右线性 A→aB / A→a)、正规式、正规集。
  • 正规式代数规则:s(r|t)=sr|st(分配律成立);rs≠sr(连接不满足交换律)
  • DFA 五元组 M=(K,Σ,f,S,Z),f: K×Σ→K(单值、单初态)。
  • NFA:f: K×Σ→2^K(幂集)、可多初态、可有 ε 弧。
  • ε-闭包 ε-closure(I)、move(I,a)、I_a=ε-closure(move(I,a))。

★必练算法(词法大题一条龙)

  1. 语言描述 → 正规式(如”倒数第二个字符为a”→ (a|b)*a(a|b))。
  2. 正规式 → NFA(Thompson 构造:ε、a、st 连接、s|t 并、s* 闭包)。
  3. NFA → DFA 确定化(子集构造/造表法:算 ε-closure 和各输入的 I_a,新状态补到表尾,直到不再产生新状态)。
  4. DFA 最小化(分割法:先分终态组 / 非终态组,再按转移目标所属组逐步细分,直到不可再分,合并等价态、去多余态)。
  5. 正规式 ↔ 正规文法 互相转换(S→r 逐步分解 / A→xB,B→y 合并回 A=xy)。

常考题型

  • 20分大题:给语言 → 写正规式 → 构造NFA → 确定化DFA → 最小化DFA。
  • 证明题:用集合思想证正规式恒等式(如 s(r|t)=sr|st)。

易错点

  • ε-closure 一定包含状态自身
  • 最小化第一步必须是”终态/非终态”两分,不是一上来全拆。
  • DFA 是 NFA 的特例;NFA、正规式、正规文法三者等价可互转

四、第4章 自顶向下语法分析 ★#

必背概念

  • LL(1):从左到右扫描、最左推导、向前看1个符号。
  • FIRST(α):α 能推出的串的首终结符集(含 ε 若 α⇒*ε)。
  • FOLLOW(A):句型中紧跟 A 之后的终结符集;对开始符 S 有 #∈FOLLOW(S)。
  • SELECT:A→α 非空则 =FIRST(α);α⇒*ε 则 =(FIRST(α)−{ε})∪FOLLOW(A)。
  • LL(1) 充要条件:同一非终结符任意两候选式 SELECT 交集为空。

★必练算法

  1. 求各符号 FIRST 集、FOLLOW 集、SELECT 集
  2. 判断是否 LL(1)(同左部候选 SELECT 是否相交)。
  3. 消除左递归
    • 直接:A→Aα|β ⟹ A→βA′, A′→αA′|ε。
    • 间接:先代入化成直接左递归再消。
  4. 提取左公因子:A→αβ|αγ ⟹ A→αA′, A′→β|γ。
  5. 构造预测分析表 M[A,a]:a∈SELECT(A→α) 处填 →α,空格填 error。
  6. 预测分析过程(栈 / 剩余输入 / 所用规则;#S 进栈起,匹配终结符弹栈、非终结符查表展开)。

常考题型(模拟卷四:20分)

  • 改写文法使其适合自顶向下(消左递归 + 提公因子)。
  • 判断改写后是否 LL(1)(写依据)。
  • 构造预测分析表;分析输入串。

易错点

  • α⇒*ε 时 SELECT 要并上 FOLLOW,别忘。
  • 消左递归后常出现不可达/多余产生式,必须删
  • 递归下降要求文法必须是 LL(1);直接左递归会导致死循环。

五、第5章 自底向上——算符优先分析 ★#

必背概念(名词解释高频)

  • 自底向上 = 归约(RHS→LHS);移进-归约、可归约串。
  • 短语 / 直接短语 / 句柄(同第2章)。
  • 素短语:至少含一个终结符、且不再包含其他素短语的短语。
  • 最左素短语:句型中最左边的素短语。
  • 算符文法 OG:无形如 U→…VW…(两非终结符相邻)的规则。
  • 算符优先文法 OPG:OG + 任意两终结符间至多一种优先关系。OPG 无二义。
  • 优先关系 < = > 有次序,≠数学大小;只看终结符之间。

★必练算法

  1. 给句型求 短语、直接短语、句柄、素短语、最左素短语(务必练熟,5项都要写)。
  2. 求每个非终结符 FIRSTVT / LASTVT
    • FIRSTVT(A)={ b | A⇒⁺b… 或 A⇒⁺Bb… }(往下推能露出的第一个算符)。
    • LASTVT(A)={ a | A⇒⁺…a 或 A⇒⁺…aB }(最后一个算符)。
  3. 构造算符优先关系表
    • A→…aB…:a < FIRSTVT(B) 每个元素。
    • A→…Ba…:LASTVT(B) 每个元素 > a。
    • A→…ab… / A→…aBb…:a = b。
    • 补界符:# < FIRSTVT(S)、LASTVT(S) > #、# = #。
  4. 算符优先分析过程(栈 / 优先关系 / 当前符号 / 输入 / 动作):栈顶终结符 vs 输入符,< 或 = 移进,> 归约(找最左素短语,非终结符不影响)。
  5. 优先函数(Floyd 算法):初值 f=g=1;按 a>b→f(a)=g(b)+1a<b→g(b)=f(a)+1a=b→取等 迭代到收敛。

常考题型(模拟卷五:20分)

  • 名词解释:句柄、素短语。
  • 给文法句型求 5 种短语。
  • 构造优先关系表(写步骤);分析输入串。

易错点

  • 素短语必须至少含一个终结符(纯非终结符的短语不算)。
  • 算符优先分析去掉了单非终结符归约(如 T→F),可能把错句子误判为正确
  • 优先函数缺点:无优先关系的空格无法体现出错位置。

六、第6章 自底向上——LR 分析 ★#

必背概念

  • LR(k):L=从左到右扫描,R=最右推导的逆(规范归约),k=向前看符号数。
  • 活前缀 / 可归前缀:S′⇒*αAγ⇒αβγ,αβ 为可归前缀,其前缀为活前缀(不含句柄之后的符号)。
  • LR(0) 项目(圆点位置)四类:
    • 移进项目 A→α·aβ、待约项目 A→α·Bβ、归约项目 A→αβ·、接受项目 S′→α·。
  • CLOSURE(闭包)、GO(I,X)(转移)、项目集规范族。
  • 冲突:移进-归约冲突归约-归约冲突;无冲突=相容。
  • 能力关系(必背):LR(0) ⊂ SLR(1) ⊂ LALR(1) ⊂ LR(1)。

四种方法的区别(核心)

方法归约时机特点
LR(0)归约项目对所有终结符归约最弱,几乎无用
SLR(1)仅对 a∈FOLLOW(A) 归约用 FOLLOW 解冲突
LR(1)项目带搜索符,对 a=搜索符归约最强,表最大
LALR(1)合并同心集(心相同、搜索符取并)实用主流,表同 LR(0)大小

★必练算法

  1. 拓广文法 S′→S,构造 LR(0) / LR(1) 项目集规范族(画识别活前缀的 DFA)。
    • LR(1) 闭包关键:A→α·Bβ,a 引出 B→·η,b,其中 b∈FIRST(βa)
  2. 构造分析表 ACTION / GOTO(sj 移进、rj 归约、acc 接受、空 error)。
  3. 分析输入串(状态栈 / 符号栈 / 输入串 / action / goto)。
  4. 判断文法属于哪类 LR(看冲突:有移进-归约冲突→非LR(0);FOLLOW 能否解→SLR;合并同心集有无归约-归约冲突→LALR)。

常考题型(模拟卷六:20分)

  • 画 LR(1) 识别所有活前缀的 DFA。
  • 构造 LR(1) 分析表。
  • 写输入串分析过程。
  • 简答:LR 分析器 vs 优先关系分析器识别句柄的异同。

易错点

  • LR(0) 归约项目对所有终结符都填 rj;SLR 只在 FOLLOW 集列填。
  • LR(1) 构造闭包别漏”继承的后继符”(β⇒ε 时 b=a)。
  • LALR 合并同心集只可能引入归约-归约冲突,不会引入移进-归约冲突。
  • 拓广文法 S′→S 是为了有唯一接受态。

七、必会手算算法总清单(考前自测)#

  • 语言 → 正规式(第3章)
  • 正规式 → NFA(Thompson)
  • NFA → DFA(子集构造/造表)
  • DFA 最小化(分割法)
  • 正规式 ↔ 正规文法
  • 求 FIRST / FOLLOW / SELECT
  • 消除左递归(直接+间接)、提取左公因子
  • 判断 LL(1) + 构造预测分析表 + 分析串
  • 求短语/直接短语/句柄/素短语/最左素短语
  • 求 FIRSTVT / LASTVT + 构造算符优先关系表 + 分析串
  • 优先函数(Floyd)
  • 构造 LR(0)/LR(1) 项目集规范族(画DFA)
  • 构造 LR 分析表 + 分析串
  • 判断文法属于 LR(0)/SLR(1)/LALR(1)/LR(1)

八、高频概念对照(易混)#

概念关键区分
编译 vs 解释编译生成目标程序;解释边翻边执行不生成
最左推导 vs 最右推导最右推导=规范推导;规范归约=最右推导逆过程
句柄 vs 素短语句柄=最左直接短语;素短语=含终结符且不含其他素短语的短语
DFA vs NFADFA单值单初态无ε;NFA可多值多初态有ε
FIRST vs FIRSTVTFIRST含终结符首符;FIRSTVT只含算符(终结符),用于算符优先
LR(0)/SLR/LALR/LR(1)归约信息量递增:无→FOLLOW→合并搜索符→独立搜索符
短语 vs 直接短语短语 A⇒⁺β;直接短语 A⇒β(一步)

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

复习提纲
https://lingluoa.icu/posts/编译原理/复习提纲/
作者
lingluoa
发布于
2026-07-04
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
lingluoa
Hello, I'm lingluoa.
公告
欢迎来到我的博客!不定期更新中。
文章目录
标签
站点统计
文章
53
分类
9
标签
75
总字数
175,771
运行时长
0
最后活动
0 天前
站点信息
构建平台
ESA Pages
博客版本
Firefly v6.15.6
文章许可
CC BY-NC-SA 4.0