预测解析算法并计算以下语法的 FIRST 和 FOLLOW S → L = R S → R L →* R L → id R → L
解决方案
FIRST 的计算
S → L = R
∵ L 不导出 ε。根据 FIRST 规则 (4b)
∴ FIRST(S)= { FIRST(L)} (1)
S→R
∵ R 不导出 ε。根据 FIRST 规则 (4b)
∴ FIRST(S)= { FIRST(R)} (2)
L →* R
应用 FIRST 规则 (3)
FIRST(L) = {*} (3)
L → id
应用 FIRST 规则 (3)
FIRST(L) = {id} (4)
右 → 左
应用 FIRST 规则 (4b)
FIRST(R)= { FIRST(L)} (5)
结合 (1) 到 (5) 语句
FIRST(L) = {*, id}
FIRST(S)= { FIRST(L)}
FIRST(R)= { FIRST(L)}
FIRST(S)= { FIRST(R)}
∴ FIRST(L)= FIRST(S)= FIRST(R)= {*, id}
FOLLOW的计算
S → L = R
S→R
L →∗ R
L → id
右 → 左
应用 FOLLOW 的规则 (1)
跟随 (S) ={$} (1)
S → L = R
应用 FOLLOW 规则 (2)
S → | ε | L | = R |
A → | α | B | β |
∵ FIRST(β) = FIRST(= R) = {=} 不包含ε。
∴FOLLOW的规则(2a)
∴ FOLLOW(L)= {=} (2)
应用 FOLLOW 规则 (3)
S → | L = | R |
A → | α | 乙 |
∴ FOLLOW(R)= { FOLLOW(S)} (3)
S→R
我们不能在这个产生式上应用规则(2)作为 A →