1、3.4 正规表达式与正规集,到目前为止,我们已了解了对于任意3型语言L(G),存在一DFA M,使L(G)=L(M);反之,对于任意的M,存在G,使L(G)=L(M)。这称为描述语言的等价性。本节将引入正规表达式的概念,它们可用于描述3型语言的特征,特别是对自动生成词法分析程序而言,它是非常有用的工具。,3.4 正规表达式与正规集,所谓正规表达式,就是用特定的运算符及运算对象按某种规则构造的表达式,用于描述给定3型语言的所有句子。,3.4.1 正规表达式及正规集的定义,设是一字母表,则上的正规表达式(正则表达式,正规式)及其表示的正规集可递归定义如下:,(1) 是一正规式,相应的正规集为; (
2、2) 是一正规式,相应的正规集为; (3) a, a是一正规式,相应的正规集为a; (4) 设 r , s 是正规式,且它们所表示的正规集为Lr , Ls ,则:1. (r) (s)是正规式,相应的正规集为 LrLs;2. (r)|(s)是正规式,相应的正规集为LrLs;3. (r)*是正规式,相应的正规集为Lr* ;有限地使用上面的规则(4),所得的表达式均是正规式。,定义中的括号主要用于规定运算顺序。我们 规定优先级从高到低依次为* , , | ,则可以省略 一些括号。例如 ( (r) ( (s)* ) | (r) 可简写 为r s* | r 。,给定正规式,它唯一确定一正规集;反之不真,
3、 即一个正规集可由多个不同的正规式表示。 若二正规式描述同一正规集,则称二式等价。 正规式间的基本等价关系(公理)如下。,A1. r|s = s|r A2. r|r = r A3. r| = r A4. (r|s)|t = r|(s|t) A5. (rs)t = r(st) A6. r(s|t) = rs|rt A7. (s|t)r = sr|st A8. r = r = A9. r = r = r A10. r* = (|r)* = |rr*,3.4.2 由正规文法构造相应的正规式,对于给定的3型文法G,如何构造正规式r,使Lr = L(G) ? 方法:将G视为定义所含非终结符为变量的联立方
4、程组,通过解方程组求得相应的正规式。,例: SaS | bA | b AaS 解: 设 S, A 所产生的正规集为 LS, LA ,则有:LS = aLS bLA b LA = aLS 由定义可知,L(G)= LS,视 S, A 为 LS, LA 的正规式,相应的关系为:S = aS + bA + b (1) A = aS (2) 将(2)代入(1),得:S = aS + baS + b = (a+ba)S + b (3),例: S aS | bA | b A aS 解: S = aS + baS + b = (a+ba)S + b (3)得到形如 x = x + 的方程。关于这类方程有如下论
5、断: 论断3.1 方程 x = x+ 有解 x = * 证:将 x=* 代入右边: 右 = *+ = (*+) = * = 左 由论断3.1可知,S = (a+ba)*b = (a|ba)*b 。,由论断3.1可知,S = (a+ba)*b = (a|ba)*bS = aS + baS + b = (a+ba)S + b (3) 另外,对(3)连续使用两次论断3.1,有:S = a*(baS+b) = a*baS+a*b = (a*ba)*a*b 于是可知如下两个正规式等价: (a|ba)*b = (a*ba)*a*b,例: S aA A bA|aB|b B aA相应的方程组为: S = aA (1) A = bA+aB+b (2) B = aA (3)(3)代入(2)得: A = (b+aa)A+b即: A = (b+aa)*b 代入(1)得: S = a(b+aa)*b = a(b|aa)*b,对于左线性文法,在解联立方程时最终会得到形如x=x+的方程,类似于论断3.1,可知其有解 x=*。 例: 标识符的文法为: I Id | Il | l相应的方程为: I = I(d+l)+d解为: I = l(d+l)* = l(d|l)*,