Parsing 解析器问题,寻找参数的结尾,移位/减少发生的冲突

Parsing 解析器问题,寻找参数的结尾,移位/减少发生的冲突,parsing,yacc,shift-reduce-conflict,Parsing,Yacc,Shift Reduce Conflict,我试图通过识别不存在逗号来设置解析器来查找某个参数的结尾,因此我基本上设置了它来查找这样的参数 参数:end_参数逗号 (此数据类型只是一个列表,因此没有任何东西指示它的结束,只是当没有逗号分隔项时它停止) end_参数定义如下,并执行它应该执行的操作。解析器通过识别右大括号作为结尾来处理其他数据类型,但是当我设置以缺少逗号结尾的类型时,会出现shift/reduce错误。有人有什么建议吗 你通过编写与事物本身相匹配的规则来识别事物,而不是与事物本身不匹配的规则。因此,对于以逗号分隔且末尾没有逗

我试图通过识别不存在逗号来设置解析器来查找某个参数的结尾,因此我基本上设置了它来查找这样的参数

参数:end_参数逗号

(此数据类型只是一个列表,因此没有任何东西指示它的结束,只是当没有逗号分隔项时它停止)


end_参数定义如下,并执行它应该执行的操作。解析器通过识别右大括号作为结尾来处理其他数据类型,但是当我设置以缺少逗号结尾的类型时,会出现shift/reduce错误。有人有什么建议吗

你通过编写与事物本身相匹配的规则来识别事物,而不是与事物本身不匹配的规则。因此,对于以逗号分隔且末尾没有逗号的参数列表,您可以使用:

parameter_list : parameter
               | parameter_list ',' parameter
               ;
现在,根据您使用它的上下文以及在同一上下文中使用的其他规则,您可能会遇到冲突。如果是这样,您需要查看y.output文件以查看冲突的来源,以便解决它们


你很少从一条规则中得到冲突——冲突通常来自多条规则的交互。

更多地展示你的语法,规则参数:end_参数逗号可能不是你问题的根源。我想我的主要问题是,你如何寻找缺少的东西?我需要找一个缺少逗号的地方,但是你不能找一个缺少的地方,因为你永远不知道以后会不会有什么。这类似于停顿问题,并且它被证明是不可判定的,请参阅给出更多示例,说明您的输入(可能缺失部分)将是什么样子,以及您如何需要输出,并且您可能在几分钟内得到答案。没有这些,只是猜测而已。