Parsing 减少/减少冲突

Parsing 减少/减少冲突,parsing,yacc,Parsing,Yacc,我的语法如下: x:(z)o x:n z:x z:ZX o:+|-|/|* n:[0..9] 解析器堆栈当前是:“(z(zx)”下一个标记是)+)* 解析器将减少规则3或规则4中的哪一条?为什么 谢谢答案是:规则4 直觉上,这是因为规则3和规则4是一个左关联对,以贪婪的方式将X转换为Z 另一个原因是,如果我们减少规则3,我们将在解析堆栈上得到Z,这不是一种可能的句子形式。语法不会生成带有Z的偏导。哪些是终端符号?冲突涉及哪些规则?YACC显示的信息是什么?这看起来很像家庭作业。请改进你的问题。是

我的语法如下:

  • x:(z)o
  • x:n
  • z:x
  • z:ZX
  • o:+|-|/|*
  • n:[0..9]
  • 解析器堆栈当前是:“(z(zx)”下一个标记是)+)*

    解析器将减少规则3或规则4中的哪一条?为什么

    谢谢

    答案是:规则4

    直觉上,这是因为规则3和规则4是一个左关联对,以贪婪的方式将X转换为Z


    另一个原因是,如果我们减少规则3,我们将在解析堆栈上得到Z,这不是一种可能的句子形式。语法不会生成带有Z的偏导。哪些是终端符号?冲突涉及哪些规则?YACC显示的信息是什么?这看起来很像家庭作业。请改进你的问题。是的,这是一个家庭作业。端子符号为0..9和+-/*。我不知道解析器是将x减少到z还是将zx减少到z。可能是第一个,因为规则z:x是第一个,但我不确定。来自
    yacc-v
    的输出将告诉您语法的作用(或者
    bison-v
    )。这里没有reduce/reduce冲突——您认为为什么会有?那么,您说规则3将被缩减,而规则4没有冲突?