为以下语法构造 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
$
接受

更新于: 2021年11月2日

35K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告