编译原理课程设计之词法分析.pptx
《编译原理课程设计之词法分析.pptx》由会员分享,可在线阅读,更多相关《编译原理课程设计之词法分析.pptx(152页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、mcy1第第2 2章章 词法分析词法分析2.1 词法分析器的作用2.2 正规表达式 2.3 有穷自动机2.4 从正规表达式到DFA 2.5 用代码实现有穷自动机2.6 利用lex自动生成词法分析程序单词的描述工具单词的描述工具单词单词的识别系统的识别系统设计和实现词法设计和实现词法分析程序分析程序作业作业课程设计课程设计1 1 第1页/共152页mcy22.1 2.1 词法分析器的作用词法分析器的作用 词法分析器词法分析器(词法分析程序词法分析程序)的任务的任务:从源代码中读取输入字符,产生单词序列(生成独立的有意义的逻辑单元称作单词(token),提交给语法分析使用。第2页/共152页mcy
2、3任务:逐个读入源程序字符并按照构词规则切分成一系列单词。单词是语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。识别出源程序中的单词;删除无用的空白字符及注释(空格、回车 等),这些信息仅增加了源程序的可读性,便于程序员阅读和维护程序,而对于语法分析是完全无用的。进行词法检查,能够检测出输入中不能形成源语言任何单词的错误字符串。第3页/共152页mcy4The big elephant ate the peanut.The big elephant ate the peanut.big 词法分析的结果:词法分析的结果:第4页/共152页mcy5 token表示的字符
3、串(串值或词义串值或词义):if,y,3,then,x,=,0 token的类型(词法)类型(词法):关键字(if,else,for,int,return)操作符(+,-,)数字 (3,45,)标示符(x,y,)词法分析器的输出:token序列第5页/共152页mcy6if y3 then x=0 LT,词法分析器词法分析器例如:C源代码:if y3 then x=0,词法分析器的输出是?第6页/共152页mcy7定义逻辑项token的数据类型:typedef struct union char*stringval;int numval;attribute;TokenRecord;TokenT
4、ype tokenval;Token类型类型Token词义词义第7页/共152页mcy8词法分析程序的函数接口:TokenRecord getToken(void);TokengetToken()源程序词法分析程序语法分析程序符号表第8页/共152页mcy9第第2 2章章 词法分析词法分析2.1 词法分析器的作用2.2 正规表达式 2.3 有穷自动机2.4 从正规表达式到DFA 2.5 用代码实现有穷自动机2.6 利用lex自动生成词法分析程序记号的描述工具记号的描述工具记号的识别系统记号的识别系统设计和实现词法设计和实现词法分析程序分析程序作业作业课程设计课程设计1 1 第9页/共152页m
5、cy10正规表达式的引入:正规表达式的引入:对自动生成词法分析程序而言,正规表达 式也是非常有用的工具。所谓正规表达式就是用特定的运算符及运算对象按某种规则构造的表达式。例如:c-语言的词法。正规表达式用来描述单词结构(定义单词)。第10页/共152页mcy11正规表达式的定义正规表达式的扩展2.22.2正规表达式正规表达式 单词的描述工具单词的描述工具第11页/共152页mcy12字母表(符号表、符号集)字母表(符号表、符号集)由若干元素(符号、字母)组成的有限非空集合。不同的语言可以有不同的字母表,例如汉语的字母表中包括汉字、数字及标点符号等。第12页/共152页mcy13 符号串符号串
6、由字母表中的符号组成的任何有穷序列称为符号串:例如00 11 10 是字母表 =0,1上的符号串。字母表A=a,b,c上的符号串有:a,b,c,ab,aaca。在符号串中,符号的顺序是很重要的,符号串ab就不同于ba,abca和aabc也不同。第13页/共152页mcy14符号串的长度符号串的长度 如果某符号串x x中有m m个符号,则称其长度为m m,表示为x x=m=m,如001110001110的长度是6 6。空符号串空符号串,即不包含任何符号的符号串,用表示,其长度为0 0,即=0=0。第14页/共152页mcy15符号串的连接:设x和y是符号串,它们的连接xy是把y的符号写在x的符号
7、之后得到的符号串。例如 x=ST,y=abu,则它们的连接 xy=STabu,x=2,y=3,xy=5由于的含义,显然有x=x=x。符号串的方幂:符号串自身连接n次得到的符号串xn 定义为 xxxx;n个x x1=x,x2=xx且x0=第15页/共152页mcy16例;若x=ab x=ab 则:x x0 0=x x1 1=ab=ab x x2 2=abab=abab x x3 3=ababab=ababab x xn n=xx=xxn-1 n-1=x=xn-1n-1x (n0)x (n0)第16页/共152页mcy17符号串集合符号串集合:若集合A A中所有元素都是某字母表 上的符号串,则称A
8、 A为字母表 上的符号串集合。符号串集合的和与积符号串集合的和与积设A A,B B为两个符号串集合,定义和 A A+B(+B(或A A B)B)=w|w=w|w A A,或w w BB积AB=xy|xAB=xy|x A,yA,y BB第17页/共152页mcy18v若用表示空集,则有:A+=+A=A A=A=A=A =Av 例:若集合A=ab,cde ,集合B=B=0,1,则AB=ab1,ab0,cde0,cde1;第18页/共152页mcy19的闭包:用*表示 上的一切符号串(包括)组成的集合,*称为的闭包。例如:=a,b=a,b*=,a,b,aa,ab,ba,bb,aaa,aab,=,a,
9、b,aa,ab,ba,bb,aaa,aab,的正闭包:上除外的所有符号串组成的集合记为+,+称为的正闭包。例如:=a,b=a,b+=a,b,aa,ab,ba,bb,aaa,aab,=a,b,aa,ab,ba,bb,aaa,aab,第19页/共152页mcy20正规表达式的定义正规表达式的扩展2.22.2正规表达式正规表达式第20页/共152页mcy21正规表达式(也称正则表达式)就是用特定的运算符及运算对象按某种规则构造的表达式。每个正规表达式代表一个字符串的集合,我们把其称为正规集。语言(Language)是字符串组成的集合,我们也可以把正规表达式表示的正规集称为该正规表达式表示的语言。第2
10、1页/共152页mcy22正规表达式和它所表示的正规集(字符串的集合)的递归定义如下:设有字母表为,辅助字母表=,|,.,*,(,)第22页/共152页mcy23(1)和是上的正规式,它们所表示的正规集分别为和;(2)若a,则a是上的正规式,它所表示的正规集为a;(3)若r和s都是上的正规式,且它们所表示的正规集分别为L(r)和L(s),那么:第23页/共152页mcy24 r|s 是正规式,表示的正规集为 L(r|s)=L(r)L(s);rs 是正规式,表示的正规集为 L(rs)=L(r)L(s);r*是正规式,表示的正规集为(L(r)*。(r)是正规式,表示的正规集为L(r);“.”运算符
11、常省略第24页/共152页mcy25(4)仅由有限次使用上述三步骤而定义的表达式才是上的正规式,仅由这些正规式所表示的符号串集合才是上的正规集。注:算符的优先级为先“*”,再“.”最后“|”,都是左结合的,它们满足结合律。举例:C-语言的词法第25页/共152页mcy26例1,令=a,b,上的正规式和相应的正规集的例子:正规式 正规集aaa bab(a b)(a b)a a,babaa,ab,ba,bb ,a,aa,任意个a的串(a b)a,b*即,a,b,aa,ab,ba,bb,第26页/共152页mcy27例2,正规式(a)|(b)*(c)它所表示的正规集为:根据运算符的优先级,上述正规式
12、可以表示成 a|b*ca|b*c所表示的正规集为:字符串a以及由零个或多个b后跟一个c 形成的字符串的集合或写成L(a|b*c)=a bnc|其中n是大于或等于0的整数第27页/共152页mcy28给定一个正规式给定一个正规式,它唯一确定一个正规集;反之不成立。即一个正规集可由它唯一确定一个正规集;反之不成立。即一个正规集可由多个不同的正规式表示。多个不同的正规式表示。aaaa a,aa,aaa,任意个a的串a|aaa|aa a,aa,aaa,任意个a的串例如:第28页/共152页mcy29若二正规式二正规式描述同一正规集,则称二式等价等价(相等)。判断下列正规表达式e e1 1和e e2 2
13、是否等价?e1=(a b),e2=b ae1=b(ab),e2=(ba)be1=(a b),e2=(a b)第29页/共152页mcy30正规表达式是表示模式的一种重要方法,每个模式匹配一个字符串集合(即正规集)。正规集是正规表达式所定义的语言。正规表达式可以作为字符串集合(即正规集)的名字。第30页/共152页mcy31正规表达式的定义正规表达式的扩展2.22.2正规表达式正规表达式第31页/共152页mcy32A1.r|s=s|r A2.r|r=rA3.r|=rA4.(r|s)|t=r|(s|t)A5.(rs)t=r(st)A6.r(s|t)=rs|rtA7.(s|t)r=sr|trA8.
14、r=r=A9.r=r=rA10.r*=(|r)*=|rr*第32页/共152页mcy33正规表达式的定义正规表达式的扩展2.22.2正规表达式正规表达式第33页/共152页mcy341.一个或多个重复(+,*):假设r是正则表达式,r的重复是通过使用标准的闭包运算来描述,写作r*。它允许r被重复0次或更多次。用r+表示r 被重复1次或更多次。因此有:(0|1)+=(0|1)(0|1)*第34页/共152页mcy352.任意字符(.):句点“.”表示可以匹配除换行符之外的任意单个符。利用这个字符就可为所有包含至少一个b 的串写出一个正则表达式,如下所示:.*b.*3.引号“”,引号中的字符串表示
15、文本字符串本身。例如:“.”表示要匹配.字符本身。第35页/共152页mcy364.字符范围:表示法a|b|z 表示所有小写字母;0|1|9表示0到9间的所有数字;常见的表示法是利用方括号和一个连字符,如a-z是指所有小写字母,0-9则指数字。第二种表示法还可用作表示单个的解,a|b|c可写成abc,它还可用于多个范围,如 a-z A-Z 代表所有的大小写字母。第36页/共152页mcy375.正规表达式的名字为较长的正则表达式提供一个简化的名字很有用处,这样就不用每次使用正则表达式书写较长的表达式本身了;如要写一个正则表达式:a-z A-Z (a-z A-Z 0-9)它定义的正规集为:以字母
16、打头后跟若干字母或数字组成的符号串的集合。第37页/共152页mcy38上述正规式定义的是程序设计语言标识符的词法规则,通过为正规表达式提供一个简化的名字,上述正规表达式可写作:letter=a-z A-Z digit=0-9 r=letter(letter digit)第38页/共152页mcy39例:写出正则表达式signedNatnat=0-9+signedNat=nat|+nat|-nat对应的正规集?第39页/共152页mcy406.可选的子表达式(?):如果在特定的串中包括既可能出现又可能不出现的可选部分。例如,nat=0-9+signedNat=nat|+nat|-nat我们可以
17、引入问号?来表示r 匹配的串是可选的;上面的例子可写成:nat=0-9+signedNat=(+|-)?nat第40页/共152页mcy41正规表达式的定义正规表达式的扩展2.22.2正规表达式正规表达式第41页/共152页mcy42每一种程序设计语言都有自己的字符集(字母表)。语言中的各个单词或是 上的单个字符(如运算符、分隔符等),或是 上的字符串(如常数、表示符和关键字等)。程序设计语言的单词都能用正规式来定义.由正规式描述的单词类也称为正规集。例如:C-语言的词法第42页/共152页mcy431.1.数:nat=0-9+signedNat=(+|-)?natnumber=signedN
18、at(“.”nat)?(“E”signedNat)?例如:3,3.5,2.71E-22.2.保留字:reserved=else|if|int|return|void|while 第43页/共152页mcy443.3.标示符:letter=a-zA-Zdigit=0-9identifier=letter(letter|digit)*第44页/共152页mcy45 包含单词词法描述的语言手册是编译器的程序员最常见的。在下面的示例中,被匹配的串是汉语描述,其任务是将描述翻译为正则表达式。第45页/共152页mcy461)在字母表 =a,b,c中,考虑在这个字母表上的仅包括一个b 的所有串的集合,这个
19、集合所对应的正则表达式为:串串b、abc、abaca、baaaac、ccbaca和和ccccccb等都是满要求的符号串。等都是满要求的符号串。(a|c)*b(a|c)*第46页/共152页mcy472)在字母表 =a,b,c中,如果字符串集合是包括最多一个b 的所有串,则这个集合的正则表达式为:仅包括一个b 的串的集合对应的正则表达式 (a|c)*b(a|c)*不包括b 的串的集合对应的正则表达式 (a|c)*故所求表达式为:(a|c)*|(a|c)*b(a|c)*或者为:(a|c)*(b|)(a|c)*第47页/共152页mcy483)在字母表 =a,b上串S的集合是由一个b及在其前后有相同
20、数目的a 组成:S=b,aba,aabaa,aaabaaa,.=anban|n0 正则表达式并不能描述这个集合,其原因在于重复运算只有闭包运算*一种,它允许有任意次的重复。因此如要写出表达式a*ba*,就不能保证在b 前后的a 的数量是否相等了。第48页/共152页mcy49并非用简单术语描述的所有串都可由 正则表达式产生,因此为了与其他集合相区分,作为正则表达式描述的串集合称作正规集(regular set)。非正规集偶尔也作为串出现在需要由扫描程序识别的程序设计语言中。第49页/共152页mcy50第第2 2章章 词法分析词法分析2.1 词法分析器的作用2.2 正规表达式 2.3 有穷自动
21、机2.4 从正规表达式到DFA 2.5 用代码实现有穷自动机2.6 利用lex自动生成词法分析程序记号的描述工具记号的描述工具记号的识别系统记号的识别系统设计和实现词法设计和实现词法分析程序分析程序作业作业课程设计课程设计1 1 第50页/共152页mcy51DFA)的定义NFA)2.32.3有穷自动机有穷自动机第51页/共152页mcy52有穷自动机(也称有限自动机)作为一种数学模型,它能准确地识别正规集,即识别正规式所表示的集合。有穷自动机是设计和实现词法分析器的有效工具,其直观图是一种状态转换图。引入有穷自动机理论,也是为词法分析程序的自动构造寻找方法和工具。第52页/共152页mcy5
22、3有穷自动机有穷自动机(Finite Automata,or finite-state machines)有穷自动机分为两类:确定的有穷自动机(Deterministic Finite Automata)。不确定的有穷自动机(Nondeterministic Finite Automata)。第53页/共152页mcy54在程序设计语言中,用正规式定义的标示符如下:letter=a-zA-Zdigit=0-9identifier=letter(letter|digit)*该正规式匹配的标示符是以一个字母开头且其后为任意字母、数字序列形成的字符串。第54页/共152页mcy5512letterl
23、etterdigit标示符的有穷自动机变量xtemp xtemp 识别为标示符的过程可表示为:识别为标示符的过程可表示为:1x2t2e2m2p2 标示符模式的识别过程:第55页/共152页mcy56DFA)的定义NFA)2.32.3有穷自动机有穷自动机第56页/共152页mcy57DFADFA)的定义的定义DFA(DFA(确定性有穷自动机)有五个部分组成:(1)(1)有限个输入符号组成的字母表,记作;(2)(2)有限个状态的集合,记作S S;(3)(3)转换函数T T T:T:S S S S 即:T(s,c)=sT(s,c)=s 其中s s S S,s s S S,c c上述转换函数表示若当前
24、状态为s s,且当前识别的输入符号为c c,识别c c后进入的下一个状态为s s ;第57页/共152页mcy58(4)(4)初始状态s s0 0 S S;指示识别符号串的开始状态;(5)(5)若干个识别符号串的接受状态(或称为终止状 态)的集合 A A S S;(由上述五个要素组成的五元式M=(S;M=(S;T;s;T;s0 0;A);A)称为一个确定的有限自动机(DFADFA:D Deterministic eterministic F Finite inite A Automatautomata)。第58页/共152页mcy59DFA MDFA M=(ss1 1,s,s2 2,s,s3
25、3,s,s4 4,a,b,T,s,a,b,T,s1 1,s,s4 4)其中转换函数T T定义为:T(s1,a)=s2 T(s3,a)=s2 T(s1,b)=s3 T(s3,b)=s4T(s2,a)=s4 T(s4,a)=s4T(s2,b)=s3 T(s4,b)=s4一个一个DFA DFA 的例子:的例子:有限个状有限个状态的集合态的集合s字母表字母表 初始状态初始状态接受状接受状态的集合态的集合A A第59页/共152页mcy60状态转换图状态转换图一个DFADFA可以表示成一个状态图(或称状态转换图)。状态转换图是由一组矢线连结的有限个结点所组成的有向图。例如:s0 0s2 20s1 110
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 课程设计 词法 分析
限制150内