首页 > 解决方案 > “轻松”转变/减少冲突

问题描述

我正在写一个解析器。我的语法包括文件的 CLOSE 动词,并将任意数量的由空格分隔的文件名作为参数。或者,它会,如果野牛没有抱怨,它会抱怨。

close:          CLOSE filenames
                ;
filenames:      NAME
        |       filenames NAME
                ;

报告输出表明问题出在状态 124 中:

State 124

  232 close: CLOSE filenames .
  234 filenames: filenames . NAME

    NAME  shift, and go to state 198

    NAME      [reduce using rule 232 (close)]
    $default  reduce using rule 232 (close)

这里,“close”(小写)描述了 CLOSE 的语法,CLOSE 是语言中的几个动词之一。

在我看来,这就像一个递归定义的教科书示例。对我来说,文件名似乎“很明显”应该导致尽可能多的NAMES似乎被移动,然后根据“关闭”规则减少。

我错过了什么?

标签: bisonshift-reduce-conflict

解决方案


推荐阅读