首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shift、reduce和reduce冲突

Shift、reduce和reduce冲突
EN

Stack Overflow用户
提问于 2009-03-24 09:32:01
回答 1查看 4.7K关注 0票数 6

我很难理解这一点,需要一些帮助来理解shift、reduce和reduce冲突。我有一个语法,我似乎不明白为什么它是有问题的。我可以附加语法,但我想了解它是如何工作的。

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

第二个问题,什么是reduce reduce冲突,什么是转移reduce冲突?

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

更新:

我正在使用一种有意义的空格语言,我想知道在MGrammar中做这件事的可能性,我需要看一看头来解决歧义吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-03-24 09:51:58

简单的例子:

代码语言:javascript
复制
if cond
    if cond2
        cmd
    else
        cmd2

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

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

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

编辑野牛文档有一个example for reduce/reduce

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/676664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档