语法是:
S → ( L ) | id
L → S | ,小号
我正在尝试使用 LR 解析在给定语法上计算 CLOSURE 和 GOTO。
我们的老师解决了这个问题,但是第一步他没有使用第二个产生式L-->S|L,S
,我不知道为什么。所以我解决了同样的例子,但在第一步中使用了完整的语法。
这样一来,原来的只是9
步骤,而我的是10
步骤。
我的问题是,我的解决方案是否正确?我想我做了LR(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
现在,紧跟在 之后的每个非终结符的产生式.
都包含在状态中,因此状态是完整的。