问题标签 [reduce-reduce-conflict]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4687 浏览

oslo - 转移减少和减少减少冲突

我很难解决这个问题,需要一些帮助来理解减少和减少冲突。我有一个语法,我似乎无法理解它为什么会出现问题。我可以附上语法,但我想了解它是如何工作的。

第一个问题,Mgrammer 创建什么类型的解析器?据我了解, shift reduce 和 reduce reduce 冲突取决于解析器的类型。

第二个问题,什么表示减少减少冲突,什么表示转移减少冲突?

我知道词法分析和形式语法的基础知识,但是自从我从事语言设计工作以来已经有一段时间了,所以这里的任何帮助都非常合适。

更新:

我正在使用一种重要的空白语言,我想知道在 MGrammar 中这样做的可能性,我需要先看一下才能解决歧义吗?

0 投票
4 回答
1218 浏览

yacc - 野牛移位而不是减少。减少/减少错误

用我的语言我可以写

我的语法不支持语句之间的换行符。else 只能与 if 一起使用。当我在我的规则中添加 optionalNL

else 之前的 optionalNL 会导致 3 个减少/减少。原因是它可以使用 IfExpr 中的第二条规则减少或减少到 exprLoop ,它允许表达式之间有许多换行符。

无论我做什么(我尝试在 optionalNL 和 ELSE 之前编写 %prec )它总是减少到 exprLoop ,这种情况下野牛会给我一个语法错误。我如何告诉野牛此时转移(其他可选NL)而不是减少?(到 exprLoop 导致 else 是一个错误)。

用于测试的示例文件

y.output http://www.pastie.org/707448

替代 .y 和输出。您可以看到它向前看,看到 \n 并且不知道减少规则或继续前进。我改变改变规则的顺序以获得不同的结果。但它要么总是期待一个 \n 要么总是期待一个 else,因此一个规则总是最终被忽略。状态 15

感谢 Kinopiko的回答

我将他的代码更改为没有冲突,然后努力使其更灵活。这是我的文件

测试.y

测试.y

编译后自动运行的测试文件

0 投票
1 回答
288 浏览

parsing - 创建 shift-reduce / reduce-reduce 免费语法

我正在尝试在 sablecc 中实现一个类似 Java 的简单语言解析器,尽管在实现,和语句时我经常遇到shift-reduce/问题。reduce-reduceifwhileblock

例如,我考虑了以下内容:

stmts= stmt*;

stmt= if_stmt| block_stmt| while_stmt;

block_stmt= { stmts }| ;;

while_stmt= while ( predicate ) { stmts }|while ( predicate ) ;

例如,这种语法会导致这样的问题,即当你有某种形式的东西时

解析器将无法知道是只减少;(from block_stmt) 还是完全减少while (true);(from while_stmt)。

我一直在到处阅读shift-reduce/reduce-reduce问题的原因,我想我理解它们。但是一件事是要知道是什么导致了它们,而另一件事完全不同的是知道如何构造语法以使我避免它们。我尝试过以非常不同的方式实现语法,但最终还是遇到了问题。

我想,与其只是试图从一个特定的ss/rr问题中运行,还必须有一种范式来遵循这样的范式来避免这类问题?我相信我解决问题的方式一定是完全错误的:(

关于如何从头开始构建语法而不陷入所有这些陷阱的任何资源?关于这个问题的资源往往非常简单(说明明显的if then else问题)或完全标记的语法,这有点难以理解。

0 投票
1 回答
2865 浏览

bison - 野牛减少/减少

我是 Bison 解析的新手,我无法理解它是如何工作的。我有以下语法,我在其中保持最低限度以突出问题。

如您所见,我想'~'根据后面的表达式类型对运算符应用不同的函数。但是,这会产生 2 个减少/减少冲突。

当然,如果我像这样重写composite_expr 规则......

...然后没有冲突,但现在我不能打电话do_something_1()ordo_something_2()因为我不能再判断expris variable_expror composite_expr

还有其他方法可以做到这一点吗?谁能解释为什么首先减少/减少冲突?

请记住,这是一个精简版,实际上,规则composite_expr很长。所以复制它是不可能的。

0 投票
2 回答
272 浏览

bison - 我如何告诉野牛有语法错误?

会发生什么情况,在分析 AST 后,我会在规则完成时知道是否有错误。我试过 yyerror("blah") 没有运气。

因为我不能告诉它有一个错误,它完成了另一个规则,现在有一个减少/减少冲突。这很烦人,因为我知道其中一个无效而不看另一个,但用户必须忍受 bc 我不知道怎么说忽略这个分支 bc 它无效

我该如何解决这个问题?

0 投票
1 回答
231 浏览

c - YACC 语法减少/减少冲突

我有以下语法来检查 XML 文件的有效性,文件以一个元素开始,然后是根节点。

我遇到了 1 个减少/减少冲突,但我不知道如何找到它。任何帮助,将不胜感激。

0 投票
1 回答
1129 浏览

haskell - 快乐:减少/减少冲突

为什么这会引发有关减少/减少冲突的警告

但接下来可以吗?

0 投票
2 回答
575 浏览

bison - 如何解决 Bison 中的这种减少/减少冲突?

这是 [filename].output state 94 的摘录

opt_at_type 定义为:

你能告诉我为什么会这样吗?

0 投票
1 回答
929 浏览

bison - EBNF 到 Bison - 减少/减少错误

我必须将此 EBNF 翻译成野牛:

当我翻译赋值、if、while 语句和 proc_func_ 时,bison 没有错误。然而,当我在野牛中输入这个时,翻译复合语句:

有一个减少/减少错误。

有人可以向我解释一下,为什么会出现减少/减少错误,因为这对我来说没有意义。我真的很感激。

提前致谢。

0 投票
1 回答
383 浏览

grammar - 具有减少-减少冲突的简单歧义语法

以下解析逻辑表达式的简单语法会导致 reduce/reduce 冲突:

来自野牛的状态报告有:

我猜问题是它无法弄清楚如何解析“(a)+ 1 < 2”。如何消除这种语法的歧义?可能吗?