编译原理3词法分析2_第1页
编译原理3词法分析2_第2页
编译原理3词法分析2_第3页
编译原理3词法分析2_第4页
编译原理3词法分析2_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Part3Part3词法分析词法分析授课:胡静授课:胡静内容提要内容提要词法分析器的作用词法分析器的作用词法分析程序的设计与实现词法分析程序的设计与实现状态图状态图词法分析程序的自动生成词法分析程序的自动生成有穷自动机有穷自动机正则表达式与有限自动机正则表达式与有限自动机问题的提出问题的提出如果只向前看一个字符,不能够确定我们将要读入的是哪种如果只向前看一个字符,不能够确定我们将要读入的是哪种类型的类型的token如果如果token的开头是的开头是“i”,那么它一定是标识符么?,那么它一定是标识符么?如果如果token的开头是的开头是“2”,那么它一定是一个整型的常数么?,那么它一定是一个整型

2、的常数么?如果我们通过上面的类似如果我们通过上面的类似“插入插入”式的方法来写识别式的方法来写识别token的程的程序,这样的程序不容易写正确,而且也不容易维护序,这样的程序不容易写正确,而且也不容易维护因此需要一个更加有原理性的方法:词法分析器的生成器,因此需要一个更加有原理性的方法:词法分析器的生成器,可以自动产生有效的词法分析器。(例如可以自动产生有效的词法分析器。(例如lex,flex,Jlex)一般说来,没有限制的向前看是必要的一般说来,没有限制的向前看是必要的一些问题一些问题如何明确的描述如何明确的描述tokens2.e0 20.e-01 2.0000“” “x” “” “”如何将

3、文本分割成如何将文本分割成tokensif (x = 0) a = x1;if (x = 0) a = x1;如何描述如何描述tokenstokens我们可以使用我们可以使用正则表达式正则表达式来描述程序设计语言中的来描述程序设计语言中的tokens。正则表达式的定义如下:。正则表达式的定义如下:正则集合(语言)正则集合(语言)正则表达式的例子正则表达式的例子令令 =a,b, 正则表达式正则表达式正则集合集正则集合集aaa ba,babab(a b)(a b)aa,ab,ba,bba ,a,a, 任意个任意个a的串的串(a b) ,a,b,aa,ab 所有由所有由a 和和b组成的串组成的串(a

4、 b) (aa bb)(a b) 上所有含有两个相继的上所有含有两个相继的a或两个或两个相继的相继的b组成的串组成的串正则表达式的例子正则表达式的例子 =a,b,r=a(a b) 定义的正则集合定义的正则集合: a,aa,ab,abb, =d, ,e,+,-,则则 上的正则表达式上的正则表达式 d ( dd )(e(+ - )dd )表示的是无符号数的集表示的是无符号数的集合。其中合。其中d为为09的数字。的数字。若两个正则表达式所表示的正则集合相同,则认为二若两个正则表达式所表示的正则集合相同,则认为二者等价。两个等价的正则表达式者等价。两个等价的正则表达式U和和V记为记为U=V。例如:例如

5、: U= (a b), V = b a又如:又如: U= b(ab) , V =(ba) b再如:再如: U= (a b) , V =(a b ) 正则表达式的性质正则表达式的性质设设U、V和和W都是正则表达式,则如下关系普遍成立:都是正则表达式,则如下关系普遍成立:U|V = V|U(交换律)(交换律)U|(V|W) = (U|V)|W (结合律)(结合律)U(VW) = (UV)W(结合律)、(结合律)、U(V|W) = UV | UW (分配律)(分配律)(V|W)U = VU |WU;U = U =Ur r=rr =r rr “或或”的抽取律的抽取律正则文法和正则表达式正则文法和正则表

6、达式对对 上的正则表达式上的正则表达式U ,存在一个正则文法存在一个正则文法G=(VN,VT,P,S):L(G)=L(r)初始,初始, VT= , S VN ,生成生成正则正则产生式产生式SU (R.1) 对形如对形如 Ar1r2的的正则正则产生式:产生式:Ar1B Br2 B VN(R.2)对形如对形如Ar r1的的正则正则产生式:产生式:ArB Ar1BrB Br1 B VN (R.3)对形如对形如Ar1 r2的的正则正则产生式产生式:Ar1 A r2 不断应用不断应用R做变换,直到每个产生式右端只含一个做变换,直到每个产生式右端只含一个VN正则文法和正则表达式正则文法和正则表达式对对G=

7、(VN,VT,P,S),存在一个存在一个 =VT上的正则表达式上的正则表达式r : L(r)=L(G)AxB, By A=xy AxA y A=x yAx y A=x y正则文法和正则表达式举例正则文法和正则表达式举例例例1:r=a(a d) VT=a,d Sa(a d) R.1SaA A(a d) R.2A(a d)BAB(a d)B BR.3 Gs:SaA A VT=a,d AaBVN=S,A,B AdB BaB BdBBP正则表达式和正则文法举例正则表达式和正则文法举例Gs:SaA AaA AdA Sa Aa Ad SaA a AaA a dA d A(a d)A (a d) A(a d

8、) (a d)S=a(a d) (a d) a =a(a d) (a d) =a(a d)+)R=a(a d) 有穷自动机有穷自动机有穷自动机(也称有限自动机)作为一种识别装置,有穷自动机(也称有限自动机)作为一种识别装置,它能准确地识别正则集合,即识别正则文法所定义的它能准确地识别正则集合,即识别正则文法所定义的语言与正则表达式所表示的集合,引入有穷自动机这语言与正则表达式所表示的集合,引入有穷自动机这个理论,正是为词法分析程序的自动构造寻找特殊的个理论,正是为词法分析程序的自动构造寻找特殊的方法和工具。方法和工具。有穷自动机分为两类:确定的有穷自动机(有穷自动机分为两类:确定的有穷自动机(

9、DFA)和)和不确定的有穷自动机(不确定的有穷自动机(NFA)。)。其中其中“不确定不确定”的含义是:对于某个输入符号,在同的含义是:对于某个输入符号,在同一状态上存在不止一种转换。一状态上存在不止一种转换。确定的和不确定的有穷自动机都能而且仅能识别正则确定的和不确定的有穷自动机都能而且仅能识别正则集合,即它们能够识别正则表达式所表示的语言。集合,即它们能够识别正则表达式所表示的语言。确定的有穷自动机确定的有穷自动机一个确定的有穷自动机一个确定的有穷自动机(DFA)M是一个五元式:是一个五元式:M=(S, , , s0, F)其中其中S是一个有限集,它的每个元素称为一个状态。是一个有限集,它的

10、每个元素称为一个状态。是一个有穷字母表,它的每个元素称为一个输入字是一个有穷字母表,它的每个元素称为一个输入字符符是一个从是一个从S至至S的的单值映射单值映射。(s,a)=s意味着:当意味着:当现行状态为现行状态为s、输入字符为、输入字符为a时,将转换到下一个状态时,将转换到下一个状态s。我们称我们称s为为s的一个后继状态。的一个后继状态。s0S,是唯一的初态。,是唯一的初态。F S,是一个终态集(可空),是一个终态集(可空) 确定的有穷自动机确定的有穷自动机DFA M=(S,U,V,Q,a,b,S,Q)其中)其中f定义为:定义为:(S,a)=U(V,a)=U(S,b)=V(V,b)=Q(U,

11、a)=Q(Q,a)=Q(U,b)=V(Q,b)=QabSUVUQVVUQQQQ字符字符状态状态bSUVQaaaba,bb确定的有穷自动机确定的有穷自动机DFA接受的字符串接受的字符串对于对于*中的任何字符串中的任何字符串t,若存在一条从初态结到某一终态结的,若存在一条从初态结到某一终态结的道路,且这条路上所有弧的标记符连接成的字符串等于道路,且这条路上所有弧的标记符连接成的字符串等于t,则称,则称t可为可为DFA M所接收,所接收,若若M的初态结同时又是终态结,则的初态结同时又是终态结,则空字空字可为可为M所识别。所识别。*上的符号串上的符号串t被被M接受接受若若t *, (S,t)=P,其中

12、,其中S为为 M的开始状态,的开始状态,P Z,Z为终态为终态集。则称集。则称t为为DFA M所接受(识别)。所接受(识别)。*上的符号串上的符号串t,(我们将它表示成,(我们将它表示成t1tx的形式,其中的形式,其中t1,tx *)在)在DFA M上上运行的定义为:的定义为: (Q, t1tx)= (Q, t1),tx) 其中其中QS确定的有穷自动机确定的有穷自动机例:证明例:证明t=baab被例中的被例中的DFA所接受。所接受。 (S,baab)= ( (S,b),aab)= (V,aab)= ( (V,a),ab)= (U,ab)= (f(U,a),b)= (Q,b)=QQ属于终态。属于

13、终态。DFA M=(S,U,V,Q,a,b,S,Q)其中)其中定义为:定义为:(S,a)=U(V,a)=U(S,b)=V(V,b)=Q(U,a)=Q(Q,a)=Q(U,b)=V(Q,b)=Q非确定的有穷自动机非确定的有穷自动机一个非确定的有穷自动机一个非确定的有穷自动机(NFA)M是一个五元式:是一个五元式:M=(S, , , S0, F)其中其中S是一个有限集,它的每个元素称为一个状态。是一个有限集,它的每个元素称为一个状态。是一个有穷字母表,它的每个元素称为一个输入字是一个有穷字母表,它的每个元素称为一个输入字符符是一个从是一个从S*至至S子集的单值映射。即:子集的单值映射。即:: S*

14、2SS0 S,是一个,是一个非空的初态集非空的初态集F S,是一个终态集(可空),是一个终态集(可空) 非确定的有穷自动机例子非确定的有穷自动机例子NFA N=(S,P,Z,0,1,S,P,Z)其中)其中(S,0)=P(S,1)=S,Z(P,1)=Z(Z,0)=P(Z,1)=PSPZ00,111101SPS,Z0PZ0ZPP1简化为01SPS,Z0P.Z0ZPP1非确定的有穷自动机非确定的有穷自动机对于对于*中任何字中任何字,若存在一条从某一初态结点到某,若存在一条从某一初态结点到某一个终态结点的通路,且这条通路上所有弧的标记字一个终态结点的通路,且这条通路上所有弧的标记字依序连接成的字依序连

15、接成的字(忽略那些标记为(忽略那些标记为的弧)的弧)等于等于,则,则称称可为可为NFA M所识别(读出或接受)。所识别(读出或接受)。若若M的某些结点既是初态结点又是终态结点,或存在的某些结点既是初态结点又是终态结点,或存在一条从某一初态结点到某一终态结点的一条从某一初态结点到某一终态结点的通路,那么通路,那么空字空字可为可为M所识别。所识别。 NFANFA的确定化的确定化NFANFA的确定化的确定化显然,显然,DFA是是NFA的特例,但是对于每个的特例,但是对于每个NFA M都存都存在一个在一个DFA M,使,使L(M)=L(M)。 定义对状态集合定义对状态集合I的几个有关运算:的几个有关运

16、算:1 状态集合状态集合I的的 -闭包,表示为闭包,表示为 -closure(I),定义为一,定义为一状态集,是状态集状态集,是状态集I中的任何状态中的任何状态s经任意条经任意条 弧而能到弧而能到达的状态的集合。达的状态的集合。状态集合状态集合I的任何状态的任何状态s都属于都属于 -closure(I)。2 状态集合状态集合I的的a弧转换,表示为弧转换,表示为move(I,a)定义为状态定义为状态集合集合J,其中,其中J是所有那些可从是所有那些可从I的某一状态经过一条的某一状态经过一条a弧而到达的状态的全体。弧而到达的状态的全体。定义定义Ia = -closure(move(I,a) - -闭

17、包的例子闭包的例子I=1, -closure(I)=1,2;I=5, -closure(I)=5,6,2;move(1,2,a)=5,3,4I=1,2, Ia= -closure(5,3,4)=2,3,4,5,6,7,8;12534687aa aNFANFA确定化的例子确定化的例子4f35621iaaaabbbbi,1,2i,1,21,2,31,2,31,2,31,2,31,2,41,2,41,2,3,5,6,f1,2,3,5,6,f1,2,41,2,41,2,31,2,3I Ib bI Ia a1,2,41,2,4SAB1,2,3,5,6,f1,2,3,5,6,fABCCA1,2,4,5,6

18、,f1,2,4,5,6,fD1,2,4,5,6,f1,2,4,5,6,fD1,2,3,5,6,f1,2,3,5,6,f1,2,4,6,f1,2,4,6,f1,2,3,6,f1,2,3,6,f1,2,4,5,6,f1,2,4,5,6,fCE1,2,4,6,f1,2,4,6,fEF1,2,3,6,f1,2,3,6,fFD1,2,3,6,f1,2,3,6,fF1,2,4,5,6,f1,2,4,5,6,fD1,2,3,5,6,f1,2,3,5,6,fC1,2,4,6,f1,2,4,6,fEBNFANFA的确定化的确定化aCDBAEFSbaaaaabbbbbabFS SA AA AB BC CB BA

19、Ab ba aB BC CD DD DC CE EF FD DE EF FF FD DC CE EDFADFA的最小化的最小化DFA的最小化(的最小化(DFA的化简)的化简) 一个有穷自动机一个有穷自动机通过消除多余状态和合并等价状态而转换成一个最小通过消除多余状态和合并等价状态而转换成一个最小的与之等价的有穷自动机。的与之等价的有穷自动机。最小状态最小状态DFA没有多余状态没有多余状态(死状态死状态)没有两个状态是互相等价(不可区别)没有两个状态是互相等价(不可区别)两个状态两个状态s和和t可区别:不满足可区别:不满足兼容性(一致性)兼容性(一致性)同是终态或同是非终态同是终态或同是非终态传

20、播性(蔓延性)传播性(蔓延性)从状态从状态s出发读入某个出发读入某个a a和和从状态从状态t出发出发读入某个读入某个a到达的状态等价。到达的状态等价。DFADFA的最小化的最小化算法的核心算法的核心把把M的状态集的状态集K分成不相交的子集。分成不相交的子集。结论结论接受接受L的最小状态有穷自动机不计同构是唯一的。的最小状态有穷自动机不计同构是唯一的。DFA M =(K,f, k0, kt),最小状态最小状态DFA M1.构造状态的初始划分构造状态的初始划分:终态终态kt 和非终态和非终态K- kt两组两组2.对对施施用传播性原则用传播性原则 构造新划分构造新划分new 3. 如如new =,则

21、令则令 final= 并继续步骤并继续步骤4,否则否则:=new重复重复2 4.为为final中的每一组选一代表,这些代表构成中的每一组选一代表,这些代表构成M的状态。若的状态。若k是是一代表且一代表且f(k,a)=t,令令r是是t组的组的代表,则代表,则M中有一转换中有一转换f(k,a)=r M 的开始状态是含有的开始状态是含有K0的那组的代表的那组的代表 M的终态是含有的终态是含有Kt的那组的的那组的代表代表 5.去掉去掉M中的死状态中的死状态.DFADFA的最小化的最小化初始划分:一个由终态组成,一初始划分:一个由终态组成,一个由非终态组成个由非终态组成P0=(1,2,3,4,5,6,7

22、)P0=(1,2,3,4,5,6,7)观察第一个子集,在读入观察第一个子集,在读入a a之后划分之后划分为为P1=(1,2,3,4,5,6,7)P1=(1,2,3,4,5,6,7)观察第二个子集,在读入观察第二个子集,在读入a a之后划分之后划分为为P1=(1,2,3,4,5,6,7)P1=(1,2,3,4,5,6,7)观察第四个子集,在读入观察第四个子集,在读入a a之后划分之后划分为为P1=(1,2,3,4,5,6,7)P1=(1,2,3,4,5,6,7)正则文法与有限自动机的等价性正则文法与有限自动机的等价性对于正则文法对于正则文法G和有限自动机和有限自动机M,如果,如果L(G)=L(M),则称则称G和和M是等价的。关于正则文法和有限自动机的是等价的。关于正则文法和有限自动机的等价问题,有以下结论:等价问题,有以下结论:对每一个右线性正则文法对每一个右线性正则文法G或左线性正则文法或左线性正则文法G,都存,都存在一个正则自动机在一个正则自动机(FA)M,使得,使得L(M)=L(G)。对每一个对每一个FA M,都存在一个右线性正则文法,都存在一个右线性正则文法GR和左线和左线性正则

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论