当前位置:  开发笔记 > 编程语言 > 正文

Shift减少并减少冲突

如何解决《Shift减少并减少冲突》经验,为你挑选了1个好方法。

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

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

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

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

更新:

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



1> Aaron Digull..:

简单的例子:

if cond
    if cond2
        cmd
    else
        cmd2

问题:else属于哪里?对于人眼来说,缩进说"到第二个if",但这对计算机没有任何意义(除非使用Python ;)).这是一种转移/减少冲突.

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

一个减少/减少冲突是一个含糊不清.我没有好的示例,但这意味着语法中有一些路径,其中一个令牌可能导致两个规则同时减少,并且没有其他信息来决定哪个规则应该优先.

[编辑]野牛文档有一个减少/减少的例子.


好吧,我花了一些时间才弄明白这一点,所以有必要简单/文字描述为什么要发生转移/减少和减少/减少冲突.我的问题是,我正在查看我的语法,好像它可以产生歧义.实际上,这些歧义产生了解析结构,这会使解析器处于无法自行继续的情况.这使我得出结论,编程语言包含某些字符的原因是以一种方式解决这些歧义.在我的语法中,白色空间仅仅意味着许多不同的东西.
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有