我很难绕过这个并且需要一些帮助来理解转移减少并减少冲突.我有一个语法,我似乎无法理解为什么它有问题.我可以附上语法,但我想知道这是如何工作的.
第一个问题,MGrammer创建了什么类型的解析器?据我了解,shift reduce和reduce reduce冲突取决于解析器的类型.
第二个问题,什么意味着减少减少冲突和什么意味着转移减少冲突?
我知道词法分析和正式语法的基础知识,但是自从我使用语言设计以来已经有一段时间了,所以这里的任何帮助都是非常合适的.
我正在使用一种空白重要的语言,我想知道在MGrammar中这样做的可能性,我是否需要看一眼才能解决歧义?
简单的例子:
if cond if cond2 cmd else cmd2
问题:else
属于哪里?对于人眼来说,缩进说"到第二个if
",但这对计算机没有任何意义(除非使用Python ;)).这是一种转移/减少冲突.
一个优雅的解决方案是将其else
视为具有最高优先级的左绑定运算符(使其"挂起"到最近的if
).
一个减少/减少冲突是一个含糊不清.我没有好的示例,但这意味着语法中有一些路径,其中一个令牌可能导致两个规则同时减少,并且没有其他信息来决定哪个规则应该优先.
[编辑]野牛文档有一个减少/减少的例子.