我正在读一篇解释( D.Grune和C.J.H.Jacobs的“解析技巧”),第二版的第293页),我从我的最后一个问题:在为解析器构造LR(1) NFA时,如何获得前瞻性符号?。
现在我遇到了这样的“问题”(也许不是问题,而是需要一些更有见识的人的确认)。
作者在LR(0)中给出了具有减少/移位冲突的状态。然后,他们为LR(1)为相同的语法构建DFA。现在他们说它没有冲突(最后看上去是这样的):
S -> E . eof
E -> E . - T eof
E -> E . - T -这个状态有一个边,标记为-,但没有标记eof。作者说,在eof上会有减少,在-上会有变化。
然而,eof也适用于shift (以及展望)。所以我个人对LR(1) DFA的理解是--你可以选择轮班,因为它们现在没有任何用途--轮班依赖于输入,而不是看头--在那之后,删除重复。
S -> E . eof
E -> E . - T 因此,read的展望实际上是作为输入,因为在这个阶段(所有所需的输入都已读取),它现在实际上是传入的符号。对于移位,输入符号在边缘。
所以我的问题是-我真的是对的吗?
发布于 2012-12-04 18:57:16
在DFA中,看最后的形式并不重要--下一个表示移位的符号在边缘。
https://softwareengineering.stackexchange.com/questions/177760
复制相似问题