B → q
解答
步骤1 - 构造扩充文法
(0) S′ → S
(1) S → xAy
(2) S → xBy
(3) S → xAz
(4) A → qs
(5) A → q
(6) B → q
步骤2 - 查找闭包和goto函数以构造LR(0)项目。此处方框代表新状态,圆圈代表重复状态。
- 步骤3 - FOLLOW集的计算
S → xAy
FOLLOW(S) = {$} (1)
应用FOLLOW的规则(2a)。
将S → xAy与A → αBβ进行比较。
∴ FIRST(β) = FIRST(y) = {y}
∴ FOLLOW(A) = {y} (2)
规则(3)不可应用
- 因为S → xAy不能与A → αB比较
S → xBy
应用FOLLOW的规则(2a)。
将S → xBy与A → αBβ进行比较。
∴ FIRST(β) = {y}
∴ FOLLOW(B) = {y} (3)
- 步骤3 - FOLLOW集的计算
FOLLOW(S) = {$} (1)
规则(3)不可应用。
S → xAz
∴ FOLLOW(B) = {y} (3)
- ∴ FIRST(β) = {z}
∴ FOLLOW(A) = {z} (4)
A → qS
规则(2a)不可应用。因为A → qS不能与A → αBβ比较。
应用规则(3)
将A → qS与A → αB进行比较
∴ A = A, α = q, B = S
∴ FOLLOW(S) = {FOLLOW(A)} (5)
FOLLOW的规则(2a)和规则(3)不能应用于产生式A → q和B → q。
结合语句(1)到(5)
FOLLOW(A) = {y, z}
FOLLOW(S) = {$, y, z}