在LR解析中难以解决这个例子?

时间:2014-09-21 15:35:10

标签: parsing lr

语法是:

  

S→(L)| ID
  L→S | L,S

我尝试使用LR解析来计算给定语法的CLOSURE和GOTO。

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

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


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

enter image description here

1 个答案:

答案 0 :(得分:1)

您的解决方案不正确。

起始配置为:

S' → . S $

然后递归地扩展该状态,以包括紧跟位置标记之后A → ω出现的所有作品A。最初,跟随点的唯一非终端是S,因此我们添加S的所有作品:

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

现在,状态中包含紧跟.之后的每个非终端的产生,因此状态已完成。