我很难理解这一点,需要一些帮助来理解shift、reduce和reduce冲突。我有一个语法,我似乎不明白为什么它是有问题的。我可以附加语法,但我想了解它是如何工作的。
第一个问题,MGrammer创建了什么类型的解析器?据我所知,shift reduce和reduce reduce冲突取决于解析器的类型。
第二个问题,什么是reduce reduce冲突,什么是转移reduce冲突?
我知道词法分析和形式语法的基础知识,但我已经有一段时间没有从事语言设计了,所以这里的任何帮助都是适当的。
更新:
我正在使用一种有意义的空格语言,我想知道在MGrammar中做这件事的可能性,我需要看一看头来解决歧义吗?
发布于 2009-03-24 09:51:58
简单的例子:
if cond
if cond2
cmd
else
cmd2问:else属于哪里?对于人眼来说,缩进表示“到第二个if”,但这对计算机没有任何意义(使用Python时除外)。这是一个shift/reduce conflict。
一种优雅的解决方案是将else视为具有最高优先级的左绑定运算符(这使其“挂起”到最接近的if)。
reduce/reduce conflict是一种歧义。我手头没有很好的例子,但这意味着在语法中,一个令牌可能导致两个规则同时减少的路径,并且没有额外的信息来决定哪个规则应该优先。
编辑野牛文档有一个example for reduce/reduce。
https://stackoverflow.com/questions/676664
复制相似问题