如何填写解析表中的条目?

解析器是编译的第二阶段。解析器将前一阶段(即词法分析器阶段)生成的标记作为其输入,并以可以识别它们的语法的方式对它们进行分组。

例如,

考虑我0

0 - E′ → ∙ E

      E → ∙ E + T

     E → ∙ T

     T → ∙ T * F

     T → ∙ F

     F → ∙ (E)

     F → ∙ id

填写移动条目

将 SLR Parsing Table 构造算法的规则 (2a) 应用于 I 0的产生式集合。规则 (2a) 仅在点后有终结符时适用。考虑 F → ∙ (E)

比较 A → α ∙ a β 与 F → ∙ (E)

F →ε(E )
一→α.一种B

∴ A = F, α = ε, a = (, β = E)

应用规则,goto (I i , a) = I j

∵ 转到 (I 0 , ( ) = I 4

∴ 动作 [0, ( ] = Shift 4

∴ 在第 0 行和第 0 列前面写上 s4 (

同样,比较 F → ∙ id

应用规则 (2a)

比较 A → α ∙ a β 与 F → ∙ id

F →εIDE
一→α.一种B

∴ A = F, α = ε, a = id, β = ε

∴ goto (I 0 , id) = I 5

∴ 动作 [0, id] = shift 5

在第0行和列id前面写s5

类似地,通过以类似方式处理从 I 0到 I 11的所有状态,将用移位动作填充完整的表。

Reduce Entries (r)的填充 - 为了填充 reduce (r) 条目,我们必须应用 SLR Parsing Table 构造的规则 (2b)。

从 I 0到 I 11我们必须看到形式 A → α ∙ 的产生式

考虑

2 - E → T ∙

T → T ∙ * F

在这里,我们有形式 A → α ∙ 的产生式 E → T ∙,其中点出现在最后一个位置。因此,比较 A → α ∙ 与 E → T ∙

E →
一→α.

应用规则,我们必须找到 FOLLOW (E)

跟随 (E) = { +, ), $}

问题中 E → T 的产生数是 (2)

在状态 2 的行和 +,),$列的前面写上 r2。

动作 [2, +] = r2,动作 [2, )] = r2,动作 [2, $] = r2。

这里,r2 是指使用生产号 2 减少

同样,考虑另一个状态 I 3

I 3 − T → F ∙

应用规则 (2b)

比较 T → F ∙ 与 A → α ∙

F
一→α.

∴ A = T, α = F

跟随 (T) = { +,*, ), $}

因为 T → F 是问题中的生产编号 (4)

在状态 3 的行和 +,*, ), $列的前面写上 r4。

动作 [3, +] = r4 动作 [3, $] = r4

动作 [3, )] = r4 动作 [3, )] = r4

同样,通过 reduce (r) 条目填充 Action 表。

goto Entries 的填充- 可以使用解析表构造的规则 (3) 为非终结符填充 goto 表。

因为,I 1 = goto(I 0 , E)

应用规则 (3)

转到[0, E] = 1

在第 0 行和 E 列前面写 1。

类似地,goto (I 0 , T) = I 2

应用规则 (3)

转到 [0, T] = 2

在第 0 行和第 T 列前面写 2。

同样,我们可以在 goto Table 中填写其他条目

填写“接受”条目

应用规则 (2C),有一个产生式。

E′ → E ∙ 在 I 1中。

因此,在第 1 行和第 $列前面写上“接受”。

∴ 动作 [1, $] = "接受。"

通过填充所有 shift、reduce、accept、goto 条目,我们得到以下 SLR 解析表。

表中 s 表示移位,r 表示减少。

以上是 如何填写解析表中的条目? 的全部内容, 来源链接: utcz.com/z/363382.html

回到顶部