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
  • 相关阅读:
    SqlServer查询所有表名 查询表的所有列名
    IIS控制txt文件的访问
    CHM文件打不开
    [转]VS 2010项目中添加lib库
    SqlServer游标
    [转]_beginthread(), _beginthreadex()与CreateThread()的区别
    jquery radio快速度取值
    linx niginx下php无法创建文件夹及文件
    [转载]无效的 CurrentPageIndex 值.它必须大于等于 0 且小于 PageCount
    使用DateGrid的ItemCommand的一点心得
  • 原文地址:https://www.cnblogs.com/lfri/p/11595936.html
Copyright © 2011-2022 走看看