寻找上下文免费语法(CFG)

时间:2017-10-18 23:45:06

标签: context-free-grammar formal-languages automata-theory

  

提供生成语言的无上下文语法

 M = {a^m
b^n
| 2m > n > m}.
‘
     

提示:m不能为0,因为在那种情况下2m = m。 m不能为1,因为在那种情况下2> n> 1,这么自然   数字n不存在。所以语言M中最短的字符串是aabbb。对于更长的字符串,您需要确保   bs的数量n和满足2m的数量m> n>米。

1 个答案:

答案 0 :(得分:1)

我们知道aabbb是该语言,因此S -> aabbb不是一个糟糕的开始。我们如何在语言中获得更长的字符串?好吧,我们需要保留2m > n > m。这种语言中最短的字符串(对于给定数量的a s)比b多一个a,所以我们可能会猜测S -> aSb并不坏猜测;它肯定会在我们的语言中生成字符串,即最短的字符串(对于给定数量的a s)。同样,我们语言中最长的字符串比baS -> aSbb,所以a也是安全的,因为它生成最长的字符串(对于给定的数字) S -> aabbb S -> aSb S -> aSbb s)。到目前为止我们的语法是这样的:

a

第一次制作后的每次制作都会添加一个b和一个或两个a。可以单独使用第二个生成来生成最短的字符串(对于给定数量的a s),第三个生成可以单独使用,生成最长的生成(对于给定数量的n s) 。最短和最长的串之间怎么样?这些作品可以用来获得所有这些字符串吗?

他们可以。你可以通过归纳证明它。您必须证明语言中的所有字符串长度aabbb(1)都是由语法生成的,而(2)语法生成的字符串是语言。

基本情况:语言中最短的字符串是k,它是由语法生成的。

归纳假设:假设语法为语言中的所有字符串生成所有字符串,包括长度为k + 1的字符串。

归纳步骤:我们必须显示语法为语言中的所有字符串生成长度为n = m + 1的任何字符串。我们已经认为语法不能产生不在语言中的字符串;通过仅使用第二个作品,您获得n = 2m - 1,并且只使用第三个作品获得a。要查看它是否生成了该语言中的所有字符串,请回想一下,该语言中的任何字符串都以至少两个b开头,并以至少三个aaxbbb结束。因此,它可以写成axbb。可以证明,如果此字符串使用该语言,则axb和/或axbb中的一个或两个也必须使用该语言。

    如果L2(m - 1) > n - 1 > m - 1 ,则
  1. 2m - 1 > n > m位于axb
  2. L位于2(m - 1) > n - 2 > m - 1 2m > n > m + 12m - 1 > n
  3. 由于在每种情况下从基本情况开始,我们至少有n > m + 1和/或L中的一个,其中一个也在k + 1中。通过归纳假设,语法产生它;并且其中一个语法的作品将从中产生长度为L的原始字符串。所以语法在{{1}}中生成所有字符串。