为以下语法构造 SLR 解析表。并解析输入字符串 a * b + a。
描述 - 考虑以下语法
E → E + T|T
T → TF|F
F → F*|a|b。
解答
步骤1 - 构造增广语法并为产生式编号。
(0) E′ → E
(1) E → E + T
(2) E → T
(3) T → TF
(4) T → F
(5) F → F ∗
(6) F → a
(7) F → b。
步骤2 - 查找闭包和 goto 函数以构造 LR(0) 项目。
方框代表新状态,圆圈代表重复状态。
FOLLOW 的计算
我们可以得出
FOLLOW(E) = {+, $}
FOLLOW(T) = {+, a, b, $}
FOLLOW(F) = {+,*, a, b, $}
输入字符串 a * b + a 的解析 -
栈 | 输入字符串 | 动作 |
---|---|---|
0 | a * b + a $ | 移进 |
0 a 4 | * b + a $ | 根据 F → a. 规约 |
0 F 3 | * b + a $ | 移进 |
0 F 3 * 8 | b + a $ | 根据 F → F ∗ 规约 |
0 F 3 | b + a $ | 根据 T → F 规约 |
0 T 2 | b + a $ | 移进 |
0 T 2 b 5 | +a $ | 根据 F → b 规约 |
0 T 2 F 7 | +a $ | 根据 T → TF 规约 |
0 T 2 | +a $ | 根据 E → T 规约 |
0 E 1 | +a $ | 移进 |
0 E 1 + 6 | a$ | 移进 |
0 E 1 + 6 a 4 | $ | 根据 F → a 规约 |
0 E 1 + 6 F 3 | $ | 根据 T → F 规约 |
0 E 1 + 6 T 9 | $ | 根据 E → E + T 规约 |
0 E 1 | $ | 接受 |
广告