【发布时间】:2016-01-24 18:47:18
【问题描述】:
对于 LR(0) DFA,我可以清楚地看到为什么这是 Shift/Reduce 冲突:
(部分 DFA)
但我不明白为什么 LR(1) DFA 能解决问题?
对我来说,这仍然是一个减少冲突,因为 B 规则的前瞻符号完全相同? LR(1) 解析器应该如何区分它们,而不是 LR(0) 解析器?
【问题讨论】:
标签: compiler-construction dfa lr
对于 LR(0) DFA,我可以清楚地看到为什么这是 Shift/Reduce 冲突:
(部分 DFA)
但我不明白为什么 LR(1) DFA 能解决问题?
对我来说,这仍然是一个减少冲突,因为 B 规则的前瞻符号完全相同? LR(1) 解析器应该如何区分它们,而不是 LR(0) 解析器?
【问题讨论】:
标签: compiler-construction dfa lr
因为如果前瞻是a,你只能减少B→ε。
在 LR(0) 中你不能考虑前瞻,但在 LR(1) 中你可以根据下一个输入符号来决定,这里的规则很简单:如果下一个符号是 b,移位,如果是a,做B的epsilon归约。
【讨论】: