【问题标题】:How do you determine if a language is regular, context free but not regular, or not context free?你如何确定一种语言是常规的、上下文无关的但不是常规的,或者不是上下文无关的?
【发布时间】:2019-04-03 21:24:31
【问题描述】:

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

  1. 常规语言
  2. 上下文无关但不规则
  3. 非Comtext-Free

你会如何证明每一个?我知道 Pumping Lemma 可以验证一种语言是非正则语言还是非上下文无关语言,仅此而已。

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

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

【问题讨论】:

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

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


【解决方案1】:

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

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

在您的情况下,我们可以首先选择字符串 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

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

【讨论】:

    猜你喜欢
    • 2012-12-18
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 2014-02-27
    • 1970-01-01
    • 2015-03-09
    相关资源
    最近更新 更多