Step1 - 首先,将其转换为增广语法 G' 并对产生式进行编号
(0) S′ → S
(1) S → L = R
(2) S → R
(3) L →∗ R
(4) L → id
(5) 右→左
Step2 - 找到闭包和 goto 函数来构造 LR (0) 项目。
在下面的一组 LR(0) 项中,Boxes 代表新状态,圆圈代表重复状态
Step3 - FOLLOW的计算 - 应用FOLLOW的规则(1),我们得到
FOLLOW(S)= $(1)
S → L = R
应用规则 (2) FOLLOW - 比较 S → L = R 与 A → α B β。
S → | Ε | L | = R |
A → | 甲 | B | Β |
∴ A = S, α = ε, B = L, β = {= R}
FIRST(β) = FIRST(= R) = {=} 不包含 ε
遵循规则 (2a)
FOLLOW(L)= {=} (2)
应用 FOLLOW− 的规则 (3) 比较 S → L = R 与 A → α B
S → | 大号 = | R |
一→ | α | Β |
∴ FOLLOW(R)= { FOLLOW(S)} (3)
S → R
不能应用 FOLLOW 的规则 (2)。
因为 S → R 不能与 A → α B β 进行比较。因为,如果我们比较,我们会得到,α = ε,B = R,β = ε。但是 β 不应该是 ε 来应用这个规则。
应用 FOLLOW 的规则 (3) - 比较 S → R 与 A → α B
年代 → | ε | R |
一→ | α | Β |
∴ A = S, α = ε, B = R
FOLLOW(R)= { FOLLOW(S)} (4)
左→*右
不能应用 FOLLOW 的规则 (2)。
因为 L →* R 不能与 A → α B β 进行比较。因为 β 将是 ε,这是不可能的。
应用 FOLLOW 的规则 (3) - 比较 L →∗ R 与 A → α B
大号 → | * | R |
一→ | α | Β |
∴ A = L, α =∗, B = R
FOLLOW(R)= { FOLLOW(L)} (5)
L →id
不能应用 FOLLOW 的规则 (2) 和 (3)。
由于 L → id 不能与 A → α B β 和 A → α B 匹配。
R → L
不能适用规则 (2)。
因为 R → L 不能与 A → α B β 匹配。
应用 FOLLOW 的规则 (3) - 比较 R → L 与 A → α B
R → | 乙 | L |
一→ | 一种 | Β |
∴ A = R, α = ε, B = L
FOLLOW(L)= { FOLLOW(R)} (6)
结合语句(1)到(6)
FOLLOW(S)= $(1)
FOLLOW(L)= {=} (2)
FOLLOW(R)= { FOLLOW(S)} (3)
FOLLOW(R)= { FOLLOW(S)} (4)
FOLLOW(R)= { FOLLOW(L)} (5)
FOLLOW(L)= { FOLLOW(R)} (6)
从 (1)
FOLLOW(S)= $
从 (1), (2), (3), (4), (5), (6)。
FOLLOW(L)= FOLLOW(R)= {=, $}
解析表的构建
填充班次条目
由于 goto (I 0 ,*) = I 4
∴ 动作 [0,∗] = s4
由于 goto (I 0 , id) = I 5
∴ 动作 [0, id] = s5
同样,所有班次条目都填充到表中。
填充减少条目 (r)
应用规则 (2b) 构建 SLR 解析表
考虑
I 2 S → L ∙= R
R → L ∙
R → L ∙ 与 A → α ∙ 比较
R → | 大号 | . |
一→ | α | . |
∴ A = R, α = L
由于 R → L 是给定问题中的生产编号 (5)。
∴ 在行状态 2 和列 =, $前面写上 r5。
类似地,Reduce 的其他条目被填充到表中。
填写“接受”条目
考虑我1
I 1 − S′ → S ∙
应用解析表构造规则(4)
∴ 在行状态 1 和列 $前面写上“接受”。
通过填写所有的 shift、reduce、goto 和 accept 条目,我们得到以下解析表。
下表准确显示 Action [2, =] = s6 或 r5 中有多个条目。
状态 I 2 - S → L ∙ = R
R → L ∙
R → L ∙ 是 A → α ∙ 形式
∴ 减少规则可以应用在它上面。
R → L 是给定问题中的生产编号 (5)。
∴ 动作 [2, =] = r5
∴ 转到 (I 2 , =) = I 6
∴ 动作 [2, =] = s6
因此,有移位 | 减少条目操作 [2, =] 上的冲突。这表明给定的语法不是 SLR (1)。