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