2. 删除 ϵ 产生式
ϵ 产生式的定义:
{A|A⇒+ϵ,ϵ∈VN} ,即经过1步或多步推导出 ϵ 的非终结符,具有 ϵ 产生式
例: S→ABC,A→aA|ϵ,B→bB|ϵ,C→cC|ϵ
按照上一次笔记的说法,应该是没有多余的 ϵ 产生式了,但是这不是规范的式子。
算法:
找出所有 ϵ 产生式 V0
这里需要用到迭代的思想。将上次得到的 ϵ 产生式带入尚未结束的式子
a) 构造 V′0 集
V′0={A,B,C} 这一步是直接由定义得到的
b) 将 A,B,C 分别用 ϵ 带入S的式子,得到 S→ϵ
V′′0=V′0⋃{S}
此时 V′′0≠V′0 迭代没有结束
c) V′′′0=V′′0⋃∅
此时 V′′′0=V′′0 ,迭代结束
∴V0=V′′′0
改写相关产生式
将所有可以产生 ϵ 产生式的式子,用自身或者用 ϵ 带入
S→ABC⇒S→ϵ,S→C,S→B,S→BC,S→A,S→AC,S→AB,S→ABC
A→aA⇒A→aA,A→a
B→bB⇒B→bB,B→b
C→cC⇒C→cC,C→c
删除除 S→ϵ 之外的 ϵ 产生式
即删除在3中得到的右边式子中除 S→ϵ 之外的 ϵ 产生式
S→ϵ,S→C,S→B,S→BC,S→A,S→AC,S→AB,S→ABC
A→aA,A→a
B→bB,B→b
C→cC,C→c
3’. S→ϵ⇒S′→ϵ,S′→S
这是一个规范
即:
S′→ϵ,S′→S
S→C,S→B,S→BC,S→A,S→AC,S→AB,S→ABC
A→aA,A→a
B→bB,B→b
C→cC,C→c
此时 V0={S′}
又例:
S→aSbS|bSaS|ϵ
V0={S}
S→aSbS⇒S→ab,S→abS,S→aSb,S→aSbs
S→bSaS⇒S→ba,S→baS,S→bSa,S→bSaS
S→ϵ
此时没有进行任何操作
3’. S→ϵ⇒S′→S,S′→ϵ ,此时 V0={S′}