编译原理冲刺 · 第 13 课 ⏱ 冲刺模式 · 考前总演练

综合模拟卷

跨章节交错练习 —— 检验你是否真的"能上考场"。覆盖第 1–10 章重点。
🎯 怎么用这一课
先合上前面所有课件,自己做。速答题点选项即时判分;大题先在草稿纸上做完,再点"展开"对答案。错的回到对应课(链接已附)重看一遍。这叫主动回忆,比重读笔记有效得多。

第一部分 · 速答题(8 题,点选即判)

1. 符号表管理和出错处理,在编译中?
2. 与正规式等价、且每个输入唯一确定下一状态的是?
3. 编译中用来描述语法的是第几型文法?
4. 含左递归的文法,不能直接用于?
5. 预测分析表出现多重定义(冲突),说明文法?
6. 句柄是?
7. 最常用的中间代码形式是?
8. "把循环内的乘法改成加法"属于哪种优化?
得分:0 / 8

第二部分 · 大题(先做,再展开对答案)

大题一 构造与正规式 (a|b)*abb 等价的 DFA 词法 · L03/L04
画 NFA → 子集构造法。最终 DFA(5 状态,A 初、E 终):
ab
ABC
BBD
CBC
DBE
E★BC
详见 L03
大题二 文法 E→E+T|T, T→T*F|F, F→(E)|i:①消左递归 ②求FIRST/FOLLOW ③判LL(1) 语法 · L05–L07
①消左递归: E→TE′, E′→+TE′|ε, T→FT′, T′→*FT′|ε, F→(E)|i。
②FIRST/FOLLOW:
FIRSTFOLLOW
E(, i), #
E′+, ε), #
T(, i+, ), #
T′*, ε+, ), #
F(, i*, +, ), #
各非终结符候选的 SELECT 两两不相交、预测分析表无冲突 ⟹ 是 LL(1) 文法。详见 L06L07
大题三 同一文法:求 FIRSTVT/LASTVT,构造算符优先关系表 算符优先 · L10
FIRSTVT(E)={+,*,(,i}, FIRSTVT(T)={*,(,i}, FIRSTVT(F)={(,i};
LASTVT(E)={+,*,),i}, LASTVT(T)={*,),i}, LASTVT(F)={),i}。优先关系表:
+*()i#
+
*
(
)
i
#
详见 L10
大题四 把 a := b*c + b*d 翻译成四元式 中间代码 · L11
(1) (*,  b,  c,  T1)
(2) (*,  b,  d,  T2)
(3) (+,  T1, T2, T3)
(4) (:=, T3, _,  a )
逆波兰:a b c * b d * + :=。详见 L11
大题五 划分基本块 + 指出可做的循环优化 优化 · L12
入口语句 = 首条 / 跳转目标 / 跳转的下一条;每个入口到下一入口前为一个基本块。循环中:结果不变的运算外提;归纳变量上的乘法做强度削弱(乘→加)。详见 L12

第三部分 · 考前 30 分钟速记清单

🙋 这是冲刺的最后一关。把这套做一遍,错哪题告诉我哪题——我专门给你那个题型再出 2–3 道强化,直到你稳为止。需要限时模拟(我计时出一整套)也可以说。