问题标签 [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.
bison - 在 Bison 语法中悬挂 Else
以下语法存在悬空 else 问题,即使我在阅读http://marvin.cs.uidaho.edu/~heckendo/CS445/danglingElse.html后尝试解决它我想知道你是否能发现什么我做错了...
我已将 if 语句代码放在脚本的底部。
感谢您的时间。
bison - A ::= AA 规则中的 Bison shift/reduce 冲突
我写了以下野牛语法文件:
现在bison
报告关于expr : expr expr
. 我已将问题提取到以下最小集合:
我不明白为什么bison
仍然抱怨转移/减少冲突。我找到了一些旧邮件存档:Re: bison/yacc: shift/reduce conflict using %prec for composition,但我也不明白作者的解释。
有人可以澄清为什么这个语法是模棱两可的,以及如何解决冲突?
编辑:NUMBER NUMBER
我的意思是NUMBER * NUMBER
,即这两个数字的乘积。
grammar - 为什么这个简单的语法会有移位/减少冲突?
这有效:
这有 2 个转变/减少冲突:
为什么?
bison - 简单(?)语法中的移位减少冲突
我正在尝试用野牛描述语法,但我不确定是否可以做到。我的预期语法是这样的:
" items
" 是一个(可能为空的)元素序列item
,由SEP
标记分隔。
每个项目最多包含 4 个标记 ( A B C D
),按此顺序,以 . 分隔SEP
。项目中的A
、C
和D
标记是可选的。
请注意在每个项目内以及项目本身之间重复使用相同的分隔符标记 SEP。
我希望预期的语法很清楚。我认为它是明确的,但我很不确定它是否被限制到可以被野牛解析——不幸的是,我的解析器知识相当生疏。
使用给定的语法,bison 报告 4 个移位/减少冲突。查看“输出”,我了解它们出现的位置以及原因;但我不知道如何(以及是否)可以编写预期的语法来摆脱 S/R 冲突。
我不愿意使用%expect
声明。同样,我不愿意让我的扫描仪使用分隔符标记,而不是将它们传递给解析器。
任何有关如何清理此语法的提示将不胜感激。
yacc - byacc 移位/减少
我很难弄清楚这个问题以及轮班减少问题。
添加';' 到最后并没有解决问题,因为我不能改变语言,它需要像下面的例子一样。任何 prec 操作数都有效吗?
示例如下:
变量可以声明为:作为指针或 int 作为整数,因此,这两者都是有效的:
代码如下:
它显然在 expr 之后给出了移位/减少问题。因为它可以转换为“less”运算符的 expr 或减少另一个变量声明。
我希望优先考虑变量声明,并尝试创建一个 %nonassoc prec_aux 并放在 '<' type '>' %prec prec_aux 和 type tNAME 之后,但这并不能解决我的问题:S
我该如何解决这个问题?
输出是:
好吧,我不知道如何在回复时发布换行符和代码......所以这里是输出:
这就是输出,错误似乎是我提到的那个。
有没有人知道一个不同的解决方案,除了添加一个新的终端到语言中,这不是一个真正的选择?
我认为解决方案是重写语法,以便它可以以某种方式向前看,看看它是在“<”之后的类型还是 expr,但我不知道如何去做。
优先级不太可能起作用,因为它具有相同的特征。有没有办法让我们定义的类型优先?比如声明?
提前致谢
haskell - 转移/减少快乐中的冲突
如何制定正确的规则来解析 if-then[-else] 案例?这是一些语法:
此语法正确解析以下表达式:
但是编译会引发有关移位/减少冲突的警告。快乐的文档包含此类冲突的示例: http ://www.haskell.org/happy/doc/html/sec-conflict-tips.html
显示了两种解决方案,第一种是更改递归类型(在这种情况下不清楚如何做)。第二个是不改变任何东西。这个选项对我来说没问题,但我需要咨询。
grammar - 在 Bison 中使用优先级作为一元减号并不能解决移位/减少冲突
我正在设计一个非常简单的语法,我使用一元减操作数。但是,我遇到了转变/减少冲突。在 Bison 手册以及我查看的其他任何地方,它都说我应该定义一个新标记并赋予它比二进制减操作数更高的优先级,然后在规则中使用“%prec TOKEN”。
我已经这样做了,但我仍然收到警告。为什么?
我正在使用野牛(GNU Bison)2.4.1。语法如下所示:
conflict - yacc shift/reduce conflict
I faced conflict problem during yacc compilation.
Error message below:
Code below:
At this point, 'shift/reduce' conflict will occur.
I don't know what is the problem. How to solve this conflict?
Thanks.
conflict - yacc 移位/减少冲突。它真的很复杂
我尝试了很多次来解决这个冲突。
但我不知道为什么会在这里发生冲突。
2 冲突发生在编译时。
yacc(bison) 错误:
yacc 来源:
我上面有两个问题。它出什么问题了?
parsing - 移位/减少与表达式调用的冲突
当我尝试使用 Lemon 编译这个简单的解析器时,我遇到了冲突,但我看不出哪个规则是错误的。如果我删除二进制表达式或调用表达式,冲突就会消失。
[编辑]向 LParenthesis 添加左侧关联性解决了冲突。但是,我很想知道这样做是否正确:我已经看到一些语法(fe C++)对于构造运算符'()'和调用运算符'()'具有不同的优先级。所以我不确定做正确的事。