zoukankan      html  css  js  c++  java
  • 用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
  • 相关阅读:
    Single Number II
    Pascal's Triangle
    Remove Duplicates from Sorted Array
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Unique Paths
    Sort Colors
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Climbing Stairs
  • 原文地址:https://www.cnblogs.com/lfri/p/11595936.html
Copyright © 2011-2022 走看看