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
  • 相关阅读:
    canvas 文本坐标(0,0)显示问题
    canvas 图片跨域处理
    canvas 文字换行
    什么是柯理化函数?
    记录一下学习webpack原理的过程
    pika和kombu实现rpc代码
    pika和rabbitMQ实现rpc代码
    docker部署rabbitMQ
    rabbitMQ和pika模块
    ubuntu搭建关于amd64或arm64,armhf架构的本地apt源
  • 原文地址:https://www.cnblogs.com/lfri/p/11595936.html
Copyright © 2011-2022 走看看