编译技术 2022 秋季学期的回忆版真题,来源于计算机速通之家 | QQ 群号:468081841。
🙇♂️🙇♂️🙇♂️时间仓促,有不足之处烦请及时告知。邮箱hez2z@foxmail.com 或者在 速通之家 群里
@9¾。
正则表达式转换
写出 文法
设有文法
证明二义性
证明二义性
反例句子:
过程不写了,来不及了。
语法分析树
- 推导 句型语法分析树
- 短语、直接短语、句柄
题目是错的,下一个。
- 写出消除回溯后的文法
- 写分析表,是否为文法
1. 判断文法是否是LL(1)
- 左递归检查: A存在左递归(A → AaB)
- 左公因子检查: B存在左公因子(B → aA | a)
需要改造文法:
- 消除A的左递归:
A → CA',A' → aBA' | ε - 消除B的左公因子:
B → aB',B' → A | ε
最终文法:
2. First集合与Follow集合
First集合:
- First(S) = {a, c}
- First(A) = {c}
- First(A’) = {a, ε}
- First(B) = {a}
- First(B’) = {c, ε}
Follow集合:
- Follow(S) = {$}
- Follow(A) = {a, c, d, $}
- Follow(A’) = {a, c, d, $}
- Follow(B) = {a, c, d, $}
- Follow(B’) = {a, c, d, $}
3. LL(1)分析表
| 非终结符 | a | c | d | $ |
|---|---|---|---|---|
| S | S → Bd | S → AcB | ||
| A | A → CA’ | |||
| A’ | A’ → aBA’ | A’ → ε | A’ → ε | A’ → ε |
| B | B → aB’ | |||
| B’ | B’ → ε | B’ → A | B’ → ε | B’ → ε |
该文法是LL(1)文法。
LR(1)
- DFA
- 分析表
- 给出句子(不记得了)的分析过程
格式(步骤 状态栈 符号栈 输入串 动作)
DFA
构造增广文法
然后状态转移表什么的,太多了,压榨 AI 也没法写了,直接看视频吧。
四元式
while (a + b < c) do
if (a > b && b < c) {
c = c + 1
} else {
b = b + 1
}
写出四元式,(假设序号从100开始)
| 序号 | 四元式 | 说明 |
|---|---|---|
| 100 | (ADD, a, b, T1) | T1 = a + b |
| 101 | (LT, T1, c, T2) | T2 = T1 < c (while条件) |
| 102 | (JFALSE, T2, 111) | 若T2为假(即!(a+b<c)),跳转到111(结束) |
| 103 | (GT, a, b, T3) | T3 = a > b |
| 104 | (LT, b, c, T4) | T4 = b < c |
| 105 | (AND, T3, T4, T5) | T5 = T3 && T4 (if条件) |
| 106 | (JFALSE, T5, 109) | 若T5为假,跳转到109(else分支) |
| 107 | (ADD, c, 1, c) | c = c + 1 (then分支) |
| 108 | (JMP, 110) | 跳转到110(if-else结束) |
| 109 | (ADD, b, 1, b) | b = b + 1 (else分支) |
| 110 | (JMP, 100) | 跳转回100(while条件判断) |
| 111 | 循环结束 |
NFA 构造
十进制整型常量
八进制整型常量前缀为
十六进制整型常量前缀为,
后缀为 或 的整型常量代表类型为long int.
写出整型常量的
看这个编译技术 -2025fa-lb 复习课/利用正规式描述高级语言中的某个单词结构
翻译
写一个翻译模式可以输出括号内有n个数
例如 输出为
不会,放弃。