提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|使用教程|编辑:郑恭琳|2018-01-08 10:57:33.000|阅读 1071 次
概述:随着这个大系列的结束,我们希望解决大部分关于解析术语和算法的疑问,比如术语的含义以及为什么选择某种算法。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
我们已经到了最后!如果您是第一次遇到这个系列,请查看上面的其他帖子。
我们最后的重点是自下而上的算法。
自下而上策略的主要成功是许多不同LR解析器的家族。虽然LR解析器比传统的LL(1)语法更强大,但它们相对不受欢迎的原因是,历史上它们难以建立。因此,除了对CYK解析器的简要描述之外,我们主要关注它们。
这意味着我们避免谈论更通用的shift-reduce分析器类,它也包含LR分析器。
Shift-Reduce算法分两步工作:
基本上,Shift步骤读取输入直到完成,而Reduce步骤连接子树,直到构建最终的分析树。
Cocke-Younger-Kasami(CYK)算法由三位作者独立制定。它的显着性是由于最糟糕的表现(O(n3))造成的,尽管它在大多数常见的情况下受到相对较差的表现的阻碍。
然而,该算法的真正缺点是它需要以表示。
这是因为该算法依赖于这种特殊形式的属性,能够将输入分成两半来尝试匹配所有的可能性。从理论上讲,任何上下文无关的语法都可以转化为相应的CNF,但这种手段很少实用。想象一下,你不能使用左递归规则,然后被要求学习一种特殊的形式这一事实令人烦恼。
CYK算法主要用于特定问题;例如,会员问题:确定一个字符串是否与某个语法兼容。它也可以在自然语言处理中使用,以找到许多选项之间最可能的解析。
出于所有实际的目的,如果您需要解析所有上下文无关的语法,并且性能很差,那么您需要使用Earley解析器。
LR(从左到右读取输入;最右边的派生)分析器是自下而上的分析器,可以以线性时间处理确定性的上下文无关语言,而且无需回溯。LR解析器的发明归功于著名的Donald Knuth。
传统上,他们已经被比较,并与LL解析器竞争。有一个类似的分析需要解析一个语言的前瞻tokens的数量。一个LR(k)解析器可以解析需要解析前向k个tokens的语法。然而,LR语法的限制性较小,因此比相应的LL语法更强大。例如,不需要排除左递归规则。
从技术上讲,LR语法是LL语法的超集。这样做的一个结果是你只需要LR(1)语法,所以通常,(k)被省略。
它们也是基于表格的,就像LL解析器一样,但是它们需要两个复杂的表格。非常简单地说:
LR语法分析器功能强大,性能很好,所以在哪里?他们需要的表格很难用手工编写,对于普通的计算机语言来说可能会变得非常大,所以通常通过语法分析器来使用它们。如果您需要手动构建解析器,则可能更喜欢自顶向下的解析器。
解析器生成器避免了创建这样的表的问题,但是它们不能解决生成和浏览这样的大表的成本问题。Knuth描述的规范LR(1)解析器有更简单的选择。这些替代品比原来的要少。它们是简单的LR解析器(SLR)和前瞻LR解析器(LALR)。所以,按照能力的顺序,我们有:
Frank DeRemer发明的两个解析器的名字有些误导:一个不是那么简单,另一个不是唯一使用前瞻的解析器。我们可以说一个更简单,另一个更依赖前瞻来做出决定。
基本上,他们使用的表格不同。大多数情况下,他们改变了“做什么”的部分和前瞻集,这又对语法分析提出了不同的限制。换句话说,他们使用不同的算法从语法中派生语法分析表。
SLR解析器在实际应用上有相当的限制,并不经常使用。LALR解析器反而适用于大多数实际的语法,并被广泛使用。实际上,使用LALR解析器表的流行工具yacc和bisonwork。
与LR语法相反,LALR和SLR语法不是LL语法的超集。他们不容易比较;一些语法可以被一个类而不是另一个所覆盖,反之亦然。
通用的LR解析器(GLR)是LR解析器的更强大的变体。它们在1974年由Bernard Land描述,1984年由Tomita首次实现。GLR存在的原因是需要解析非确定性和模糊的语法。
在其表上找不到GLR解析器的威力,这相当于传统LR解析器的表。相反,它可以移动到不同的状态。在实践中,如果存在歧义,则会派生一个新的解析器(或解析器)来处理特定的情况。这些解析器可能会在稍后阶段失败并被丢弃。
GLR解析器的最坏情况下的复杂度与Earley(O(n3))相同,尽管用确定性语法的最好情况可能会有更好的性能。一个GLR解析器也比Earley的解析器更难构建。
通过这个大系列,我们希望解决大部分关于解析术语和算法的疑问,比如术语的含义以及为什么选择某种算法。我们不仅解释了它们,而且还解释了解析编程语言的一些常见问题。
由于时间和精力的原因,我们无法提供所有解析算法的详细解释。所以,我们还提供了一些链接,让您更深入地了解这些算法,背后的理论以及它们是如何工作的。
如果您只是对解析感兴趣,您可能需要阅读“解析技术”()这本书。它明显比我们的理解深入得多,并且它也涵盖了一些较少使用的解析算法。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢