一个正规语言可以由正规文法定义,也可以由正规式定义,对任意一个正规文法,存在一个定义同一个正规语言的正规式;反之,对每个正规式,存在一个生成同一语言的正规文法,有些正规语言很容易用文法定义,有些语言更容易用正规式定义,现在介绍两者间的转换,从结构上建立它们的等价性。
1、将Σ上的一个正规式转换成正规文法G=(VN,VT,P,S)。令其中的VT=Σ,确定产生式和VN的元素的办法在右页描述。
对任何正规式r,选择一个非终结符S生成产生式S→r,为区别文法中的产生式,把这个产生式叫做正规产生式,并将S定为G的识别符号。
若x和y都是正规式,对形如A→xy的正规产生式,重写成:A→xB,B→y两个正规产生式,其中B是新选择的非终结符,即B∈Vn
对已形成的形如A→x*y的正规产生式,重写为:
A→xB
A→y
B→xB
B→y 其中B为一新非终结符。
对形如A→x|y的正规产生式,重写为:
A→x,A→y
不断利用上述规则做变换,直到每个产生式都符合三型文法的要求。 例4.9
将R=a(a|d)*转换成相应的正规文法,令S是文法的开始符号,首先形成
S→a(a|d)*,然后形成S→aA和A→(a|d)*,再重写第二条产生式形成
S→aA A→(a|d)B,
A→ε B→(a|d)B和
B→ε
进而变换为
S→aA B→aB
A→aB B→dB
A→dB B→ε A→ε即为所求。
2、将正规文法转换成正规式。基本上是上述过程的逆过程,最后只剩下一个开始符号定义的产生式,并且该产生式的右部不含非终结符。
例4.10
文法G[S]
S→aA S→a A→aA A→dA A→a A→d
先有:
S=aA|a
A=(aA|dA)|(a|d)
再将A的正规式变换为A=(a|d)A|(a|d),据表中规则2变换为:A=(a|d)*|(a|d),再将A 右端代入S的正规式得:S=a(a|d)*|a(a|d)|a
再利用正规式的代数变换可依次得到
S=a((a|d)*|(a|d)|ε)
S=a(a|d)*
即a(a|d)*为所求。
总结:文法和语言
0型文法产生的语言称为0型语言
1型文法或上下文有关文法(CSG)产生的语言称为1型语言或上下文有关语言(CSL)
2型文法或上下文无关文法(CFG)产生的语言称为2型语言或上下文无关语言(CFL)
3型文法或正则(正规)文法(RG)产生的语言称为3型语言正则(正规)语言(RL)
四种文法之间的关系 是将产生式做进一步限制而定义的。
语言之间的关系依次:有不是上下文有关语言的0型语言,有不是上下文无关语言的1型语言,有不是正则语言的上下文无关语言。
总结:文法和识别系统的关系
0型文法(短语文法)的能力相当于图灵机,可以表征任何递归可枚举集,而且任何0型语言都是递归可枚举的。
图灵机
1型文法(上下文有关文法):相应识别系统是线性界限自动机。
2型文法(上下文无关文法):相应识别系统是不确定的下推自动机。
3型文法(正规文法、右线性文法):相应识别系统是有穷自动机。