您如何确定语言是常规的,无上下文的但不是常规的还是无上下文的?

时间:2018-10-30 18:49:42

标签: programming-languages theory language-design regular-language context-free-language

我有一个作业问题,要求您证明一种语言是否是以下三种语言之一:

  1. 常规语言
  2. 无上下文但不规则
  3. 不是无文本的

您将如何证明每个人?我知道Pumping Lemma可以验证一种语言是否是非常规语言或非上下文无关语言,仅此而已。

下面的示例可以帮助我更好地理解:

{a ^(2n + 1)b ^(3n + 2)| n∈N},字母{a,b},其中N都是自然数。

1 个答案:

答案 0 :(得分:0)

常规语言的激进引理可以告诉您语言不是常规语言;但是,它不能告诉您语言是正常的。要说出某种语言是正规的,您必须做的等效工作是产生一个有限的自动机,正规语法或正规表达式,然后证明它对您的语言是正确的。

无上下文语言的抽水引理告诉您该语言是否是上下文无关的。也就是说,如果一种语言满足了上下文无关语言的激进引理,那么它就是上下文无关的。如果不是,则不是。但是,您可以肯定地使用它,就像使用普通语言的抽水引理一样,然后继续查找下推自动机或无上下文语法。

在您的情况下,我们可以首先选择字符串a ^(2p + 1)b ^(3p + 2)来显示正常语言所引起的语言不正常。通过论证对于任何形式为a ^(2k + 1)b ^(3k + 2)的字符串(其中2k + 1和3k + 2足够大),我们可以始终证明语言是上下文无关的,我们始终可以选择v包含2个a和y包含三个b,因此抽运可维持所需的属性。另外,我们可以基于相同的见解为其提供CFG:

S -> aaSbbb | abb

然后我们应该证明语法是正确的,这是练习。