04-词法分析-备课.ppt
《04-词法分析-备课.ppt》由会员分享,可在线阅读,更多相关《04-词法分析-备课.ppt(135页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编译原理第四章第四章 词法分析词法分析主要内容主要内容n本章学习目标本章学习目标n4.1 4.1 词法分析程序的设计词法分析程序的设计n4.2 4.2 单词的描述工具单词的描述工具n4.3 4.3 有穷自动机有穷自动机n4.44.4正规式和有穷自动机的等价性正规式和有穷自动机的等价性n4.54.5正规文法和有穷自动机的等价性正规文法和有穷自动机的等价性n4.6 4.6 词法分析程序的自动生成器词法分析程序的自动生成器LEXLEXn小结本章小结本章n重点习题解析重点习题解析n作业作业n相关术语的回顾(英文版)相关术语的回顾(英文版)2一起交流 共同进步本章学习目标本章学习目标一学习目标一学习目标
2、理解词法分析程序的功能和有限自动机及其理解词法分析程序的功能和有限自动机及其化简方法;化简方法;掌握正规表达式与正规文法和理解状态转换掌握正规表达式与正规文法和理解状态转换图的实现;图的实现;了解词法分析器的自动产生。了解词法分析器的自动产生。二课程安排二课程安排n6学时学时3一起交流 共同进步本章重点本章重点n有穷自动机是构造词法分析程序的理论基础。n本章主要介绍词法分析程序的设计原理和构造方法,重点介绍有穷自动机的基本概念以及正规文法、正规表达式与有穷自动机之间的相互关系。4一起交流 共同进步4.1词法分析程序的设计词法分析程序的设计n实现词法分析(实现词法分析(lexicalanalys
3、is)的程序的程序n逐个读入源程序字符并按照构词规则切分成一系列逐个读入源程序字符并按照构词规则切分成一系列单词。单词是语言中具有独立意义的最小单位,包单词。单词是语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。括保留字、标识符、运算符、标点符号和常量等。n词法分析是编译过程中的一个阶段,在语法分析前词法分析是编译过程中的一个阶段,在语法分析前进行进行。也可以和语法分析结合在一起作为一遍,由。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析程序调用词法分析程序来获得当前单词供语法分析使用。语法分析使用。5一起交流 共同进步词
4、法分析程序和语法分析程序的关系词法分析程序和语法分析程序的关系源程序词法分析程序语法分析程序Tokenget token.6一起交流 共同进步词法分析程序的任务词法分析程序的任务主要任务:主要任务:n读源程序,产生单词符号读源程序,产生单词符号其他任务:其他任务:n滤掉空格,跳过注释、换行符滤掉空格,跳过注释、换行符n追踪换行标志,复制出错源程序,追踪换行标志,复制出错源程序,n宏展开,宏展开,7一起交流 共同进步词法分析分离的考虑词法分析分离的考虑词法分析从语法分析独立出来的原因:词法分析从语法分析独立出来的原因:n简化设计简化设计n改进编译效率改进编译效率n增加编译系统的可移植性增加编译系
5、统的可移植性8一起交流 共同进步常常遇到的术语Token单词单词,词标,符号词标,符号lexeme词素,词位词素,词位pattern模式,式样模式,式样9一起交流 共同进步 帮助理解术语 In general,there is a set of strings in the input for which the same token is produced as output.This set of strings is described by a rule called a pattern associated with the token.The pattern is said to
6、match each string in the set.A lexeme is a sequence of characters in the source program that is matched by the pattern for a token.e.g.nConst pi=3.14159;中的pi是token“identifier”的lexeme,其pattern为letter followed by letters and/or digit.10一起交流 共同进步单词符号及输出单词的形式单词符号及输出单词的形式 关键字关键字 例如,例如,C语言中的语言中的if,else,wh
7、ile,do等等,这些字在语言中有固定的意义,这些字在语言中有固定的意义,一般不作为标识符使用。一般不作为标识符使用。标识符标识符 表示各种名字,如变量名、常表示各种名字,如变量名、常 量名、数组名和函数名等量名、数组名和函数名等。语言的语言的单词符号单词符号是指语言中具有独立是指语言中具有独立 意义的最小语法单位意义的最小语法单位。单词符号及输出单词的形式单词符号及输出单词的形式 常数常数 各种类型的常数,如整型常数各种类型的常数,如整型常数 125、实型常数、实型常数0.718、布尔型常数、布尔型常数TRUE 等等。运算符运算符 如、如、*、/、等。、等。分界符分界符 如如,、;、(、)等
8、。,、;、(、)等。单词符号及输出单词的形式单词符号及输出单词的形式 词词法法分分析析程程序序所所输输出出的的单单词词符符号号通常表示成如下的二元式:通常表示成如下的二元式:(单词种别,单词自身的值)(单词种别,单词自身的值)单词符号及输出单词的形式单词符号及输出单词的形式 单词种别单词种别 单词种别表示单词的种类,它是单词种别表示单词的种类,它是语法分析需要的信息。语法分析需要的信息。为处理方便为处理方便通常让每种单词对应通常让每种单词对应一个整数码一个整数码。单词符号及输出单词的形式单词符号及输出单词的形式 常数常数:可统归为一种,也可按类型可统归为一种,也可按类型 (整型、实型、布尔型等
9、)分种(整型、实型、布尔型等)分种。基本字基本字:可将其全体视为一种,也可可将其全体视为一种,也可 以一字一种。以一字一种。标识符标识符:一般统归为一种。一般统归为一种。运算符和界符运算符和界符:可采用一符一种的分法,可采用一符一种的分法,也可以统归为一种。也可以统归为一种。单词符号及输出单词的形式单词符号及输出单词的形式 单词自身的值单词自身的值 一个种别只含一个单词符号一个种别只含一个单词符号 一个种别含有多个单词符号一个种别含有多个单词符号 (1)对于标识符其自身值是标识符对于标识符其自身值是标识符自自 身的字符串;身的字符串;(2)常数自身值是常数本身的二进制常数自身值是常数本身的二进
10、制 数值。数值。单词符号及输出单词的形式单词符号及输出单词的形式 (3)用指向某类表格一个特定项目指用指向某类表格一个特定项目指 针值来区分同类中不同的单词。针值来区分同类中不同的单词。例如例如,对于标识符用它在符号表的入对于标识符用它在符号表的入口指针作为它自身值口指针作为它自身值;常数用它在常常数用它在常数表的入口指针作为它自身的值。数表的入口指针作为它自身的值。单词符号及输出单词的形式单词符号及输出单词的形式 常数自身的值用常数本身的值常数自身的值用常数本身的值(转变成转变成 标准二进制形式标准二进制形式)表示;表示;例子例子:if (a1)b=100;假定假定:基本字、运算符和界符都是
11、一符一种;基本字、运算符和界符都是一符一种;标识符自身的值用自身的字符串表示;标识符自身的值用自身的字符串表示;18一起交流 共同进步单词符号及输出单词的形式单词符号及输出单词的形式 假设:关键字关键字if种别编码为种别编码为1;标识符的种别编码为整数标识符的种别编码为整数10;常数的种别编码为整数常数的种别编码为整数11;赋值号的种别编码为赋值号的种别编码为4;大于号的种别编码为大于号的种别编码为23;分号的种别编码为分号的种别编码为26;左括号的种别编码为左括号的种别编码为29;右括号的种别编码为右括号的种别编码为30;则程序段;则程序段:19一起交流 共同进步单词符号及输出单词的形式单词
12、符号及输出单词的形式 if (a1)b=100;在经在经词法分析程序扫词法分析程序扫 描后描后,它所输出的单词符号串是:,它所输出的单词符号串是:(1,)基本字if(29,)左括号((10,a)标识符a(23,)大于号(11,1)常数 1(30,)右括号)(10,b)标识符b(4,)赋值号=(11,100)常数 100(26,)分号 ;4.2单词的描述工具单词的描述工具n程序设计语言中的单词是基本语法成分。程序设计语言中的单词是基本语法成分。n单词符号的语法可以用有效的工具加以描单词符号的语法可以用有效的工具加以描述,并且基于这类描述工具,实现词法分述,并且基于这类描述工具,实现词法分析程序的
13、自动构造。析程序的自动构造。n程序设计语言的单词的语法都能用程序设计语言的单词的语法都能用正规文正规文法和正规式法和正规式描述。描述。21一起交流 共同进步正规文法正规文法3 3型文法:型文法:任一产生式任一产生式的形式都为的形式都为AaBAaB或或AaAa,其中,其中AVAVN N ,BVBVN N ,a Va VT T*单词符号的两种定义方式:单词符号的两种定义方式:n正规文法,以标识符为例正规文法,以标识符为例:n Il|Il|Id 或 n Il|lTn Tl|d|lT|dT 其中,l代表az中任一字母;d代表09中任一数字n正规式,以标识符为例正规式,以标识符为例:n l(l|d)*2
14、2一起交流 共同进步正规式正规式正规式也称正则表达式正规式也称正则表达式,正规表达式正规表达式(regularexpression)是说明单词的是说明单词的模式模式(pattern)的一种重要的表示法(记的一种重要的表示法(记号),是定义正规集的号),是定义正规集的数学工具。我们数学工具。我们用以描述单词符号。下面是正规式和它用以描述单词符号。下面是正规式和它所表示的正规集的递归定义。所表示的正规集的递归定义。23一起交流 共同进步n定义(正规式和它所表示的正规集):定义(正规式和它所表示的正规集):设字母表为设字母表为,辅助字母表,辅助字母表=,。n1.和和 都是都是 上的正规式,它们所表示
15、的正上的正规式,它们所表示的正规集分别为规集分别为 和和;正规式正规式24一起交流 共同进步2.任何任何a ,a是是 上的一个正规式,它所表上的一个正规式,它所表示的正规集为示的正规集为a;3.假定假定e1和和e2都是都是 上的正规式,它们所表示上的正规式,它们所表示的正规集分别为的正规集分别为L(e1)和和L(e2),那么,那么,(e1),e1 e2,e1 e2,e1 也都是正规式也都是正规式,它它们所表示的正规集分别为们所表示的正规集分别为L(e1),L(e1)L(e2),L(e1)L(e2)和和(L(e1)。4.仅由有限次使用上述三步骤而定义的表达仅由有限次使用上述三步骤而定义的表达式才
16、是式才是 上的正规式,仅由这些正规式所表上的正规式,仅由这些正规式所表示的集合才是示的集合才是 上的正规集。上的正规集。正规式正规式25一起交流 共同进步reviewRegularexpressionsonthealphabet aredefinedbythefollowingrecursiverules:1)Everysymbolof isaregularexpression2)and and f f isaregularexpression3)ifr1andr2areregularexpressions,soare(r1)r1r2r1|r2r1*4)Nothingelseisaregula
17、rexpression.=0,1,2,3,4,5,6,7,8,9(1|2|3|4|5|6|7|8|9|0)*isaregularexpression(1|2|3|4|.8|9|0)(1|2|3.|8|9|0)*isaregularexpression(1|2|3.|8|9|0)+26一起交流 共同进步正规式中的三种运算符正规式中的三种运算符n“”读为读为“或或”(也有使用也有使用“+”代替代替“”的);的);n“”读为读为“连接连接”;n“”读为读为“闭包闭包”(即,任意有限次的自重(即,任意有限次的自重复连接)。复连接)。在不致混淆时,括号可省去,但规定算符的优先在不致混淆时,括号可省去,但
18、规定算符的优先顺序为顺序为“”、“”、“”。连接符。连接符“”一般可省略不写。一般可省略不写。“”、“”和和“”都是左结合的。都是左结合的。27一起交流 共同进步正规式和正规集正规式和正规集 例例1 设有字母表设有字母表=a,b,根据正规式与,根据正规式与 正规集的定义,则有:正规集的定义,则有:1.a 和和 b是正规式,相应正规集为是正规式,相应正规集为2.a|b 是正规式,相应正规集为是正规式,相应正规集为3.ab 是正规式,相应正规集为是正规式,相应正规集为L(a)=a,L(b)=b L(a|b)=L(a)L(b)=a,bL(ab)=L(a)L(b)=ab=ab正规式和正规集正规式和正规
19、集4.(a|b)*是正规式,相应正规集为是正规式,相应正规集为 例如,例如,a,b*的子集的子集 an bn|n1 就不是就不是一个正规集,一个正规集,不能用正规式来描述,也不不能用正规式来描述,也不能用正规文法来描述,只能用上下文无关能用正规文法来描述,只能用上下文无关法来描述。法来描述。需要指出的是,对需要指出的是,对 a,b*的任一子集不的任一子集不能认为是一个正规集。能认为是一个正规集。L(a|b)*)=(L(a|b)*=a,b*=,a,b,aa,ab,ba,bb,5.ba a*是正规式,相应的正规集为是正规式,相应的正规集为正规式和正规集正规式和正规集L(ba a*)=L(b)L(a
20、 a*)=b,ba,baa,baaa,6.(a|b)*(aa|bb)(a|b)*是正规式,相是正规式,相应正规集为应正规集为即上所有含两个相继a或两个相继b组成的串。L(a|b)*(aa|bb)(a|b)*)=L(a|b)*)L(aa|bb)L(a|b)*)a,b*aa,bba,b*30一起交流 共同进步正规式和正规集正规式和正规集 例例2 设设=a,b,c,则则 aa*bb*cc*是是上的一上的一个正规式个正规式,它所表示的正规集:它所表示的正规集:L=abc,aabc,abbc,abcc,aaabc,=ambnck|m,n,k1a+b+c+正规式和正规集正规式和正规集 例例3 设程序语言字
21、母表是键盘字符集合,设程序语言字母表是键盘字符集合,则程序语言部分单词符号可用如下正规式则程序语言部分单词符号可用如下正规式定义:定义:关键字 if|else|while|do标识符 l(l|d)*l代表az中任一字母整常数 dd*d代表09中任一数字关系运算符 =例子例子4.2令令=a,b,上的正规式和相应的正规集的上的正规式和相应的正规集的例子有:例子有:正规式正规式正规集正规集aaa ba,babab(a b)(a b)aa,ab,ba,bba ,a,a,任意个任意个a的串的串33一起交流 共同进步正规式正规式正规集正规集(a b),a,b,aa,ab所有由所有由a和和b组成的串组成的串
22、(a b)(aa bb)(a b)上所有含有两个相继的上所有含有两个相继的a或两个相继的或两个相继的b组成组成的串的串34一起交流 共同进步例例4.1令令=l,d,则则 上的正规式上的正规式r=l(l d)定义的正规集定义的正规集为为:l,ll,ld,ldd,其中其中l代表字母代表字母,d代表数字代表数字,正规式正规式即是即是字母字母(字母字母|数字数字),它表示的正规集中的它表示的正规集中的每个元素的模式是每个元素的模式是“字母打头的字母数字串字母打头的字母数字串”,就是就是Pascal和和多数程序设计语言允许的标识符的词法规则多数程序设计语言允许的标识符的词法规则.例例4.3=d,e,+,
23、-,则则 上的正规式上的正规式d(dd )(e(+-)dd)表表示的是无符号数的集合。其中示的是无符号数的集合。其中d为为09的数字。的数字。程序设计语言的单词都能用正规式程序设计语言的单词都能用正规式 来定义来定义.例子讨论下面两个例子例子讨论下面两个例子35一起交流 共同进步n若两个正规式若两个正规式e1和和e2所表示的正规集相同所表示的正规集相同,则则说说e1和和e2等价等价,写作写作e1=e2。n例如:例如:e1=(a b),e2=b an又如:又如:e1=b(ab),e2=(ba)be1=(a b),e2=(a b)正规式等价正规式等价36一起交流 共同进步n设设r,s,t为正规式,
24、正规式服从的代数规律为正规式,正规式服从的代数规律:n1.r s=s r“或或”服从交换律服从交换律n2.r(s t)=(r s)t“或或”的可结合律的可结合律n3.(rs)t=r(st)“连接连接”的可结合律的可结合律n4.r(s t)=rs rt(s t)r=sr tr分配律分配律n5.r=r,r=r 是是“连接连接”的恒等元的恒等元素素n6.r r=rr=r rr“或或”的抽取律的抽取律37一起交流 共同进步正规式正规式正规文法正规文法对对 上的正规式上的正规式r,存在一个存在一个RG=(VN,VT,P,S):L(G)=L(r)初始,初始,VT=,S VN,生成正规产生式生成正规产生式S
25、r(R1)对形如对形如Ar1r2的的正规产生式:正规产生式:Ar1BBr2B VN(R2)对形如对形如Ar r1的的正规产生式:正规产生式:ArBAr1BrBBr1B VN(R3)对形如对形如Ar1 r2的的正规产生式正规产生式:Ar1Ar2不断应用不断应用R做变换,直到每个产生式右端做变换,直到每个产生式右端都符合正规文法都符合正规文法的形式。的形式。38一起交流 共同进步例例4.4 r=a(a d)Sa(a d)SaAA(a d)A(a d)BAB(a d)BBGs:SaAAVT=a,dAaBVN=S,A,BAdBBaBBdBB39一起交流 共同进步正规文法正规文法正规式正规式对对G=(V
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 04 词法 分析 备课
限制150内