Parsing 什么样的解析器在现实世界中最常用?

Parsing 什么样的解析器在现实世界中最常用?,parsing,Parsing,我刚刚学习了LL(1)解析器背后的理论,随后我了解到这种解析技术只适用于上下文无关语法的子集。LL(1)是预测性的,不做任何回溯。我不知道现实世界是否需要回溯功能。现实世界是否需要回溯功能?LL(1)似乎是对解析的一个合理介绍,但没有人会用它来“完成工作”。例子?你必须考虑你的语法,然后LL(1)甚至不适合解析像wikipedia使用的格式语言,其中一些规则使用多重重叠作为实例标题。(如果我错了,请纠正我!) 但是,如果您想完成任务,在现实世界中使用什么样的解析技术呢 答案可能包括某种妥协。到目

我刚刚学习了LL(1)解析器背后的理论,随后我了解到这种解析技术只适用于上下文无关语法的子集。LL(1)是预测性的,不做任何回溯。我不知道现实世界是否需要回溯功能。现实世界是否需要回溯功能?LL(1)似乎是对解析的一个合理介绍,但没有人会用它来“完成工作”。例子?你必须考虑你的语法,然后LL(1)甚至不适合解析像wikipedia使用的格式语言,其中一些规则使用多重重叠作为实例标题。(如果我错了,请纠正我!)

但是,如果您想完成任务,在现实世界中使用什么样的解析技术呢

答案可能包括某种妥协。到目前为止,速度还不是个问题

有了“真实世界”的能力,我的意思是解析器将解析整个上下文无关语法集,如果可能的话,不需要像左因子分解这样的特殊雪花处理。我进一步思考了一些虚构的情况,在这些情况下,我应该以某种方式为游戏项目编写后端内容,如果任务是随意地为设计者提供一种脚本语言,那么另一方面,什么样的解析器能够满足要求,而不会过于复杂。。。“深奥的…”和“复杂的”-或者简而言之:是一种过度的杀伤力

我希望这足以让你明白我的意思


多谢各位

您使用的解析器由您想要解析的内容决定!不同的技术适用于/支持不同的语言类(以及处理歧义的不同要求)。一般来说,上下文无关语法(如大多数编程语言)LALR和GLR解析非常常见。我(和一小部分但越来越多的其他编译器设计师)认为图表解析器(例如,对Earley解析器的Aycock/Horspool优化)是现代硬件的最佳选择,应该在新的实现中几乎无处不在。(特别是如果您希望以最少的麻烦支持完整的CF语法类,请查看或实现它们。它也比大多数其他类型的解析器更容易实现。)LALR解析器通常与LL解析器一样快(如果不是更快的话),并且功能强大,足以处理大多数语言(尽管我接受@BadZen关于GLR解析的观点)。自上而下解析的唯一有效借口是,生成好的诊断消息稍微不那么困难;这与速度或深奥无关。如果是我教解析技术,我会跳过LL内容,直接进入实际解析。@rici-好的观点是:错误作为质量属性/特征。让我们来看一个例子lso将增量解析(例如IDE在添加或删除单个标记/字符时需要做的)添加到该列表中!(对于后一件事,我提倡的图表解析……并没有那么热门。)嘿,伙计们,谢谢你们的回答!顺便说一句,你们甚至用很棒的表达式和关键词指定了我的问题:-实用解析-“以最小的麻烦支持整个CF语法类…”我一定会研究Earley的方法。你们介意我用几个其他问题来烦你们吗?所以LR已经非常适合解析整个类别的CFG?然而,LALR仍然更强大,并且是最强大的LR物种。到目前为止,我读到的关于LALR的内容是,它只会使解析表更小/解析速度更快。没有其他优势。您使用的解析器取决于您想要解析什么!不同的技术适合/支持不同的语言e类(以及处理歧义的不同要求)。对于一般的上下文无关语法(如大多数编程语言),LALR和GLR解析非常常见。我(和少数但越来越多的其他编译器设计者)认为图表解析器(例如,对Earley解析器的Aycock/Horspool优化)在现代硬件的世界上是最好的,在新的实现中应该在几乎所有的地方使用。(特别是如果你想以最少的麻烦支持完整的CF语法类,请查看或实现它。它也比大多数其他类型的解析器更容易实现。)LALR解析器通常与LL解析器一样快(如果不是更快的话),并且强大到足以处理大多数语言(尽管我接受@BadZen关于GLR解析的观点)。自上而下解析的唯一有效借口是,生成好的诊断消息稍微不那么困难;这与速度或深奥无关。如果是我教解析技术,我会跳过LL内容,直接进入实际解析。@rici-好的观点是:错误作为质量属性/特征。让我们来看一个例子lso将增量解析(例如IDE在添加或删除单个标记/字符时需要做的)添加到该列表中!(对于后一件事,我提倡的图表解析……并没有那么热门。)嘿,伙计们,谢谢你们的回答!顺便说一句,你们甚至用很棒的表达式和关键词指定了我的问题:-实用解析-“以最小的麻烦支持整个CF语法类…”我一定会研究Earley的方法。你们介意我用几个其他问题来烦你们吗?所以LR已经非常适合解析整个类别的CFG?然而,LALR仍然更强大,并且是最强大的LR物种。到目前为止,我读到的关于LALR的内容是,它只会使解析表更小/解析速度更快。没有其他优势。