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
  • 相关阅读:
    windows向Linux服务器上传、下载,服务器内复制、移动文件
    解决:ubuntu提示E: 无法获得锁 /var/lib/dpkg/lock-frontend
    PostgreSQL安装与简单操作
    LeetCode 234.回文链表
    LeetCode 445.两数相加 II
    LeetCode 24.两两交换链表中的节点
    LeetCode 19.删除链表的倒数第 n 个节点
    LeetCode 26.删除排序数组中的重复项
    Java 程序运行机制
    String 属于基础的数据类型吗?
  • 原文地址:https://www.cnblogs.com/lfri/p/11595936.html
Copyright © 2011-2022 走看看