用0、1、2、3型文法定义语言

方法一:逐步求精法

注意:这种方法需要满足独立性!
即将目标式分成几个,先生成每个部分,再拼接起来

例题一:

试采用3型文法定义语言 $L = {a^ib^jc^k |i,j,k geq 1}$.

从左至右:

  $S ightarrow aS|aA$
  $A ightarrow bA|bB$
  $B ightarrow cB|c$
相当于 $A$ 表示 $b$ 开头的只含 $b, c$ 组成的字符串,$B$ 表示只含 $c$ 的字符串。
若只要求2型文法,
从上至下:
由于 $i,j,k$ 之间没有联系
  $S ightarrow ABC$
  $A  ightarrow aA|a$
  $B ightarrow bB|b$
  $C ightarrow cC|c$
 
试题二
试采用2型文法定义语言  $L_2 = {a^ib^ic^j |i,j geq 1}$
  $S ightarrow AC$
  $A ightarrow aAb|ab$ 
  $C ightarrow cC|c$
 
 

方法二:拼凑法

首先必须理解这个言语所代表的字符串,
其次还有一些基本的原则的,
比如 $S$ 推导式的右边肯定含有 $S$,不然没法表示出无穷个。
其次,可将第一个字符串代入 $S$,思考应如何推导使其能成为第二个 $S$。
最后,1型文法可考虑交换。
举个例子
试采用1型文法定义语言 $L = {a^ib^ic^i |i geq 1 }$
首先,$S ightarrow aSb$,但是$S$ 又不能单独出现(自己想下为什么?),所以写成 $S ightarrow aBSc$
$S$ 的第一项为 $abc$,将其代入得
$S ightarrow aBabc$,可以发现,如果 $B ightarrow b$,只需将 $S$ 产生得 $a$ 交换到前面去即可。
而1型文法是有交换能力的,即 $Ba ightarrow Ba$。
合起来就是
  $S ightarrow aBSc|abc$
  $Ba ightarrow aB$
  $Bb ightarrow bb$
 
 总结:交换nb
原文地址:https://www.cnblogs.com/lfri/p/11595936.html