我是编辑主题的新手,刚开始进行Bottom -up解析练习。
我坚持以下问题。
为后续语法构建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上的下一个状态是:
I1:
E' -> E.
E -> E. + T
从我到目前为止所学到的不是这个S-R冲突?
因为解析器不会知道是否减少或移位
没有预见变量?
所以这不应该是LR(0)语法?
但我正在阅读的PDF构建了LR(0)表。 那么PDF中是否存在错误,或者我在理解概念时出错?
答案 0 :(得分:2)
您使用E' -> E
扩充了语法。通常情况下,你会使用类似E' -> E $
的生成来扩充,其中$是一个(终端)符号,在语法中不会出现,并表示输入结束。
所以I1实际上是
E' -> E. $
E -> E. + T
并没有冲突。 (我相信语法是 LR(0)。)
答案 1 :(得分:1)
这确实是一种转移/减少冲突。这个语法不是LR(0)。您也可以看到这个,因为它不是前缀;语法包含多个彼此前缀的字符串,因此它不能是LR(0)。
也就是说,您仍然可以构造所有LR(0)配置集并生成LR(0)自动机。由于转移/减少冲突,它不会是确定性的。因此,你可能是正确的,并且讲义是正确的。
希望这有帮助!