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

antlr - 控制令牌减少

有没有办法在运行时用 ANTLR 控制令牌的减少操作。例如,我有一个 ANTLR 语法,它看起来像:

与“a”和“b”相关的确切可能值在运行时已知,即我想在运行时决定是否将 WORD 减少为“a”或“b”。

0 投票
2 回答
157 浏览

bison - 减少-减少语法冲突

我在野牛中遇到以下语法的减少/减少冲突,因为 n 也是一个 epsilon 产生。

如何修改它以消除此冲突?

0 投票
1 回答
621 浏览

grammar - 在我的语法中引入指针时减少/减少冲突

我正在开发一个小型编译器,以便更好地了解创建自己的语言的困难。现在我正处于向我的语法添加指针功能的阶段,但是这样做我遇到了减少/减少冲突。

这是我的语法的简化版本,可由bnfc. 我使用happy解析器生成器,这就是程序告诉我存在减少/减少冲突。

我正处于语法如何工作的学习阶段。但我想我知道会发生什么。考虑这两个程序

typedefmain(){}部分不相关,在我的语法中。但它们给出了一些上下文)

在第一个程序中,我希望它解析a "*" bStmt ==(SExpr)==> Expr ==(EMult)==> Expr * Expr ==(..)==> Ident "*" Ident,即基本上开始使用SExpr规则进行单步执行。

同时我想my_type * my_type_pointer_variable扩展使用规则。Stmt ==(SDecl)==> Type Ident ==(TPointer)==> Type "*" Ident ==(TAlias)==> Ident "*" Ident.

但是语法阶段不知道标识符最初是类型别名还是变量。


(1)我怎样才能摆脱减少/减少冲突,(2)我是唯一一个有这个问题的人吗?有没有明显的解决方案,c 语法如何解决这个问题?

到目前为止,我已经成功地通过使用“&”或其他符号而不是“*”来更改我的语言的语法,但这是非常不可取的。此外,我无法从各种公共 c 语法中理解,并试图了解为什么他们没有这个问题,但我在这方面没有运气。

最后,我如何自己解决这些问题?我从happy更详细的输出中了解到冲突是如何发生的,聪明是解决这些冲突的唯一方法吗?恐怕我会偶然发现更多问题,例如在介绍时EIndir. Expr = '*' Expr;

0 投票
0 回答
141 浏览

debugging - ocamlyacc 中的冲突

我正在尝试为一种使用 ocamlyacc 识别整数和浮点表达式的简单语言编写解析器。但是,我想介绍具有变量的可能性。所以我在我的lexer.mll文件中定义了令牌VAR ,它允许它是任何以大写字母开头的字母数字字符串。

现在我对实数有了类似的定义。但是,当我运行此文件时,我会遇到 2 个减少/减少冲突,因为如果我只是输入一个随机字符串(标识为令牌 VAR)。解析器不知道它是实数还是整数类型的变量,因为在我的语法中定义 int 和 real 表达式时存在关键字 VAR。

如何在不失去变量声明的一般性和维护我可用的 2 种数据类型的情况下消除这种减少/减少冲突。

0 投票
2 回答
470 浏览

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

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

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

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

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

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

0 投票
1 回答
509 浏览

parsing - Bison/Yacc 减少特定语法示例的冲突

我的编译器类有一个解析器项目。我无法解决其中一条规则的减少/减少冲突。

此语法规则的图形表示可在此链接中找到(抱歉,由于 stackoverflow 策略,我无法在此处发布图像):

“类型”语法规则的图形表示

所有椭圆都是终端符号。

由于这条规则看起来有点复杂,我试着把它分解成更小的部分。这是我构建语法的尝试:

请注意,终端是以后缀 num 结尾的单词,例如 DOTnum。其余是非终结符。

Bison 报告以下冲突

请注意,上面的野牛错误是指第二个替代产生的括号_or_end 规则。

请通过建议另一种编写语法的方法来帮助解决此冲突。顺便说一句,我查看了 Bison 的详细输出,但没有太大帮助。

谢谢-sas

0 投票
1 回答
239 浏览

context-free-grammar - 语法冲突 - Reduce 减少冲突 Gold sparser

我在下面的代码中遇到了减少-减少冲突,我尝试了几乎所有我想出的解决它的想法,这是问题的报告,这是一个 BNF->Gold 解析器转换任何解决它的想法我会很感激

这是报告:

0 投票
3 回答
286 浏览

bison - 减少/减少 C 风格转换运算符中的冲突

我正在为某种查询语言编写一个 bison+flex 解析器,我需要向它添加一个 C 风格的强制转换运算符。这是代码的相关部分:

这里的问题是(typename)in与incastExp发生冲突并产生 reduce/reduce 冲突:(variable)generalExp

可能的解决方案是在相应的 lex 文件中列出所有有效的类型名(如 long、int、char),但是我也需要支持使用定义的类型。

UPD:另一种解决方案是使用野牛 GLR 解析器,由于性能下降,我不想要它。

bison -v输出在这里

0 投票
1 回答
112 浏览

bison - 如何摆脱减少减少野牛

我的代码如下:

编译时我收到 3 个减少/减少警告(即使代码运行正确)。我怎样才能摆脱这些警告?

0 投票
1 回答
1971 浏览

java - 如何解决从 IntWritable 到 Mutation 的转换错误?映射减少 HBase

当我尝试将IntWritable映射器中的一个传递给减速器时,出现以下错误:

这是我的映射器:

这是减速机:

和司机: