问题标签 [shift-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 投票
2 回答
330 浏览

bison - 如何解决这个 S/R 冲突

这是我的工作 EBNF 语法的简化:

\n 和 EOF 都将 NEWLINE 作为令牌吐出(因此在 EOF 之前不需要单个结尾的 NEWLINE)。它适用于这样的流:

现在我想有几个lineblock至少一个是强制性的,其余的用NEWLINE. 例如:

我试过这样做:

但是 Jison 在前瞻时抱怨 S/R 冲突NEWLINE。我猜状态机在决定它NEWLINE是新块的一部分line还是最终NEWLINE*输入时感到困惑file(这是必需的,因为文件可以以 NEWLINE/EOF 结尾)。

我怎样才能解决这个问题?

0 投票
1 回答
38 浏览

grammar - ifequal 构造语法实现

我必须创建识别这一点的语法:

如果两个表达式相等,则执行 statement1,如果第一个较小,则执行第二个,如果较大,则执行第三个。我试图做出与解决方案类似的东西,但没有运气。我不能使用优先级,因此必须正确更改语法。我正在使用杯子工具生成解析器。

编辑:更小和更大的部分是可选的。

0 投票
2 回答
470 浏览

compiler-construction - 消除减少/减少冲突

我为具有以下语法的语言创建了一个编译器,由 ML-Yacc 定义(起始符号是底部定义的“程序”):

这个语法很好,但是现在我想引入参数多态性,因此在语法中添加了以下产生式:

现在我遇到了以下 2 个减少/减少冲突,我不知道如何解决

谁能告诉我如何消除这两个冲突?

编辑:这是来自 mlyacc http://pastebin.com/2w26ytuV的完整 .desc 输出。并不是说这个也显示了 2 个良性移位/减少错误

0 投票
3 回答
994 浏览

yacc - yacc shift/reduce 冲突:函数调用与函数定义

我有以下 lex 定义:

以及以下 yacc 生产规则:

如果我注释掉最后一条规则,一切都会编译得很好。对于最后一条规则,我遇到了冲突:

所以我猜,yacc 无法决定是将下一个符号移到堆栈上还是使用给定规则减少堆栈。

  1. 我的语法有歧义吗?

  2. 规则“trailed: trailed arglist”和“statement: NAME arglist COLON expression SEMICOLON”之间的决定不应该没有冲突,因为前者从来没有冒号,而后者总是有?

  3. 这与前瞻缓冲区的大小有关吗?

  4. 如何修复此语法以解析“a (b) ();” 和“a (b, c): b + c;” 作为有效的陈述?

  5. 如何以更详细的方式回溯冲突?

- - 编辑

关于迈克尔莫泽的回答:

改变

正如建议的那样没有帮助。与 active的第二条规则仍然存在冲突statement,并且一旦注释掉该规则,就不会给出任何冲突。

0 投票
1 回答
260 浏览

parsing - Persistent Shift - 减少 Goldparser 中的冲突

我真的陷入了 Goldparser 中的 Shift-Reduce 冲突。

我写了一个类似 PHP 的语法,理论上应该可以解析以下脚本:

在顶部,我想分配全局变量,然后是函数定义。

为了缩小问题范围,我将我的大语法减少到可以重现错误的以下几行。显然这是不完整的。这些函数没有参数,没有返回值,也没有语句......

在构建 LALR 表时,Goldparser 告诉我:

“Shift-Reduce 冲突已修复为‘私人’、‘受保护’、‘公共’可以遵循已完成的规则​​,也可以进行转移。通过选择‘转移’操作而不是‘减少’来解决冲突。小心,一些部分语法可能无法访问。建议您尝试删除所有冲突。”

但它应用的修复使语法无法正常工作。在上面的示例中,尽管我将它们声明为可选的function Main(),但在需要 ' private'、' protected' 或 ' ' 的地方出现语法错误。public

当我<ModifierOpt><FuncDef>定义或定义中删除时,错误消失了<GlbAssignVar>

我不知道如何解决这个问题。请帮忙!

0 投票
1 回答
432 浏览

sas - 用野牛中的空规则移位减少错误

我有以下yacc语法:

对于空规则,它给了我移位/减少错误。错误的 Y.output 文件如下所示:

有人可以建议,如何解决这个问题?

0 投票
1 回答
331 浏览

recursion - 由于递归规则而移位/减少

我正在尝试使用 flex & bison 编写给定语言的迷你编译器。它工作得很好,直到我发现我忘记了一个包含递归的规则,规则是:

当我添加它时,我遇到了我不理解的 shift/reduce 冲突。我的语法没有歧义

这是我的语法的简化版本:

它基本上说我可以在 DATA 块中定义字符和常量

这是我的 .output

它说我的班次/减少冲突处于状态 11 和 13,但我无法弄清楚究竟是为什么。它应该识别这样的东西:

0 投票
1 回答
4215 浏览

parsing - 用杯子移位/减少错误

嗨,我正在为我的大学使用的编程语言编写解析器,使用 jflex 和 Cup 我从最初的基本结构开始,例如处理变量声明。

我收到以下错误

我的杯中代码如下所示:

我想我得到了错误,因为进程声明和变量声明都以标识符开头,然后是“:”,然后是终端进程或像整数这样的终端。如果是这样,我想知道如何告诉我的解析器向前看一点。或任何可能的解决方案。

感谢您的回答。

0 投票
1 回答
4880 浏览

parsing - 修复野牛语法中的移位/减少冲突

我为解析文本文件而编写的野牛语法给了我 10 个移位/减少冲突。parser.output 文件对我的帮助不够。该文件给我的信息如下:

我的语法的等效部分是:

请帮我解决这个问题..

谢谢

0 投票
1 回答
73 浏览

grammar - Bison 语法偶尔通过,偶尔失败

我第一次广泛使用 Bison 语法。我有我的语法设置,和一个小测试套件来关联结果。

有时,测试套件会通过:

有时,它不会:

ENDMATH是要转移到的正确标记,但有时MN是确定的。每当我运行测试时,我都会得到不一致的结果。这种“随机”的歧义正常吗?可能是什么原因造成的?我应该定义一些%precedence规则吗?

y.output的顶部,我确实看到了一些状态冲突,例如

消除所有这些冲突是否可取?请注意,状态 120 被列为有冲突,并且是发生此随机错误之前的状态。