问题标签 [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 回答
147 浏览

parsing - LR(1) 解析器:为什么添加 epsilon 产生式会导致 r/r 或 s/r 冲突

我想制作一个阅读器,它可以读取类似于 mswin 的 INI 文件的配置文件。使用我制作的词法分析器/解析器生成器自学是为了锻炼。语法是:

问题在于@epsilon@生产。我添加它是因为我希望我的读者也接受空文件。但是当 'OptionsList' 或 'OptionGroup' 包含 epsilon 产生时,我会遇到冲突。我尝试重新排列作品中的元素,但我只会遇到冲突(r/r 或 s/r,取决于我所做的),除非我从语法中完全删除 epsilon。它消除了这个问题,但是......在我的逻辑中,“OptionsList”或“OptionGroup”之一应该包含一个 epsilon,否则我接受空文件的目标就不会实现。

我的解析器生成器使用 LR(1) 方法,所以我认为我可以在我的语法中使用 epsilon 产生式。看来我擅长编写生成器,但不擅长构建无错误的语法:(。

我应该忘记epsilons吗?或者即使没有 epsilon 产生,我的语法是否也接受空输入?

0 投票
0 回答
72 浏览

parsing - 减少/减少冲突

我正在尝试为一种简单的语言创建解析器,但由于规则 expr: l_value 和 r_value: '@' l_value,我无法摆脱一些减少/减少冲突。我试图修复它来确定符号“@”的优先级,但它没有帮助。一个最小的、可重现的例子是:

`

在 parser.output 我得到这个:

0 投票
1 回答
63 浏览

bison - 如何解决减少减少野牛的冲突?

首先,我在这里已经提到了许多类似的问题,但无法解决冲突。

我的 .y 文件中有这件作品

这个语法产生了很多减少\减少冲突。例如:

我有很多与此完全相同的冲突。但我无法理解这一点。
据我所知,它是说,当生产是unary_expr或当它是power_expr '^' unary_expr然后它看起来是 a'+'时,它面临着减少\减少冲突。但是为什么会有reduce\reduce 冲突呢?当它有power_expr '^'部分时,它可以使用规则 19(并且应该使用,因为否则产生式将是power_expr '^' power_expr语法中没有定义的。)当没有power_expr '^'部分时,它必须使用规则 18。这里的歧义在哪里出现,以及如何解决它。

0 投票
1 回答
35 浏览

compiler-construction - 移位归约和归约归约与 LR 冲突

这是语法:

我找不到与 LR 的 shift-reduce 和 reduce-reduce 冲突,有人可以帮我吗?

0 投票
2 回答
116 浏览

parsing - 语法中的reduce-reduce、shift-reduce冲突

LR解析器在分析过程中,该语法中的reduce-reduce和shift-reduce冲突有哪些?

0 投票
1 回答
94 浏览

grammar - yacc中的并列乘法

我正在尝试实现一种允许并列乘法的语法。这是用于解析 CAS 的多项式输入。

据我所知,它工作得很好,除了少数边缘情况。我发现了两个问题:

  1. 与其他规则冲突,例如,a^2 b被(错误地)解析为(^ a (* 2 b)),而不是(* (^ a 2) b)
  2. yacc(bison) 报告28 shift/reduce conflicts8 reduce/reduce conflicts.

我很确定正确解决第一个问题也会解决第二个问题,但到目前为止我还没有成功。

以下是我正在使用的语法的要点:

删除并列规则 ( expr expr %prec '*') 解决了 shift/reduce 和 reduce/reduce 警告。

请注意,ab在我的语法中应该是(* a b). 多字符变量前面应该有一个引号(');这已经在lex文件中处理得很好。词法分析器完全忽略了空格( )和制表符(\t)。

我知道这个问题,但这里使用并列似乎并不表示乘法。

任何意见或帮助将不胜感激!


PS 如果有帮助,这是整个项目的链接。

0 投票
1 回答
46 浏览

grammar - Bison 减少/减少 lambda 表达式和带括号的标识符之间的冲突

我目前正在尝试编写自己的编程语言,并且我有以下简化的语法:

但是,当我尝试生成 C++ 解析器时,我遇到了一个 reduce/reduce 冲突。

这是生成的parser.output文件的相关部分:

这是反例的屏幕截图,它表明问题在于 lambda 表达式和带括号的标识符之间的歧义。

野牛反例

用我的语言,我希望能够支持以下语法。我想我理解这个问题,但我很难解决减少/减少冲突。

有人可以告诉我我需要做什么才能使其正常工作,或者向我指出一些可以帮助我解决问题的资源吗?

0 投票
0 回答
18 浏览

parsing - 找不到移位/减少和减少/减少错误

我一直在做一个项目并遇到过:

在此处输入图像描述

下面是 if 声明的列表,除了 typeSpec 中的类型之外,我这里都有,但我们现在不必担心这些。我相当确定我理解什么是 shift/reduce 和 reduce/reduce 错误,但是(对我来说很幸运)编译器没有告诉我冲突在哪里。有人可以为我指出冲突所在的正确方向,或者给我一些关于如何找到冲突所在的提示,我将不胜感激。另外,如果我在帖子中遗漏了一些东西,那么任何事情都会非常感激!