第三章词法分析及有穷自动机.ppt
《第三章词法分析及有穷自动机.ppt》由会员分享,可在线阅读,更多相关《第三章词法分析及有穷自动机.ppt(127页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章词法分析及有穷自动机现在学习的是第1页,共127页第三章词法分析及有穷自动机 主主 要要 内内 容容 词法分析程序的设计过程。词法分析程序的设计过程。描述单词的文法:正规文法和描述单词的文法:正规文法和 正规式及它们之间的转正规式及它们之间的转换。换。单词识别机制(有穷自动机)。单词识别机制(有穷自动机)。正规式,正规文法和有穷自动机三者之间相互转换。正规式,正规文法和有穷自动机三者之间相互转换。现在学习的是第2页,共127页1.词法分析程序的任务词法分析程序的任务一、词法分析程序的任务及处理方式一、词法分析程序的任务及处理方式 1.词法分析程序的任务词法分析程序的任务主要任务:从左至右
2、逐个字符地对源程序进行扫描,产生一个个单词序列,用以语法分析。词法分析程序(扫描程序):执行词法分析的程序。现在学习的是第3页,共127页2.词法分析程序的处理方式词法分析程序的处理方式词法分析程序与语法分析程序接口方式有两种:v第一种方式:将词法分析作为单独一遍扫描,即在语法分析之前,实现源程序的词法分析工作。其输出(单词串)形成一个中间文件(内部形式的源程序表),然后移交给语法分析程序。现在学习的是第4页,共127页v第二种方式:将词法分析程序编写成一个子程序,每当语法分析程序需要读一个新单词时,便去调用它。注:后一种方式比较好。因为不需要在内存中构造和保存中间文件。现在学习的是第5页,共
3、127页二、词法分析程序的二、词法分析程序的I/O 1.输入输入字符串表示的源程序 2.输出输出单词符号序列或单词符号。1)程序语言的单词符号程序语言的单词符号单词:指语言中具有独立意义的最小语法单位。语言中的单词符号:一般可归结为五种:v保留字(基本字):如if,for,and等个数确定v标识符:表示常量、变量、类型、过程等名称个数不确定v常数:如34,-0.37等个数不确定v运算符:如+,-,*,/,等个数确定v界线符:如逗号,分号,括号等个数确定现在学习的是第6页,共127页注:保留字,运算符,界线符可列表,供词法分析程序查询;保留字,运算符,界线符可列表,供词法分析程序查询;标识符和常
4、数可用正规文法或正规式描述,供词法分析程序识标识符和常数可用正规文法或正规式描述,供词法分析程序识别。别。2)输出的单词形式输出的单词形式v二元组:(单词的种别码,单词自身值)1o 单词的种别码:表示单词的种类单词的种别码:表示单词的种类v分类的原则:处理简单v分类的方法:使每一个单词对应一个整数码v分类的目的:最大限度地区别各个单词单词地分类法有多种:v一种一类v一字一类或一符一类现在学习的是第7页,共127页具体:具体:保留字:一字一种。如:if1then2。标识符:统归一种。常数:整数,实数,布尔v统为一种v或按类型分整数11实数12布尔13或全体一种现在学习的是第8页,共127页+29
5、:=17=21-14 18=22*15 23/16,1thenb:=10表示为一种一类的单词输出形式。现在学习的是第10页,共127页if a1 then b:=10词法分析器=(1,if )(字符串表示的源程序)(2,a ),(4,)(3,1 的二进制数)(1,then )(2,b )(4,:=)(3,10 的二进制数)现在学习的是第11页,共127页v例:采用一字一类或一符一类地分类技术,则保留字单词自身值可无,但事先构造一个保留字单词对照表,其值可在词表中查到。if a1 then b:=10词法分析器=(1,)字符串表示的源程序(10,a)(23,)(3,1的二进制数)(2,)(10,
6、b)(17,)(11,10 的二进制数)上面符号表示要查保留词表现在学习的是第12页,共127页表2.1保留字单词表单词类别码单词类别码.If1+29Then2-14else3*15./16.23for19:=17.现在学习的是第13页,共127页2.词法分析程序的设计过程词法分析程序的设计过程一、词法分析程序的设计过程一、词法分析程序的设计过程v设计过程:v词法分析程序设计过程:词法分析程序设计过程:把有的单词(如:标识符和常数标识符和常数)用正规文法或正规式描述;将正规文法或正规式转换成等价的状态转换图(最小化的DFA图);根据状态转换图设计词法分析程序(状态转换图可视为词法分析程序的框图
7、)。转换规则转换规则分裂法分裂法子集法子集法状态转换图(DFA图)现在学习的是第14页,共127页二、用状态转换图设计词法分析程序二、用状态转换图设计词法分析程序1.词法分析程序的预处理词法分析程序在识别单词前,需要对输入到缓冲区的源程序进行预处理。预处理:删去无用的空格,跳格,回车和换行等编辑性字符;删去注释部分每次对一串定长(如120个字符)的输入字符进行预处理,并装入一个指定的扫描缓冲区中。现在学习的是第15页,共127页v扫描缓冲区是一个一分为二的区域,每一个区域可容纳120个字符,且相互交替使用。v搜索指针从单词起点开始搜索,如果遇到半区的边界但尚未达到单词的终点时,则可将后续的12
8、0个输入字符装进缓冲区的另一半中。现在学习的是第16页,共127页2.状态转换图状态转换图v状态转换图是为了识别正规文法或正规式而专门设计的有向图。他是有穷自动机的非形式化表示。v状态转换图的组成状态转换图的组成:1o 有限个状态结点有限个状态结点状态结点代表正规文法的非终结符(用单圈表示);开始状态结点:用双箭头指示;终止状态结点:用双圈表示。2o 弧线弧线弧上的标记弧上的标记x指明在射出弧的结点状态下可能出指明在射出弧的结点状态下可能出现的输入字符或字符类现的输入字符或字符类,即终结符。即终结符。(表示机器的识别表示机器的识别方向方向).大多数单词结构是用正规文法描述的大多数单词结构是用正
9、规文法描述的x现在学习的是第17页,共127页例:=|=|=+|-|*|/|.=;|,|(|)|.。3.由正规文法构造状态转换图由正规文法构造状态转换图1)左线性正规文法构造状态转换图左线性正规文法的一般形式:U=a|wa现在学习的是第18页,共127页左线性正规文法构造状态转换图的步骤如下:增加一个开始状态结点s(假定文法的词汇表中不含s);以每个非终结符为状态作结点;对于形如U=a的每一个规则,引一条从开始状态s到状态U的弧,弧上标记为a;对于形如U=wa的每一个规则,引一条从状态w到状态U的弧,弧上标记为a;以识别符号为终止状态。现在学习的是第19页,共127页例:设有正规文法GZ:Z=
10、U0|V1U=Z1|1V=Z0|0(描述的语言为L(G)=01,10)则状态转换图如下:以开始符号以开始符号Z 作终态作终态新增加开始新增加开始状态状态S现在学习的是第20页,共127页例:标识符的转换图:从开始状态出发到某一终止状态结点为止,所经过的路径上的符号串,称能为该状态转换图所接收(识别)的符号串。如:标识符x26为上述转换图识别,识别路径为现在学习的是第21页,共127页2)右线性正规文法构造状态转换图右线性正规文法U=a|aV构造状态转换图的步骤:增加一个终止状态结点z(假定文法的词汇表中不含z);以每个非终结符为状态作结点;v对于形如U=a的每一个规则,引一条从开始状态U到终止
11、状态z的弧,弧上标记为a;v对于形如U=aV的每一个规则,引一条从状态U到状态V的弧,弧上标记为a;以识别符号为开始状态。现在学习的是第22页,共127页根据状态转换图设计词法分析程序根据状态转换图设计词法分析程序状态转换图实际上是编写词法分析程序的框图根据状态转换图写出相应的词法分析程序的方法:1o对于每个状态构造一小段程序。对于每个状态构造一小段程序。功能:从输入串中读一个字符;判明读入字符与由此状态出发的哪条弧上的标记匹配,便转至相匹配的那条弧所指的状态;均不匹配时便失败(不能达到正常出口)现在学习的是第23页,共127页2o 再根据图形决定小段程序之间的调用。再根据图形决定小段程序之间
12、的调用。注:词法分析程序除了识别单词外,还可为语法程序提供更多的信息。因此,可在这些小段程序中加上一些语义处理(如对数值进行10=2等)例:设有关于单词的文法G=(VN,VT,P,N1)其中,VN=N1,N2,N3,N4,N5,N6,N7VT=d,e,f,P:N1=dN2|N3|eN5N2=dN2|N3|eN5|N3=dN4这里d表示数字(09);e10;f;表示空字符;N1表示无符号数,其一般形式为:ddddefddN4=dN4|eN5|N5=dN7|fN6N6=dN7N7=dN7|现在学习的是第24页,共127页v试构造识别此单词的词法分析程序1 根据右线性正规文法,画出状态转换图根据右线
13、性正规文法,画出状态转换图N1=3N2=34N2=34N3=345N4=3456N4=3456(达到出口),自上而下的推导过程。自上而下的推导过程。现在学习的是第25页,共127页2根据状态转换图写词法分析程序为每一个状态结点写一个过程或函数:对N1结点:ProcedurePN1BeginCh:=getchar();Ifch=”e”thenPN5Elseifch=”d”thenPN2Elseifch=”thenPN3ElseerrorEnd;现在学习的是第26页,共127页对N2结点:ProcedurePN2BeginCh:=getchar();Ifch=”e”thenPN5Elseifch=
14、”d”thenPN2Elseifch=”thenPN3Elsereturn;End;对N3,N4,N5,N6,N7结点分别写出程序段:现在学习的是第27页,共127页3 正规式与有穷自动机正规式与有穷自动机v为了进一步讨论词法分析程序的自动生成,需要将状态转换图的概念加以形式化;同时将由正规文法描述的单词由正规式描述,可利用有穷自动机生成词法分析程序。一、正规式与正规集一、正规式与正规集语言的单词结构不仅由正规文法描述,还可以由正规式描述。现在学习的是第28页,共127页例:=|此正规文法描述了一个语言的集合。定义在字母,数字上的以字母开头的符号串的集合。这个集合还可以用正规式描述:字母(字母
15、|数字)*。v正规式描述的字符串的集合称为正规集1正规式(也称正则式,正则表达式)和正规集的递归正规式(也称正则式,正则表达式)和正规集的递归定义定义设有字母表=a1,a2,an,那么(1),ai都是上的正规式,它们所描述的正规集分别为,ai;现在学习的是第29页,共127页(2)若e1和e2都是上的正规式,它们所描述的正规集L(e1)、L(e2),则:1o正规式的“或”(|)运算:e1|e2也是正规式,相应正规集为L(e1|e2)=L(e1)L(e2);2o正规式的“连接”(.)运算:e1e2也是正规式,相应正规集为L(e1e2)=L(e1)L(e2);3o正规式的“闭包”(*)运算:(e1
16、)*也是正规式,相应正规集为L(e1)*)=(L(e1)*;(3)仅由有限次使用(1),(2)定义的表达式才是上的正规式,由这些正规式所表示的字符集才是上的正规集。现在学习的是第30页,共127页例:设=a,b,则上的正规式和正规集有正规式正规集1o a和baL(a)=a和L(b)=bL(a)=L(a)L(a)L(a)=a=a,aa,.基本3 oa|bL(a|b)=L(a)L(b)=a,b4 oabL(ab)=L(a)L(b)=ab5 oa*L(a*)=(L(a)*=L(a)L(a)L(a).=a*=,a,aa,aaa,.复合6 oba*L(ba*)=L(b)L(a*)=b,ba,baa,ba
17、aa,7 oa|ba*L(a|ba*)=L(a)L(ba*)=a,b,ba,baa,8 o(a|b)*L(a|b)*)=(L(a|b)*=a,b*=,a,b,aa,ab,所有ab组成的串9 oa(a|b)*L(a(a|b)*)=L(a)(L(a)L(b)*=aa,b*10 o(a|b)*(aa|bb)(a|b)*L(a|b)*(aa|bb)(a|b)*)=a,b*aa,bba,b*012+123+2o现在学习的是第31页,共127页 注:注:.正规式仅由字母正规式仅由字母中的终结符号,通过或,连接和闭包三中的终结符号,通过或,连接和闭包三种运算组成的式子。种运算组成的式子。例:有字母表例:有字
18、母表=a,b,下面正规式,求正规集。,下面正规式,求正规集。ba*正规集:正规集:b开头后面跟开头后面跟0个或若干个个或若干个a。a(a|b)*正规集:正规集:a开头后面跟开头后面跟0个或个或a、b任意排列。任意排列。例:有字母表例:有字母表=a,b,下面用自然语言描述的正规集,下面用自然语言描述的正规集,求正规式求正规式(可能不唯一可能不唯一)。以以ab结尾的所有字符串。结尾的所有字符串。(a|b)*ab 包含偶数个包含偶数个b的所有字符串。的所有字符串。(bb)*只包含一个只包含一个a的所有字符串。的所有字符串。b*ab*不包含不包含ab子串的所有字符串。子串的所有字符串。b*a*以以a开
19、头开头b结尾的所有字符串。结尾的所有字符串。a(a|b)*b现在学习的是第32页,共127页正规式的性质(1)正规式的等价性定义:若正规式e1与e2描述的正规集相同,即L(e1)=L(e2),则e1与e2等价,记做e1=e2。(2)正规式的代数性质设r,s,t为正规式,正规式服从的代数规律有:1or|s=s|r“或”满足交换律2or|(s|t)=(r|s)|t“或”满足结合律3o(rs)t=r(st)“连接”满足结合律。“连接”不满足交换律4or(s|t)=rs|rt(s|t)r=sr|tr“连接”满足分配律5or=rr=r是“连接”的恒等元素现在学习的是第33页,共127页(3)正规式的恒等
20、式设A和B式正规式,有例:证明:A*=|AA*成立。证明:利用对应的正规集来证明:L(AA*|)=L(A)L(A*)UL()=L(A)L(A)*UL()=L(A)(L(A)UL(A)U(L(A).)UL()=L()U(L(A)U(L(A)U(L(A).)=(L(A)*)=L(A*)A*=AA*|例:设=d,e,+,-则上的正规式:d*(dd*|)(e(+|-|)dd*|)表示无符号数:2.12,3.6e-2等。表示无符号数的正规式,比表示无符号数的正规文法显得直观,简洁。表示无符号数的正规式,比表示无符号数的正规文法显得直观,简洁。1o(A*)*=A*2 oA|BA=(|B)A3 oA A*=
21、A*A;A=AA*4 oA*=|A A*;A*=(A|)*012312+现在学习的是第34页,共127页3正规文法与正规式的转换正规文法与正规式的转换关系:对任意一个正规文法存在定义同一语言的正规式反之:对于每一个正规式,存在一个生成同一语言的正规文法。两者之间具有等价的转换关系。有的语言容易用正规文法定义,有的语言则更容易用正规式定义转换:1o 正规式正规式-正规文法正规文法将上的一个正规式转换成正规文法G=(VN,VT,S,P):v首先:令VT=现在学习的是第35页,共127页v再确定产生式P和VN,其方法:对任何正规式r,选择非终结符S生成产生式S=r,并将S定义为G的识别符号。若r含有
22、正规式x,y,对形如A=xy(连接的变换)产生式,用A=xB,B=y两个产生式替换。其中B是新选择的非终结符。对已经转换成文法中的形如:A=x*y(闭包和连接的变换)的产生式,则重写为:A=xA注:若y是则,AxAA=yA对形如:A=x|y(或的变换)的产生式,重写为A=x,A=y不断利用上述规则作变换,直到每个产生式右部最多含有一个终结符为止。现在学习的是第36页,共127页例:将正规式R=a(a|d)*转换成相应的正规文法。解:令S是文法的识别符号,则首先形成:S=a(a|d)*然后形成:S=aA,A=(a|d)*(其中AVN)对于A=(a|d)*重写为:A=(a|d)AA=对于A=(a|
23、d)A重写成:A=aA,A=dA最后转换的等价正规文法G=(VN,VT,S,P)VT=a,dVN=S,AP:S=aAA=aA|dA|现在学习的是第37页,共127页2o正规文法正规文法正规式正规式基本是上述的逆过程。最后只剩下一个识别符号定义的产生式,且产生式的右部不含非终结符。其转换规则如下表:规则文法产生式正规式1A=xB,B=yA=xy2A=xA|yA=x*y3A=x,A=yA=x|y注:注:正规文法与正规式互相转换,关键式:正规文法与正规式互相转换,关键式:AxA|y A=x*y现在学习的是第38页,共127页例:正规文法Gs:S=aAS=aA=aAA=dAA=aA=d求正规式解:先有
24、:SaA|a规则3A=(aA|dA)|(a|d)规则3再将A的正则式变成:A=(a|d)A|(a|d)“或”分配律根据规则2变成:A=(a|d)*(a|d)再代入S的右部得:S=a(a|d)*(a|d)|a再利用正则式代数变换:S=a(a|d)*(a|d)|)S=a(a|d)*即:a(a|d)*为所求的正则式现在学习的是第39页,共127页简便转换方法是:(1)将正规文法中的每一个非终结符表示成关于它的一个正规方程,获得一个联立方程组.(2)依据求解规则:v若x=x|,写成方程x=x+(“|”用“+”表示);则解为x=*.v若x=x|,写成方程x=x+(“|”用“+”表示);则解为x=*.以及
25、正规式的分配律,交换律和结合律求关于文法识别符号的正规式方程组的解.此解就是关于文法识别符号S的一个正规式.例如,上例:先写出正规式方程组(方程组中用“+”代替“|”):S=aA|a写成:S=aA+a(1)A=aA|dA|a|d写成:A=aA+dA+a+d(2)将(2)式简化为:A=(a+d)A+(a+d)使用求解规则:A=(a|d)*(a|d)(3)将(3)的A代入(1)式:S=a(a|d)*(a|d)|a=a(a|d)*(a|d)|)a(a|d)*(a|d)|)=a(a|d)*即为所求的正规式。现在学习的是第40页,共127页 例:设有正规文法例:设有正规文法G:Z=0AA=0A|0BB=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 词法 分析 有穷 自动机
限制150内