编译原理第3章第1节词法分析、DFA、NFA及其转换.ppt
《编译原理第3章第1节词法分析、DFA、NFA及其转换.ppt》由会员分享,可在线阅读,更多相关《编译原理第3章第1节词法分析、DFA、NFA及其转换.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、源程序源程序目标程序目标程序词法分析词法分析语法分析语法分析语义分析语义分析中间代码生成中间代码生成代码优化代码优化目标代码生成目标代码生成表表格格管管理理错错误误检检测测第三章第三章 词法分析词法分析主要内容主要内容1.1.介绍词法分析的介绍词法分析的过程过程2.2.讨论词法分析器的讨论词法分析器的设计与实现设计与实现3.3.介绍实现词法分析器的主要工具:介绍实现词法分析器的主要工具:状态转换图状态转换图状态转换图状态转换图第三章第三章 词法分析词法分析3.1 3.1 词法分析器的任务词法分析器的任务v人们理解一篇文章(或程序)起码是先在人们理解一篇文章(或程序)起码是先在单词单词级别上思考
2、。级别上思考。v编译程序要分析和翻译源程序,也先要编译程序要分析和翻译源程序,也先要区分区分一个一个的一个一个的单词单词。v词法分析程序的词法分析程序的任务任务是:从左到右逐个字符对源程序扫描,产生一个是:从左到右逐个字符对源程序扫描,产生一个单词序列,把作为字符串的源程序改造为单词符号串的中间程序。单词序列,把作为字符串的源程序改造为单词符号串的中间程序。v词法分析程序又称词法分析程序又称词法分析器或扫描器词法分析器或扫描器。除了识别单词的基本任务外,词法分析还可以完成除了识别单词的基本任务外,词法分析还可以完成以下任务以下任务:(1 1)组织源程序的输入)组织源程序的输入(2 2)删除删除
3、注释、空格及无用符号(如回车等)注释、空格及无用符号(如回车等)(3 3)行、列)行、列计数计数(4 4)列表打印源程序)列表打印源程序(5 5)发现并定位发现并定位词法错误词法错误(6 6)建立、查填)建立、查填符号表符号表3.1.1 3.1.1 单词符号的表示单词符号的表示v基本字:基本字:也称关键字,如也称关键字,如C C语言中的语言中的int,void,if,whileint,void,if,while等;等;v标识符:标识符:用来表示各种名字,如变量名、常量名、函数名等;用来表示各种名字,如变量名、常量名、函数名等;v常数:常数:如如25,3.1415926,a,“hello”,TR
4、UE25,3.1415926,a,“hello”,TRUE等;等;v算符:算符:如如+,=,+,=,等;等;v界符:界符:如逗号,分号,括号等。如逗号,分号,括号等。v基本字、运算符和界符一般确定;基本字、运算符和界符一般确定;v标识符和常数的数量一般不加限制。标识符和常数的数量一般不加限制。注:注:(1 1)程序设计语言单词的分类纯属技术性问题,可以有不同的方法)程序设计语言单词的分类纯属技术性问题,可以有不同的方法分类;分类;(2 2)除上述一般分类方法外,还有一字一类或一符一类等方法)除上述一般分类方法外,还有一字一类或一符一类等方法单词的分类,如:单词的分类,如:while(i 10)
5、i+;while(i=“)(1,指向指向j的符号表入口的符号表入口)(5,“)”)(1,指向指向i的符号表入口的符号表入口)(4,“-”)(5,“;”)数据类型数据类型 存储地址存储地址int3056int3060例:例:while(i=j)i-;单词的表示:举例单词的表示:举例3.1.2 3.1.2 词法分析器的结构词法分析器的结构字符串形式的源程序字符串形式的源程序单词串形式的源程序单词串形式的源程序词法分析器词法分析器字符字符词法分析器与语法分析器的联系词法分析器与语法分析器的联系(1 1)词法分析作为单独的一遍)词法分析作为单独的一遍3.1.2 3.1.2 词法分析器的结构词法分析器的
6、结构将词法分析器分离的考虑将词法分析器分离的考虑o使整个编译程序的结构更简洁、清晰和条理化;使整个编译程序的结构更简洁、清晰和条理化;o编译程序效率更高;编译程序效率更高;o增强编译程序的可移植性。增强编译程序的可移植性。(2)(2)词法分析作为子程序词法分析作为子程序输入串输入串词法分析器词法分析器语法分析器语法分析器符号表符号表取取下下一一单单词词返返回回下下一一单单词词词法分析器与语法分析器的联系词法分析器与语法分析器的联系3.1.2 3.1.2 词法分析器的结构词法分析器的结构扫描缓冲区扫描缓冲区1.1.预预处处理理程程序序:取取消消注注解解,剔剔除除无无用用的的空空白白、跳格、回车、
7、换行等跳格、回车、换行等2.2.输入缓冲区输入缓冲区:源程序:源程序输入缓冲区输入缓冲区3.1.2 3.1.2 词法分析器的结构词法分析器的结构v主要是为方便单词的识别工作:主要是为方便单词的识别工作:(1)剔除无用的空白符、跳格符、回车符、换行符。)剔除无用的空白符、跳格符、回车符、换行符。,t,r,n(2)剔除注释:)剔除注释:/*/,/(3)合并空白符。)合并空白符。预处理程序预处理程序例:例:int max(int x,int y)/求求x,y的最大值的最大值int z;z=(x y?x:y);return z;预处理后:预处理后:int max(int x,int y)int z;z
8、=(xy?x:y);return z;3.1.2 3.1.2 词法分析器的结构词法分析器的结构预处理程序预处理程序3.1.2 3.1.2 词法分析器的结构词法分析器的结构缓冲区的设计缓冲区的设计pp 起点指针:起点指针:用来指示正在扫描的单词的起点;用来指示正在扫描的单词的起点;pp 搜索指针:搜索指针:用于向前搜索,寻找单词的结束;用于向前搜索,寻找单词的结束;pp 缓冲区结构缓冲区结构扫扫描描缓缓冲冲区区:从从输输入入缓缓冲冲区区输输入入固固定定长长度度的的字字符符串串到到另另一一个个缓缓冲冲区区(扫扫描描缓缓冲冲区区),词词法法分分析析可可以以直直接接在在此此缓缓冲冲区区中中进进行行符符
9、号号识识别别。扫扫描描缓缓冲冲区区的的结构:结构:o假设标识符和常数的最大长度为假设标识符和常数的最大长度为256缓冲区长度:缓冲区长度:512标识符起标识符起点点(500)搜索指搜索指示器示器3.1.2 3.1.2 词法分析器的结构词法分析器的结构标识符起标识符起点点(252)搜索指搜索指示器示器缓冲区长度:缓冲区长度:256缓冲区长度:缓冲区长度:256p:设设置置左左右右两两个个缓缓冲冲区区,当当左左缓缓冲冲区区读读完完后后,新新读读入入的的字字符符存存入右缓冲区;反之,存放在左缓冲区;入右缓冲区;反之,存放在左缓冲区;缓冲区的设计缓冲区的设计小结小结v词法分析器的任务;词法分析器的任务
10、;v单词符号的分类;单词符号的分类;v单词符号的表示;单词符号的表示;v词法分析预处理;词法分析预处理;v词法分析器的工作方式;词法分析器的工作方式;v扫描缓冲区的双缓冲策略。扫描缓冲区的双缓冲策略。3.2.1 3.2.1 正规式与正规集正规式与正规集p 正规式(正规表达式):正规式(正规表达式):用以描述单词符号的工用以描述单词符号的工具,是说明单词的模式的一种重要的表示法具,是说明单词的模式的一种重要的表示法,是是定义正规集的工具。定义正规集的工具。p一个正规式对应一个一个正规式对应一个正规集正规集正规正规式和正规表达式式和正规表达式3.2.1 3.2.1 正规式与正规集正规式与正规集对字
11、母表对字母表:(1)(1)和和都是都是上的正规式,它们所表示的正规集分别为上的正规式,它们所表示的正规集分别为和和;(2)(2)aa,a a是是上的一个正规式,它所表示的正规集为上的一个正规式,它所表示的正规集为aa;(3)(3)假定假定U U和和V V都是都是上的正规式,它们所表示的正规集分别记为上的正规式,它们所表示的正规集分别记为L(U)L(U)和和L(V)L(V),那么那么(U|V)(U|V)、(UV)(UV)和和(U)*(U)*也是正规式,它们所对应的正规集分别为也是正规式,它们所对应的正规集分别为L(U)L(V)L(U)L(V)、L(U)L(V)L(U)L(V)和和(L(U)*(L
12、(U)*。仅由仅由有限次有限次使用上述三步骤得到的表达式才是正规式,仅由这些正规使用上述三步骤得到的表达式才是正规式,仅由这些正规式所表示的字集才是式所表示的字集才是上的正规集。上的正规集。例例3.1 令令=a,boba*上所有以上所有以b为首,后跟任意多个为首,后跟任意多个a的的字符串字符串;oa(a|b)*上所有以上所有以a为首的字符串;为首的字符串;o(a|b)*(aa|bb)(a|b)*上含两个连续上含两个连续a或两个连续或两个连续b的的字符串字符串。正规正规式和正规表达式式和正规表达式3.2.1 3.2.1 正规式与正规集正规式与正规集例例3.1 令令=a,b正规式正规式 aa|ba
13、b(a|b)(a|b)a*(a|b)*(a|b)*(aa|bb)(a|b)*正规集正规集 aa,babaa,ab,ba,bb,a,a,任意个任意个a的串的串,a,b,aa,ab 所有由所有由a和和b组成的串组成的串*上所有含有两个相继的上所有含有两个相继的a或两或两个相继的个相继的b组成的串组成的串能被能被5 5整除的十进制整数的正则表达式整除的十进制整数的正则表达式规则(规则(1):):表达式的头部为:表达式的头部为:-、+或或,表示整数的正、负,表示整数的正、负,表示整数的正、负,表示整数的正、负规则(规则(2):十进制整数的尾部以:十进制整数的尾部以0或者或者5结束结束规则(规则(3):
14、整数的中部是任意:整数的中部是任意0-9组成的数字串组成的数字串3.2.1 3.2.1 正规式与正规集正规式与正规集(+|-|)(0|1|9)*(0|5)常用的正规式常用的正规式整数:整数:(+|-|)(0|1|9)(0|1|9)(0|1|9)(0|1|9)*浮点数:浮点数:(+|-|)(0|1|9)(0|1|9)*.(0|1|9)(0|1|9).(0|1|9)(0|1|9)*标识符:标识符:(a|z|A|Z|_)(a|z|A|Z|_|0|9)*3.2.1 3.2.1 正规式与正规集正规式与正规集正规式的关系正规式的关系o交换律:交换律:U|V=V|U;o结合律:结合律:U|(V|W)=(U|
15、V)|W;U(VW)=(UV)W;o分配律:分配律:U(V|W)=UV|UW;(V|W)U=VU|WU;oU=U=U。3.2.2 3.2.2 状态转换图状态转换图(TG)(TG)转换图是一张转换图是一张有限方向图有限方向图;结点表示结点表示状态状态,用圆圈表示;,用圆圈表示;状态之间用状态之间用有向弧有向弧连接;连接;有向弧上的有向弧上的标记标记(字符字符)表示在射出结点所代表的状态下可能出现的输入符号表示在射出结点所代表的状态下可能出现的输入符号或符号串;或符号串;一张转换图只包含一张转换图只包含有限有限个状态,且有一个个状态,且有一个初态初态,至少有一个,至少有一个终态终态;一个状态转换图
16、可用于识别一个状态转换图可用于识别(或接受或接受)一定的字符串,如一定的字符串,如 (a|b)(a|b)*(aa|bb)(a|b)(aa|bb)(a|b)*。3012baabbaab状态转换图状态转换图3.2.2 3.2.2 状态转换图状态转换图(TG)(TG)状态转换图的作用:状态转换图的作用:(1 1)识别字符串是否为文法的句子(单词)识别字符串是否为文法的句子(单词)方法:方法:从文法的开始符号出发,按照与符号串预留部分中最左字符相匹配的原则游从文法的开始符号出发,按照与符号串预留部分中最左字符相匹配的原则游历状态图,直到符号串的末端为止。历状态图,直到符号串的末端为止。如果这时恰好到达
17、终止状态,则符号串为文法的句子,否则不是如果这时恰好到达终止状态,则符号串为文法的句子,否则不是3012baabbaab如利用转换图判定字符串:如利用转换图判定字符串:(1)ab(1)ab(2)aab(2)aab(3)aa(3)aa状态转换图的作用状态转换图的作用3.2.2 3.2.2 状态转换图状态转换图(TG)(TG)状态转换图的作用:状态转换图的作用:(2 2)根据状态图可构造相应的语法分析程序。)根据状态图可构造相应的语法分析程序。画出状态转化图。画出状态转化图。由正则文法或正则式构造状态转换图。由正则文法或正则式构造状态转换图。由状态转换图编写程序。由状态转换图编写程序。对于状态转换
18、图中每一个状态构造一段代码,代码对于状态转换图中每一个状态构造一段代码,代码的功能是的功能是a.a.从输入串中读入一个字符;从输入串中读入一个字符;b.b.判断读入的字符与由此状态出发的哪条弧上的标记相匹配,便转至相匹配判断读入的字符与由此状态出发的哪条弧上的标记相匹配,便转至相匹配的那条弧所指向的状态。的那条弧所指向的状态。c.c.均不匹配时便失败,即不能到达正常入口。均不匹配时便失败,即不能到达正常入口。状态转换图的作用状态转换图的作用3012baabbaab3.2.3 3.2.3 确定有限自动机确定有限自动机(DFA)(DFA)一个一个DFA MDFA M是一个五元组,是一个五元组,M=
19、(K,f,S,Z):M=(K,f,S,Z):(1)K(1)K:状态集;:状态集;(2)(2):字母表;:字母表;(3)f(3)f:从:从KK到到K K的的单值部分映射单值部分映射,即,即f(kf(ki i,a)=k,a)=kj j;(4)SK(4)SK,是唯一的初态;,是唯一的初态;(5)Z(5)Z K K,是终态集。,是终态集。01a2a01a3当前状态和输入当前状态和输入字符只能确定下字符只能确定下一个状态一个状态3.2.3 3.2.3 确定有限自动机确定有限自动机(DFA)(DFA)vDFA M=(K,f,S,Z):(1)K=0,1,2,3;(2)=a,b;(3)f:f(0,a)=1,f
20、(0,b)=2,f(1,a)=3,f(1,b)=2,f(2,a)=1,f(2,b)=3,f(3,a)=3,f(3,b)=3(4)S=0;(5)Z=3。ab0121322133333012baabbaab例例1 1:构造:构造DFADFA,使其能接受所有由偶数个,使其能接受所有由偶数个0 0和偶数个和偶数个1 1所组成所组成(01)(01)字符字符串。串。分析问题的状态空间:分析问题的状态空间:0:包含偶数个:包含偶数个0偶数个偶数个1;1:包含偶数个:包含偶数个0奇数个奇数个1;2:包含奇数个:包含奇数个0偶数个偶数个1;3:包含奇数个:包含奇数个0奇数个奇数个1。不管串处于哪一种情况,只要再
21、添加一个不管串处于哪一种情况,只要再添加一个0或或1,就会转换到另一种情况。,就会转换到另一种情况。0123100101013.2.3 3.2.3 确定有限自动机确定有限自动机(DFA)(DFA)例例2 2:构造:构造DFADFA,使其能接受,使其能接受=0,1=0,1上能被上能被4 4整除的二进制数整除的二进制数 分析问题的状态空间:分析问题的状态空间:任意二进制数除以任意二进制数除以4,只有余数为,只有余数为0、1、2、3四种情况。四种情况。0123 一个二进制数后面加一个二进制数后面加0,相当于变为原来的,相当于变为原来的2倍;后面加倍;后面加1,相当于变为原,相当于变为原来的来的2倍加
22、倍加1。若若x mod 4=0,则:则:2x mod 4=0;(2x+1)mod 4=101若若x mod 4=1,则:则:2x mod 4=2;(2x+1)mod 4=301若若x mod 4=2,则:则:2x mod 4=0;(2x+1)mod 4=101若若x mod 4=3,则:则:2x mod 4=2;(2x+1)mod 4=3013.2.3 3.2.3 确定有限自动机确定有限自动机(DFA)(DFA)例例3 3:一个人带着狼、山羊和白菜要从一条河左岸渡到右岸。有:一个人带着狼、山羊和白菜要从一条河左岸渡到右岸。有一条船,恰好能装下人和其它三件东西中的一件。用有限自动机一条船,恰好能
23、装下人和其它三件东西中的一件。用有限自动机找出渡河方案。找出渡河方案。左岸存在的东西作为状态,初始为人、狼、羊、白菜都在左岸,接受状态为都不在左岸。左岸存在的东西作为状态,初始为人、狼、羊、白菜都在左岸,接受状态为都不在左岸。(人、狼、羊、白菜)(人、狼、羊、白菜)(人、狼、羊)(人、狼、羊)(人、狼、白菜)(人、狼、白菜)(人、羊、白菜)(人、羊、白菜)(人、狼)(人、狼)(人、羊)(人、羊)(人、白菜)(人、白菜)(狼、羊、白菜)(狼、羊、白菜)(狼、羊)(狼、羊)(狼、白菜)(狼、白菜)(羊、白菜)(羊、白菜)(人)(人)(狼)(狼)(羊)(羊)(白菜)(白菜)0 01 12 23 34
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 词法 分析 DFA NFA 及其 转换
限制150内