上下文无关语言解析:从基础到实践
1. 确定性上下文无关语言的识别
在经典意义上,识别确定性上下文无关语言(即判断给定字符串是否属于该语言)并非十分有趣。对于正则语言,我们通常满足于对实数或电子邮件地址的正确性给出“是/否”的答案,但对于更强大的上下文无关语言,我们有更高的期望。
实际上,判断字符串是否属于某语言的问题在解析字符串的过程中得到解决。然而,在不讨论解析问题等其他主题的情况下,很难描述确定性语言的下推自动机的构造。因此,我们先搁置确定性下推自动机的话题,转而讨论解析问题。
下推自动机有以下特点:
- 能够识别任何上下文无关语言,但识别能力仅限于上下文无关语言。
- 存在将上下文无关文法转换为下推自动机,以及反之的算法。
- 非确定性下推自动机在计算机上难以模拟。
- 确定性下推自动机只能识别上下文无关语言的某些子集,这些子集的语言称为确定性语言(前提是下推自动机通过有利状态接受字符串)。
- 可以(且有必要)在计算机上执行确定性下推自动机,但首先需要了解如何根据给定文法构造自动机,然而目前尚不清楚哪些文法描述确定性语言,哪些则不能。
2. 解析问题概述
对于上下文无关语言,我们的需求远不止于正则语言。上下文无关语言的一个标准应用是描述编程语言的语法,我们不能仅仅依赖之前章节中研究的“是/否”程序来判断程序的语法正确性,而是需要确定程序中发现的语法结构类型,并在每种情况下采取特定的操作。因此,通常不考虑上下文无关语言的经典“是/否”识别问题,而是提出解析问题,其解决方案应该是构造一个解析树。
超级会员免费看
订阅专栏 解锁全文

1537

被折叠的 条评论
为什么被折叠?



