【问题标题】:Not sure if this LR(1) grammar has shift/reduce conflict不确定这个 LR(1) 语法是否有移位/减少冲突
【发布时间】:2015-03-10 23:13:13
【问题描述】:

我正在尝试解决关于 LR(1) 语法的问题:

S->AA 
A->Aa
A-> b

当我陷入状态 4 时:

S-> AA. ,$
A-> A.a ,$
A->.Aa ,$
A->.a ,$

aA 转移到其他状态,A 减少到相同的状态,我应该认为这个语法不是 LR(1) 和 SLR(1) 因为这个冲突吗?

【问题讨论】:

  • 没有。减少只有在$ 作为前瞻时才有可能,并且没有移位/移位冲突这样的事情,因为移位只是移位。
  • @rici 不意味着这个 gammar 是 LR(1)? ,并且可以在一个状态下进行 shift 和 reduce 吗?
  • 您可以在一种状态下使用 shift 和 reduce 或多个 reduce,只要您可以使用前瞻来决定要采取的操作。整个语法我没仔细看,不过这个状态是没有问题的。
  • 谁能提供更多解释?
  • 你是怎么进入这个状态的?我为这个语法构建了 LR1 自动机,它没有这样的状态。 @EJP

标签: parsing compiler-construction programming-languages grammar lr


【解决方案1】:

你需要检查 shift-reduce(SR) 或 reduce-reduce(RR) 问题

在你提到的状态 4 中,只有一个 reduce 条目 S-> AA., $,因此存在 没有 RR 问题。检查 SR:

S-> AA.,$ 的减少条目对于 LR(1) 将位于 $,对于 SLR(1) 将位于跟随 (S),即 $

仅检查终端而非变量的移位条目。变量条目在表格的GOTO 部分进行,而移位条目在表格的ACTION 部分进行。在 SLR(1) 和 LR(1) 的情况下,Shift 仅在终端 a

因此,在您提供的状态下,没有问题(SR 和 RR 都没有)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多