决定语法是否为LR(0)
-
21-12-2019 - |
题
我是汇编主题的新手,刚刚开始练习底部解析。
我陷入了以下问题。
为以下语法构建一个LR(0)解析表:
1) E –> E + T
2) E –> T
3) T –> (E)
4) T –> id
I0 :
E' –> .E
E –> .E + T
E –> .T
T –> .(E)
T –> .id
.
在e上,DFA中的下一个状态是:
I1:
E' -> E.
E -> E. + T
.
到目前为止,我所学到的不是这是一个s-r冲突吗? 因为解析器不知道是否将其转变为它 没有展示前瞻性变量? 所以这不应该是lr(0)语法?
但我正在阅读的PDF已经建立了LR(0)表。 所以PDF有一个错误,或者我错了一些理解这个概念的地方?
解决方案
这确实是班次/减少冲突。这个语法不是LR(0)。您也可以看到这一点,因为它不是前缀;语法包含多个字符串,这些字符串是彼此的前缀,因此它不能是LR(0)。
表示,您仍然可以构建所有LR(0)配置集并制作LR(0)自动机。由于移位/减少冲突,它不会是决定性的。因此,它是可能的,你是对的,讲义是对的。
希望这有帮助!
其他提示
您将语法增强为E' -> E
。通常情况下,您可以使用生成的生产等生成,其中$是在语法中否则不会出现的(终端)符号,并表示输入结束。
所以i1实际上是
E' -> E. $
E -> E. + T
.
并且没有冲突。(并且我认为语法是 LR(0)。)
不隶属于 StackOverflow