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

方法一:逐步求精法

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

例题一:

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

从左至右:

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

方法二:拼凑法

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