【问题标题】:Why does a LR(1) DFA doesn't have a Shift/Reduce conflict?为什么 LR(1) DFA 没有 Shift/Reduce 冲突?
【发布时间】:2016-01-24 18:47:18
【问题描述】:

鉴于此语法:

对于 LR(0) DFA,我可以清楚地看到为什么这是 Shift/Reduce 冲突:

(部分 DFA)

但我不明白为什么 LR(1) DFA 能解决问题?

(部分 DFA)

对我来说,这仍然是一个减少冲突,因为 B 规则的前瞻符号完全相同? LR(1) 解析器应该如何区分它们,而不是 LR(0) 解析器?

【问题讨论】:

    标签: compiler-construction dfa lr


    【解决方案1】:

    因为如果前瞻是a,你只能减少B→ε。

    在 LR(0) 中你不能考虑前瞻,但在 LR(1) 中你可以根据下一个输入符号来决定,这里的规则很简单:如果下一个符号是 b,移位,如果是a,做B的epsilon归约。

    【讨论】:

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