关于LALR(1)解析器冲突的一些问题,主要涉及到解析的细节:
根据教科书中描述的不同 LALR(1) 解析器,如果遇到移位/归约冲突,那么这表明语法一开始就不是 LALR(1),对吧?
Reduce/Reduce 冲突可能出现在有效的LALR(1) 语法中,因为从 LR(1) 到 LALR(1) 的状态合并,对吧?
YACC 和 GNU Bison 中使用的优先级和关联性是用来帮助解决移位/减少冲突的工具,对吧?
此外,只有当冲突的移位/归约规则优先级等于先行符号优先级时,解析器才应该检查关联性,在任何其他情况下关联性都无关紧要,对吧?
我之所以问,是因为我不是 100% 确定,而且这些书籍没有提供关于解决冲突的太多细节,我在这个主题上找到的仅有的几行是在 GNU Bison 手册中
与上述 Bison 手册链接相关的问题:
- 为什么他们声称在冲突规则或前瞻令牌中没有优先级,选择是 SHIFT?我认为,如果减少规则有任何优先级,它会完全没有优先级地击败前瞻。