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