编译原理与编译构造 文法的优化2

2. 删除 ϵ 产生式

ϵ 产生式的定义:

{A|A+ϵ,ϵVN} ,即经过1步或多步推导出 ϵ 的非终结符,具有 ϵ 产生式

例: SABC,AaA|ϵ,BbB|ϵ,CcC|ϵ

按照上一次笔记的说法,应该是没有多余的 ϵ 产生式了,但是这不是规范的式子。

算法:

  1. 找出所有 ϵ 产生式 V0

    这里需要用到迭代的思想。将上次得到的 ϵ 产生式带入尚未结束的式子

    a) 构造 V0

    V0={A,B,C} 这一步是直接由定义得到的

    b) 将 A,B,C 分别用 ϵ 带入S的式子,得到 Sϵ

    V′′0=V0{S}

    此时 V′′0V0 迭代没有结束

    c) V′′′0=V′′0

    此时 V′′′0=V′′0 ,迭代结束

    V0=V′′′0

  2. 改写相关产生式

    将所有可以产生 ϵ 产生式的式子,用自身或者用 ϵ 带入

    SABCSϵ,SC,SB,SBC,SA,SAC,SAB,SABC

    AaAAaA,Aa

    BbBBbB,Bb

    CcCCcC,Cc

  3. 删除除 Sϵ 之外的 ϵ 产生式

    即删除在3中得到的右边式子中除 Sϵ 之外的 ϵ 产生式

    Sϵ,SC,SB,SBC,SA,SAC,SAB,SABC

    AaA,Aa

    BbB,Bb

    CcC,Cc

3’. SϵSϵ,SS

这是一个规范

即:

Sϵ,SS

SC,SB,SBC,SA,SAC,SAB,SABC

AaA,Aa

BbB,Bb

CcC,Cc

此时 V0={S}

又例:

SaSbS|bSaS|ϵ

  1. V0={S}

  2. SaSbSSab,SabS,SaSb,SaSbs

    SbSaSSba,SbaS,SbSa,SbSaS

    Sϵ

  3. 此时没有进行任何操作

3’. SϵSS,Sϵ ,此时 V0={S}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值