📜  正则语言与 CFL 的并集和交集

📅  最后修改于: 2021-09-28 10:58:53             🧑  作者: Mango

先决条件 – Chomsky Hierarchy,正则语言

众所周知,有限自动机接受的语言称为常规语言,下推自动机接受的语言称为上下文无关语言但是,当谈到这两种语言的联合或交集时,有些人发现很难分析交集是生成常规语言还是上下文无关语言。

首先要观察的是每种常规语言实际上都是上下文无关的,原因很简单。调用语言正则的一种方法是设计其等效的有限自动机,或者换句话说,如果我们可以为特定语言设计有限自动机,那么只有我们可以调用该语言 – 如果可能,上下文无关语言也存在正则和相同要为特定语言设计下推自动机,则仅将其称为上下文无关。

现在简单地说,下推自动机实际上是一个有限自动机,其内存以无限堆栈的形式提供给它。您需要注意的是,可以为特定语言设计有限自动机,然后也可以设计其等效的下推自动机,我们要做的只是不使用其中可用的无限堆栈。就这么简单。观察这一点,最后你会得到的是,对于每种常规语言,都可以设计有限自动机,从而下推自动机。这就是为什么每种常规语言也可以称为上下文无关的原因,或者换句话说,常规语言是上下文无关语言的子集。

常规语言与上下文无关语言的结合 –
由于所有常规语言都是上下文无关的,因此两者的结合会产生上下文无关的语言。但是在示例的帮助下理解总是好的。
让我们采用语言 L1 = {0*1*}(常规)和 L2 = {0^n1^n |n>=0}(无上下文)
并让 L=L1 U L2 这将导致这两种语言的联合,这将是:

L = {0*1*} 这是常规语言,但因为每种常规语言都是上下文无关的。所以,我们可以说两者的结合总是导致上下文无关的语言。

常规语言与上下文无关语言的交集 –
因为现在我们知道所有常规语言都是上下文无关的子集,因此理解两者的并集没有问题,但是当我们再次谈论交集时,答案是上下文无关语言。是的,常规语言和上下文无关语言的交集总是会产生上下文无关语言。

让我们再次以上面的例子为例,其中 L1 和 L2 相同,但现在让
L= L1 ∩ L2 这很容易导致
L={0^n1^n | n>=0} 是上下文无关的。
您可以采用更多此类示例并验证常规语言和上下文无关语言的并集和交集始终会产生上下文无关语言。

阅读下一篇文章——上下文无关语言的闭包属性