Programming languages 如何确定一种语言是常规语言、无上下文但不规则语言还是无上下文语言?

Programming languages 如何确定一种语言是常规语言、无上下文但不规则语言还是无上下文语言?,programming-languages,theory,language-design,regular-language,context-free-language,Programming Languages,Theory,Language Design,Regular Language,Context Free Language,我有一个家庭作业问题,需要你证明一种语言是否是以下三种语言之一: 正规语言 上下文无关但不规则 不是免费的 你将如何证明每一个?我知道泵引理可以验证一种语言是不规则的还是不与上下文无关的,但仅此而已 帮助我更好理解的示例如下: {a^(2n+1)b^(3n+2)|n∈ N},字母表{a,b},其中N是所有自然数 正则语言的泵引理可以告诉你一种语言不是正则的;然而,它不能告诉你一种语言是规则的。要判断一种语言是正则的,您必须等效于生成一个有限自动机、正则语法或正则表达式,然后证明它对您的语言是正确

我有一个家庭作业问题,需要你证明一种语言是否是以下三种语言之一:

  • 正规语言
  • 上下文无关但不规则
  • 不是免费的
  • 你将如何证明每一个?我知道泵引理可以验证一种语言是不规则的还是不与上下文无关的,但仅此而已

    帮助我更好理解的示例如下:


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

    正则语言的泵引理可以告诉你一种语言不是正则的;然而,它不能告诉你一种语言是规则的。要判断一种语言是正则的,您必须等效于生成一个有限自动机、正则语法或正则表达式,然后证明它对您的语言是正确的

    上下文无关语言的泵引理告诉您该语言是否上下文无关。也就是说,如果一种语言满足上下文无关语言的泵引理,它就是上下文无关的;如果它没有,那么它就不是。然而,你当然可以用同样的方法来使用它,就像你在常规语言中使用泵引理一样,继续寻找下推自动机或上下文无关语法

    在您的例子中,我们可以首先选择字符串a^(2p+1)b^(3p+2),通过正则语言的泵引理来表明该语言不是正则的。我们可以证明该语言是上下文无关的,因为对于任何形式为a^(2k+1)b^(3k+2)的字符串,其中2k+1和3k+2足够大,我们总是可以选择v来包含2个a,选择y来包含3个b,以便泵送保持所需的属性。或者,我们也可以根据相同的观点给出CFG:

    S -> aaSbbb | abb
    

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

    欢迎来到SO!这可能更适合cs.stackexchange.com。