6

我很难解决这个问题,需要一些帮助来理解减少和减少冲突。我有一个语法,我似乎无法理解它为什么会出现问题。我可以附上语法,但我想了解它是如何工作的。

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

第二个问题,什么表示减少减少冲突,什么表示转移减少冲突?

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

更新:

我正在使用一种重要的空白语言,我想知道在 MGrammar 中这样做的可能性,我需要先看一下才能解决歧义吗?

4

1 回答 1

10

简单的例子:

if cond
    if cond2
        cmd
    else
        cmd2

问题:else属于哪里?对于人眼,缩进表示“第二个if”,但这对计算机没有任何意义(使用Python时除外;))。这是一个移位/减少冲突

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

减少/减少冲突是模棱两可的。我没有很好的例子,但这意味着语法中存在一个标记可能导致两个规则同时减少的路径,并且没有额外的信息来决定哪个规则应该优先。

[编辑]野牛文档有一个reduce/reduce 的例子

于 2009-03-24T09:51:57.760 回答