给出一些非正则的上下文无关语言的例子。


上下文无关文法 (CFG) 由一组有限的语法规则组成,是一个四元组 **(V, T, P, S)**

其中:

  • V 是变量(非终结符)。

  • T 是一组终结符。

  • P 是一组规则,P: V→ (V ∪ T)*,即产生式规则的左端。P 不具有任何右上下文或左上下文。

  • S 是起始符号。

使用任何语言的规则,我们可以推导出该语言中的任何字符串。

对于语言 a*,CFG 如下:

S -> aS

S -> ɛ

这里:

  • S 是变量。

  • a 和 ɛ 是终结符。

  • S 是起始符号。

使用这些规则,我们可以推导出任意数量的 a。

例如,考虑字符串 aaaaa 的 CFG 如下所示:

S
aS          rule 1
aaS       rule 1
aaaS       rule 1
aaaaS     rule 1
aaaaaS     rule 1
aaaaaɛ     rule 2
aaaaa

上下文无关语言是由上下文无关文法创建的,它包含正则语言。

相同的上下文无关语言可以由多个上下文无关文法生成。

示例 1

一个非正则但属于上下文无关语言的例子是 **{ anbn | n >= 0 }**

上述例子包含所有 a 和 b 数量相等的字符串,符号 a3b3 可以扩展为 aaabbb,其中有三个 a 和三个 b。

抽吸引理 (Pumping Lemma) 提供了进行否定测试的能力。如果语言不满足抽吸引理,则可以说它不是上下文无关的。抽吸引理是一个数学证明,将其应用于上下文无关语言需要时间。

示例 2

考虑另一个非正则的上下文无关语言的例子。

S -> aSb | ɛ

这个例子不是正则的,因为我们无法用有限状态机或正则表达式来表达它。我们应该能够计算 A 的数量并检查 B 的数量是否匹配。此外,由于 n 可以是任何值,因此无法用有限状态机来完成。

更新于:2021年6月16日

2K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告