根据正则式推导右线性文法

问题描述

根据正则式 ( a + b ) ∗ a a ( a + b ) ∗ b b ( a + b ) ∗ + ( a + b ) ∗ b b ( a + b ) ∗ a a ( a + b ) ∗ (a+b)^*aa(a+b)^*bb(a+b)^*+(a+b)^*bb(a+b)^*aa(a+b)^* (a+b)aa(a+b)bb(a+b)+(a+b)bb(a+b)aa(a+b)写出对应的右线性文法。

预备知识

根据正则式推导右线性文法,需要从左侧开始分解,规则为

  • 对于 a X aX aX的形式,可以转换为 S → a X S\rightarrow aX SaX
  • 对于 ( a + b ) X (a+b)X (a+b)X的形式,可以转换为 S → a X ∣ b X S\rightarrow aX|bX SaXbX
  • 对于 a ∗ a^* a的形式,可以转换为 S → a S S\rightarrow aS SaS

分析

设右线性文法 G = ( { S , A , B , C } , { a , b } , P , S ) G=(\{S,A,B,C\},\{a,b\},P,S) G=({S,A,B,C},{a,b},P,S),现推导其生成式的形式:

  • 首先,形如 a ∗ a^* a的形式,有 S → a S S\rightarrow aS SaS。则对于 ( a + b ) ∗ (a+b)^* (a+b)
    S → a S ∣ b S S\rightarrow aS|bS SaSbS由于题目中正则式由两部分相加而得,则对于 a a ( a + b ) ∗ b b ( a + b ) ∗ aa(a+b)^*bb(a+b)^* aa(a+b)bb(a+b) b b ( a + b ) ∗ a a ( a + b ) ∗ bb(a+b)^*aa(a+b)^* bb(a+b)aa(a+b) S → a a A ∣ b b B S\rightarrow aaA|bbB SaaAbbB
    其中 A = ( a + b ) ∗ b b ( a + b ) ∗ A=(a+b)^*bb(a+b)^* A=(a+b)bb(a+b) B = ( a + b ) ∗ a a ( a + b ) ∗ B=(a+b)^*aa(a+b)^* B=(a+b)aa(a+b)
  • 下面继续对正则式 A A A进行变换,依然是 a ∗ X a^*X aX的形式,则
    A → a A ∣ b A A\rightarrow aA|bA AaAbA对于 b b ( a + b ) ∗ bb(a+b)^* bb(a+b)这一部分
    A → b b C A\rightarrow bbC AbbC其中 C = ( a + b ) ∗ C=(a+b)^* C=(a+b),易知
    C → a C ∣ b C ∣ ε C\rightarrow aC|bC|\varepsilon CaCbCε
  • 对于 B B B同理,有
    B → a B ∣ b B B\rightarrow aB|bB BaBbB 以及
    B → a a C B\rightarrow aaC BaaC
    综上,生成式 P P P的形式为
    S → a S ∣ b S ∣ a a A ∣ b b B S\rightarrow aS|bS|aaA|bbB SaSbSaaAbbB A → a A ∣ b A ∣ b b C A\rightarrow aA|bA|bbC AaAbAbbC B → a B ∣ b B ∣ a a C B\rightarrow aB|bB|aaC BaBbBaaC C → a C ∣ b C ∣ ε C\rightarrow aC|bC|\varepsilon CaCbCε
  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值