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}

步骤4 - 构造SLR(1)分析表

Ginni

启动你的职业生涯

完成课程获得认证

开始学习
广告