描述此上下文无关语法生成的语言

时间:2018-11-09 02:30:26

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

我有以下语法,

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

此语法的典型派生是
S => Sb => [aaSb]b => [aa[b]b]b => aabbb for 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}

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

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

2 个答案:

答案 0 :(得分:0)

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

(a)语法可以并且必须仅使用规则(3)一次。这将使+1的数量为b。规则(2)的执行可能会多次发生n,将2n a放在前面,n b放在后面,因此2nn项。规则(1)可以执行m次,因此可以执行多次。

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

写相同答案的另一种方法是将a^2n b^mm > n一起使用。

答案 1 :(得分:0)

解决此问题的一种方法是重写语法。请注意,结果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

相关问题