Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing LALR(1)解析器中的冲突解决_Parsing_Grammar_Lalr - Fatal编程技术网

Parsing 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中使用的优先级和关联性是用来帮助解决移位/减少冲突的工具,对吗 此外,只有当冲突的移位/减少规则优先级等于先行符号优先级时,解析器才应该检查关联性,在任何其他

关于LALR(1)解析器中冲突的一些问题,主要与解析的细节有关:

  • 根据教科书中描述的不同的LALR(1)解析器,如果一个人遇到移位/减少冲突,那么这就是语法不是LALR(1)的标志,对吗

  • Reduce/Reduce冲突可能出现在validLALR(1)语法中,因为从LR(1)到LALR(1)进行了状态合并,对吗

  • YACC和GNU Bison中使用的优先级和关联性是用来帮助解决移位/减少冲突的工具,对吗

  • 此外,只有当冲突的移位/减少规则优先级等于先行符号优先级时,解析器才应该检查关联性,在任何其他情况下,关联性都是无关的,对吗

  • 我这样问是因为我不是100%确定,而且书中也没有提供很多关于冲突解决的细节,我在这个主题上找到的仅有几行是

    与上述野牛手册链接相关的问题:

    • 为什么他们声称在冲突规则先行标记中没有优先权,选择是移位?我会认为,如果缩减规则有任何优先级,它将击败没有任何优先级的前瞻规则
  • 如果在LALR(k)构造过程中发现任何冲突(shift/reduce或reduce/reduce),则语法不是LALR(k)

  • 从LR(1)到LALR(1)的状态合并不能产生移位/减少冲突,因此如果存在移位/减少冲突,语法也不是LR(1)。但它可以产生减少/减少冲突。如果是,则语法不是LALR(1),即使它是LR(1)。(这不是一个真正的“有效性”问题;而是一个特定算法的可分析性问题。)

  • 是的,优先级(和关联性,它只是优先级的一个子类)允许解决移位/减少冲突

  • 优先级是生产标记(左侧)和前瞻标记(右侧)之间的比较。关联性影响所使用的比较运算符:或≤ 或<(或在
    %nonassoc
    的情况下,等于错误)

  • 本文对该算法进行了很好的讨论。然而,这并不是很复杂:如果产品“获胜”,解析器就会减少;否则它就会改变


    附加问题:只有在生产(通过
    %prec
    或默认情况下,生产中最后一个终端的优先级)和前瞻令牌都定义了优先级时,才应用优先级规则。如果其中任何一个缺少优先级声明,则shift将获胜。这似乎不合逻辑,但事实就是如此。

    我刚刚看了《龙之书》第二版,示例4.58(第268页),他们在本节结尾给出了一个减少/减少冲突的示例,即合并LR(1)州的后果,但他们没有说明他们的解决方法。但为此,感谢你为我重申这些概念,现在我想我明白了一般的经验法则:除非你找到证据证明需要减少,否则默认值是移位。@ilomambo:没错,我应该检查这本书,而不是依赖我生锈的记忆。我修正了答案。关于解决这个问题,《野牛手册》中有一些讨论:(如上面所说,如果你使用的是野牛,最简单的解决方案可能是切换到GLR或实验性IELR解析器)@ILOMABO解析器优先算法确实在《龙书》第二版中进行了讨论。这在第4.9.2节中进行了讨论。但是,该算法将在第293页之后进行描述。基本上,它验证了rici,但更深入了一点。