问题标签 [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.
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 产生,我的语法是否也接受空输入?
parsing - 减少/减少冲突
我正在尝试为一种简单的语言创建解析器,但由于规则 expr: l_value 和 r_value: '@' l_value,我无法摆脱一些减少/减少冲突。我试图修复它来确定符号“@”的优先级,但它没有帮助。一个最小的、可重现的例子是:
`
在 parser.output 我得到这个:
bison - 如何解决减少减少野牛的冲突?
首先,我在这里已经提到了许多类似的问题,但无法解决冲突。
我的 .y 文件中有这件作品
这个语法产生了很多减少\减少冲突。例如:
我有很多与此完全相同的冲突。但我无法理解这一点。
据我所知,它是说,当生产是unary_expr
或当它是power_expr '^' unary_expr
然后它看起来是 a'+'
时,它面临着减少\减少冲突。但是为什么会有reduce\reduce 冲突呢?当它有power_expr '^'
部分时,它可以使用规则 19(并且应该使用,因为否则产生式将是power_expr '^' power_expr
语法中没有定义的。)当没有power_expr '^'
部分时,它必须使用规则 18。这里的歧义在哪里出现,以及如何解决它。
compiler-construction - 移位归约和归约归约与 LR 冲突
这是语法:
我找不到与 LR 的 shift-reduce 和 reduce-reduce 冲突,有人可以帮我吗?
parsing - 语法中的reduce-reduce、shift-reduce冲突
LR解析器在分析过程中,该语法中的reduce-reduce和shift-reduce冲突有哪些?
grammar - yacc中的并列乘法
我正在尝试实现一种允许并列乘法的语法。这是用于解析 CAS 的多项式输入。
据我所知,它工作得很好,除了少数边缘情况。我发现了两个问题:
- 与其他规则冲突,例如,
a^2 b
被(错误地)解析为(^ a (* 2 b))
,而不是(* (^ a 2) b)
。 - yacc(bison) 报告
28 shift/reduce conflicts
和8 reduce/reduce conflicts
.
我很确定正确解决第一个问题也会解决第二个问题,但到目前为止我还没有成功。
以下是我正在使用的语法的要点:
删除并列规则 ( expr expr %prec '*'
) 解决了 shift/reduce 和 reduce/reduce 警告。
请注意,ab
在我的语法中应该是(* a b)
. 多字符变量前面应该有一个引号('
);这已经在lex
文件中处理得很好。词法分析器完全忽略了空格(
)和制表符(\t
)。
我知道这个问题,但这里使用并列似乎并不表示乘法。
任何意见或帮助将不胜感激!
PS 如果有帮助,这是整个项目的链接。