Parsing LALR(1)解析器中的冲突解决
关于LALR(1)解析器中冲突的一些问题,主要与解析的细节有关:Parsing LALR(1)解析器中的冲突解决,parsing,grammar,lalr,Parsing,Grammar,Lalr,关于LALR(1)解析器中冲突的一些问题,主要与解析的细节有关: 根据教科书中描述的不同的LALR(1)解析器,如果一个人遇到移位/减少冲突,那么这就是语法不是LALR(1)的标志,对吗 Reduce/Reduce冲突可能出现在validLALR(1)语法中,因为从LR(1)到LALR(1)进行了状态合并,对吗 YACC和GNU Bison中使用的优先级和关联性是用来帮助解决移位/减少冲突的工具,对吗 此外,只有当冲突的移位/减少规则优先级等于先行符号优先级时,解析器才应该检查关联性,在任何其他
- 为什么他们声称在冲突规则或先行标记中没有优先权,选择是移位?我会认为,如果缩减规则有任何优先级,它将击败没有任何优先级的前瞻规则
%nonassoc
的情况下,等于错误)附加问题:只有在生产(通过
%prec
或默认情况下,生产中最后一个终端的优先级)和前瞻令牌都定义了优先级时,才应用优先级规则。如果其中任何一个缺少优先级声明,则shift将获胜。这似乎不合逻辑,但事实就是如此。我刚刚看了《龙之书》第二版,示例4.58(第268页),他们在本节结尾给出了一个减少/减少冲突的示例,即合并LR(1)州的后果,但他们没有说明他们的解决方法。但为此,感谢你为我重申这些概念,现在我想我明白了一般的经验法则:除非你找到证据证明需要减少,否则默认值是移位。@ilomambo:没错,我应该检查这本书,而不是依赖我生锈的记忆。我修正了答案。关于解决这个问题,《野牛手册》中有一些讨论:(如上面所说,如果你使用的是野牛,最简单的解决方案可能是切换到GLR或实验性IELR解析器)@ILOMABO解析器优先算法确实在《龙书》第二版中进行了讨论。这在第4.9.2节中进行了讨论。但是,该算法将在第293页之后进行描述。基本上,它验证了rici,但更深入了一点。