0

语法是:

S → ( L ) | id
L → S | ,小号

我正在尝试使用 LR 解析在给定语法上计算 CLOSURE 和 GOTO。

我们的老师解决了这个问题,但是第一步他没有使用第二个产生式L-->S|L,S,我不知道为什么。所以我解决了同样的例子,但在第一步中使用了完整的语法。
这样一来,原来的只是9步骤,而我的是10步骤。

我的问题是,我的解决方案是否正确?我想我做了LR(1)。


1)讲座中的解决方案-------- 2)我的解决方案。

在此处输入图像描述

4

1 回答 1

1

您的解决方案不正确。

初始配置是:

S' → . S $

然后,该状态被递归扩展以包括紧跟在位置标记之后出现的所有产生A → ω式。最初,点后面唯一的非终结符是,所以我们添加了 的所有产生式:ASS

S' → . S $
S  → . ( L )
S  → . id

点后面不再有非终结符,所以状态是完整的。

现在,对于 之后的每个符号.,我们通过将点移到符号上来构造一个跟随状态。这里唯一有趣的是第二个,它将说明关闭规则。我们从:

S → ( . L )

现在我们有一个L紧跟在点之后的产生式,所以我们扩展L到状态:

S → ( . L )
L → . S
L → . L , S

我们还没有完成,因为现在在点之后还有另一个非终结符S. 因此,我们还必须添加这些产品:

S → ( . L )
L → . S
L → . L , S
S → . ( L )
S → . id

现在,紧跟在 之后的每个非终结符的产生式.都包含在状态中,因此状态是完整的。

于 2014-09-21T20:57:51.877 回答