【问题标题】:Describe the language generated by this context-free grammar描述这种上下文无关文法生成的语言
【发布时间】:2019-04-12 15:02:39
【问题描述】:

我有以下语法,

  1. S -> Sb
  2. S -> aaSb
  3. S -> b

此语法中的典型推导是
S => Sb => [aaSb]b => [aa[b]b]b => aabbb 对应于n = 1
S => Sb => [aaSb]b => [aa[aaSb]b]b => [aa[aabb]b]b => aaaabbbb 对应于n = 2

编辑: 所以我声称这个语法会生成语言
L = {a^(2n)b^(n+2) : n >= 1}

我很确定我的 aa^(2n) 因为在 S 之前有两个 a ,但是 b 呢?这里没有 lambda 所以我的 n 来自 n >= 1?.

编辑:
b^(n+1)b^(2n+1) 都是错误的假设,因为如果 n = 3,语法可以导出字符串 aaaaaabbbbb
我将我的 b 修改为 b^(n+2)。 这样 L 就变成了 L = {a^(2n)b^(n+2) : n >= 1}

【问题讨论】:

  • 也许这对我来说是新的,但这是一个软件编程问题吗?
  • 不是真的,这更像是计算机科学问题。
  • 语法可以产生aaaaaabbbbb,它与您提议的形式不匹配。 (我很确定 CFG 不能生成具有指数数量符号的语言,尽管我无法在此评论中证明这一点。)
  • 你是对的,如果 n = 3 只有当 bb^(n+2) 时,语法才会产生 aaaaaabbbbb。所以我对b^(2n)b^(2n+1) 的假设是错误的。
  • Production 1 表示可以在末尾添加任意数量的bs。这使得平等关系不太可能。

标签: context-free-grammar regular-language formal-languages context-free-language


【解决方案1】:

此语法生成的语言是a^(2n) b^(n+m+1),其中nm 是自然数。为了证明这一点,(a)我们看到任何使用语法产生式派生的字符串都与上述匹配,并且(b)任何与上述匹配的字符串都可以使用语法的产生式派生。

(a) 文法可以而且必须只使用规则 (3) 一次。这给出了+1 的数量bs。规则 (2) 的执行可能会发生多次 n,将 2n as 放在前面,n bs 在后面,因此 2nn 术语。规则 (1) 可以执行任意次数m,因此有这个术语。

(b) 给定字符串a^(2n) b^(n+m+1) 用于自然数nm:使用规则(1) 的次数等于m;然后,使用规则(2)的次数等于n;然后,用户规则(3)一次。因此,语法会生成字符串。

写相同答案的另一种方法是a^2n b^mm > n

【讨论】:

    【解决方案2】:

    解决这个问题的一种方法是重写语法。请注意,产生式 1 和 2 都以 Sb 结尾,因此我们可以对它们进行左分解:

    S -> ASb
    S -> b
    A -> 
    A -> aa
    

    从前两个产生式中,很容易看出S 生成A^n b^{n+1} for n >= 0

    从最后两个产生式中,A^n 生成 a^{2k} for 0 <= k <= n

    所以语言是a^{2k} b^{n+1} for n >= 0, 0 <= k <= n

    或者等价地,让m = n - k得到a^{2k} b^{k+m+1} for k,m >= 0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      相关资源
      最近更新 更多