Shift减少并减少冲突

时间:2009-03-24 09:32:01

标签: oslo shift-reduce-conflict mgrammar reduce-reduce-conflict

我很难绕过这个并且需要一些帮助来理解转移减少并减少冲突。我有一个语法,我似乎无法理解为什么它有问题。我可以附上语法,但我想了解这是如何运作的。

第一个问题,MGrammer创建了什么类型的解析器?据我了解,shift reduce和reduce reduce冲突取决于解析器的类型。

第二个问题,什么意味着减少减少冲突,什么意味着减少冲突?

我知道词法分析和形式语法的基础知识,但是自从我使用语言设计以来已经有一段时间了,所以这里的任何帮助都是非常合适的。

更新

我正在使用一种空白重要的语言,我想知道在MGrammar中这样做的可能性,我是否需要一副头来解决歧义?

1 个答案:

答案 0 :(得分:10)

简单示例:

if cond
    if cond2
        cmd
    else
        cmd2

问题:else属于哪里?对于人眼来说,缩进说“到第二个if”,但这对计算机没有任何意义(除非使用Python;))。这是shift/reduce conflict

一个优雅的解决方案是将else视为具有最高优先级的左边绑定运算符(使其“挂起”到最接近的if)。

reduce/reduce conflict是一种歧义。我没有好的示例,但这意味着语法中有一些路径,其中一个令牌可能导致两个规则同时减少,并且没有其他信息来决定哪个规则应该优先。

[编辑]野牛文档有example for reduce/reduce