词法分析课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《词法分析课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 词法 分析 课件
- 资源描述:
-
1、1第三章第三章 词法分析词法分析u词法分析的基本概念词法分析的基本概念u正规式自动机和状态图正规式自动机和状态图u词法分析程序的设计词法分析程序的设计2学习目标:v掌握:词法分析程序的构造,正规式和正掌握:词法分析程序的构造,正规式和正规文法到有穷自动机的转换,规文法到有穷自动机的转换,NFANFA到到DFADFA的的转换、转换、DFADFA的化简的化简v理解:正规文法、正规式、理解:正规文法、正规式、DFADFA的概念、的概念、NFANFA的概念的概念v了解:词法分析程序的自动构造工具了解:词法分析程序的自动构造工具3词法分析程序词法分析程序n词法分析是编译过程中的一个阶段,在语法分词法分析
2、是编译过程中的一个阶段,在语法分析前进行析前进行 ,也可以和语法分析结合在一起作为,也可以和语法分析结合在一起作为一遍。一遍。n输入:源程序字符串输入:源程序字符串n输出:单词符号(最基本的语法单位)输出:单词符号(最基本的语法单位)4词法分析程序的功能词法分析程序的功能n词法分析程序主要执行以下功能:词法分析程序主要执行以下功能:n读入源程序字符串,识别开具有独立含义的最读入源程序字符串,识别开具有独立含义的最小语法单位小语法单位单词(符号);单词(符号);n把单词变换成长度统一的且为定长的属性字;把单词变换成长度统一的且为定长的属性字;n其他功能:其他功能:n滤掉空格,跳过注释、换行符滤掉
3、空格,跳过注释、换行符n某些预加工处理某些预加工处理5词法分析程序的实现方式词法分析程序的实现方式n相对独立方式相对独立方式:把词法分析程序作为语法分析:把词法分析程序作为语法分析程序的一个独立程序的一个独立子程序子程序。语法分析程序需要新。语法分析程序需要新符号时调用这个子程序。符号时调用这个子程序。n完全独立方式完全独立方式:词法分析程序作为:词法分析程序作为单独一趟单独一趟来来实现。词法分析程序读入整个源程序,它的输实现。词法分析程序读入整个源程序,它的输出作为语法分析程序的输入。出作为语法分析程序的输入。6相对独立方式相对独立方式n当采用递归下降分析等技术实现一趟编译程当采用递归下降分
4、析等技术实现一趟编译程序时常采用这种方式。序时常采用这种方式。源程序词法分析程序语法分析程序Tokenget token.7完全独立方式完全独立方式n采用词法分析工作完全独立的原因:采用词法分析工作完全独立的原因:n简化设计,降低语法分析的复杂性简化设计,降低语法分析的复杂性n提高编译效率提高编译效率n增加编译系统的可移植性增加编译系统的可移植性 源程序词法分析程序语法分析程序属性字序列属性字序列.8源程序的输入源程序的输入n在内存开辟缓冲区,将程序文本放进该缓冲区在内存开辟缓冲区,将程序文本放进该缓冲区n预处理:删除无用字符等预处理:删除无用字符等n词法分析程序对缓冲区扫描时,设置两个指示器
5、,词法分析程序对缓冲区扫描时,设置两个指示器,一个指向当前正在识别的单词的开始位置,称为一个指向当前正在识别的单词的开始位置,称为起始指针;另一个用于向前搜索,以寻找单词的起始指针;另一个用于向前搜索,以寻找单词的终点,称为扫描指针。终点,称为扫描指针。起始指针起始指针搜索指针搜索指针9n扫描缓冲区的大小扫描缓冲区的大小n应当保证单词符号不被缓冲区的边界打断应当保证单词符号不被缓冲区的边界打断n使用循环链表实现使用循环链表实现n规定单词符号的大小不超过整个链表的容量规定单词符号的大小不超过整个链表的容量10超前搜索超前搜索n词法分析程序在读取单词时,为了判断是否已读词法分析程序在读取单词时,为
6、了判断是否已读入整个单词的全部字符,常采取向前多读取字符入整个单词的全部字符,常采取向前多读取字符并通过读取的字符来判别,即所谓超前搜索技术。并通过读取的字符来判别,即所谓超前搜索技术。11单词符号的构成规则标识符012字母(a-z)字母或数字(a-z0-9)其它*此时,超前搜索了一个字符12词法分析程序输出单词的形式词法分析程序输出单词的形式n词法分析程序输出的单词符号通常用词法分析程序输出的单词符号通常用二元式二元式表示:表示:(单词(单词类别,单词自身的值类别,单词自身的值)n单词类别单词类别:表示单词种类,常用整数编码,它是语法分析:表示单词种类,常用整数编码,它是语法分析需要的需要的
7、n单词自身的值单词自身的值:是编译中其他阶段所需要的信息:是编译中其他阶段所需要的信息n如果一个种别只含一个单词符号,那么该单词符号的类别编码就完如果一个种别只含一个单词符号,那么该单词符号的类别编码就完全代表它自身的值。全代表它自身的值。 把单词符号存储在符号表中。不同种类的单词符号可能具有不同类把单词符号存储在符号表中。不同种类的单词符号可能具有不同类型的属性。可以用不同种类的符号表实现。型的属性。可以用不同种类的符号表实现。n如果一个种别含有多个单词符号,那么还应给出该单词符号的自身如果一个种别含有多个单词符号,那么还应给出该单词符号的自身值:标识符自身值是标识符自身的字符串;常数自身值
8、是常数的二值:标识符自身值是标识符自身的字符串;常数自身值是常数的二进制数值。进制数值。13语言的单词符号语言的单词符号n单词符号是程序语言的基本语法单位,一般分为下面单词符号是程序语言的基本语法单位,一般分为下面5种:种:n关键字关键字(基本字):(个数确定,可全体编为一类,也(基本字):(个数确定,可全体编为一类,也可一字一类可一字一类)n标识符:标识符:(个数不确定,作为一类)(个数不确定,作为一类)n常数:常数:各种类型的常数各种类型的常数 。(个数不确定,按类型分类个数不确定,按类型分类)n运算符:运算符:如如+、-、*、/、1) b=10;n假定基本字、运假定基本字、运算符、界符都
9、是算符、界符都是一符一种。一符一种。 n它所输出的单词符号是:它所输出的单词符号是:(2,) 基本字基本字if(29,) 左括号左括号(10,a) 标识符标识符a(23,) 大于号大于号(11,1的二进制的二进制) 常数常数1 (30,) 右括号右括号)(10,b) 标识符标识符b(17,) 赋值号赋值号=(11,10的二进制的二进制) 常数常数10(26,) 分号;分号;15正规式和有限自动机正规式和有限自动机16正规表达式和有限自动机学习目的和内容n用正则表达式描述词法规则n构造正则表达式等价的NFAn构造NFA等价的DFAn化简DFAn根据DFA编写程序,实现词法分析器n提示:本部分内容
10、占学习内容的25%,n考核内容的1/2与本部分相关17单词的描述工具单词的描述工具作用作用: : 描述单词的构成规则描述单词的构成规则, ,基于这类描基于这类描述工具建立词法分析技术述工具建立词法分析技术, ,进而实现词法进而实现词法分析程序的自动构造分析程序的自动构造. .工具有工具有: : 正规文法正规文法 正规式正规式(Regular Expression)(Regular Expression)18正规文法正规文法多数程序设计语言单词的语法都能用正多数程序设计语言单词的语法都能用正规文法规文法(3型文法型文法)描述描述正规文法回顾正规文法回顾文法的任一产生式文法的任一产生式的形式都为的
11、形式都为AaBAaB或或AaAa,其中,其中A A ,BVBVN N ,a Va VT T 。正规文法描述的是正规文法描述的是V VT T* *上的正规集上的正规集19例如例如 :用用l l表示表示azaz中的任一英文字母,中的任一英文字母,d d表示表示0909中任一中任一数字数字描述标识符的正规文法为描述标识符的正规文法为 llll lld dll dd 描述无符号整数的正规文法描述无符号整数的正规文法 dddd 20为什么要引进正则表达式?为什么要引进正则表达式?对于字母表对于字母表,我们感兴趣的是它的一些特,我们感兴趣的是它的一些特殊字集正规集。殊字集正规集。n正规集是字母表正规集是字
12、母表上的上的符合一定规则符合一定规则的符号串构成的符号串构成的集合的集合正则表达式是一种适合正则表达式是一种适合描述符号描述符号的表示法,可由的表示法,可由它定义正规集。它定义正规集。21正规式正规式(regular expression)n定义(定义(正规式正规式和它所表示的和它所表示的正规集正规集):):设字母标为设字母标为 v1 和和 都是都是 上的正规式,它们所表示的正规集分别为上的正规式,它们所表示的正规集分别为 和和 ;v2 任何任何a ,a是是 上的一个正规式,它所表示的正规集为上的一个正规式,它所表示的正规集为a;v3 假定假定e1和和e2都是都是 上的正规式,它们所表示的正规
13、集分别上的正规式,它们所表示的正规集分别为为L(e1)和和L(e2),那么,那么,(e1), e1 e2, e1 e2, e1 也都是正规也都是正规式式,它们所表示的正规集分别为它们所表示的正规集分别为L(e1), L(e1)L(e2), L(e1)L(e2)和和(L(e1) 。(。(递归递归)v4 仅由有限次使用上述三步骤而定义的表达式才是仅由有限次使用上述三步骤而定义的表达式才是 上的正上的正规式,仅由这些正规式所表示的字集才是规式,仅由这些正规式所表示的字集才是 上的正规集。上的正规集。22n(e1), e1 e2, e1 e2, e1 L(e1), L(e1)L(e2), L(e1)L
14、(e2)和和(L(e1) 。n其中的其中的“ ”读为读为“或或”(也有使用(也有使用“+”代替代替 “ ” 的);的);“ ”读为读为“连接连接”;“ ”读为读为“闭包闭包”(即,任意有限次的(即,任意有限次的自重复连接)。在不致混淆时,括号可省去,但规定算符的自重复连接)。在不致混淆时,括号可省去,但规定算符的优先顺序为优先顺序为“ ”、“ ”、“ ” 。连接符。连接符“ ”一般可省略不一般可省略不写。写。“ ”、“ ”和和“ ” 都是左结合的。都是左结合的。23正则集正则集n正则集正则集定义定义: 正则表达式正则表达式e的的值值是字母表上的正则是字母表上的正则集,记作集,记作|e| | |
15、= | |= |a|=a |(e)|=|e| |e1e2|=|e1|e2|=xy|x |e1| 且且y |e2| | e1|e2 |=|e1| |e2|=x|x |e1|或或 x |e2| |e|=|e|* (e的闭包的闭包)n例:例:(0|1)0|1的值为:一切只包含的值为:一切只包含0与与1的任的任意序列组成的正则集(二进制数集合)意序列组成的正则集(二进制数集合)24举例举例n例例: 2=A,B,0,1, 则则n(A|B)A|B|0|15是是 2上的正则表达式上的正则表达式n(A|B)A|B|0|15的值,即的值,即 | (A|B)A|B|0|15 |,是这样一个正则集,是这样一个正则集
16、,每个字符串都是以字母每个字符串都是以字母A或或B打头,后跟以至多打头,后跟以至多5个字母(个字母(A或或B)或数字()或数字(0或或1)25n例例 令令 =a,b, 上的正规式和相应的正上的正规式和相应的正规集的例子有:规集的例子有:正规式正规式 正规集正规集a aa ba,bab ab(a b)(a b)aa,ab,ba,bba ,a,a, 任意个任意个a的串的串(a b) ,a,b,aa,ab 所有由所有由a 和和b组成的串组成的串(a b) (aa bb)(a b) 上所有含有两个相继上所有含有两个相继 的的a或两个相继的或两个相继的b组成组成 的串的串26n例例 =l,d,r=l(l
17、 d) 定义的正规定义的正规集集: l,ll,ld,ldd,(标识符)(标识符)n例例 =d,.,e,+,-,则则 上的正规上的正规式式 表示表示的是无符号数的集合。其中的是无符号数的集合。其中d为为09的数的数字。字。27两个正规式两个正规式等价等价n若两个正规式e1和e2所表示的,则说e1和e2等价,写作e1=e2。n例如: e1= (ab), e2 = ban又如: b(ab) = (ba)b(ab) = (ab)28正规式的运算律n设r,s,t为正规式,正规式服从的代数规律有:n1。rs=sr“或”服从交换律n2。r(st)=(rs)t“或”的可结合律n3。(rs)t=r(st)“连接
18、”的可结合律n4。r(st)=rsrt (st)r=srtr分配律 n5。 r=r, r=r是“连接”的恒等元素n6。 rr=r r=rrr“或”的抽取律 29程序中的单词都能用正程序中的单词都能用正规规式来定义式来定义 令令l l为为azaz的字母,的字母,d d为为0909的数字的数字e e1 1= l ( l | d)= l ( l | d)* *e e1 1表示标识符集合表示标识符集合e e2 2= dd= dd* * e e2 2表示无符号整数表示无符号整数注注( (比较比较) ): llll lld dll dd 正规式比正规文法更容易让人理解单词是按怎正规式比正规文法更容易让人理
19、解单词是按怎样的规律构成的,且可以从某个正规式自动地样的规律构成的,且可以从某个正规式自动地构造识别程序。构造识别程序。30正规文法和正规式间的转换正规文法和正规式间的转换等价性:等价性:对任意一个正规文法,存在一个定义同对任意一个正规文法,存在一个定义同一语言的正规式一语言的正规式对任意一个正规式,存在一个定义同一对任意一个正规式,存在一个定义同一语言的正规文法语言的正规文法311. 将将上的一个正规式上的一个正规式r r转换成文法转换成文法G=(VG=(VN N,V,VT T,S,P),S,P)V VT T= ,= ,首先形成产生式首先形成产生式Sr,SSr,S为为G G的开始符的开始符不
20、断利用下面的规则做变换不断利用下面的规则做变换, ,直到每个产生式最直到每个产生式最多含有一个终结符为止多含有一个终结符为止原产生式变换后产生式规则1AxyAxB By规则2Ax*yAxA Ay规则3Ax|yAx Ay其中其中B B为一新非终结符为一新非终结符32例: 将R=a(a|d)*转换成相应的正则文法令转换成文法G=(VN,VT,P,S)其中VT=a,d, 文法开始符为S首先形成Sa(a|d)*,然后变换SaA A(a|d)*A(a|d)A AAaA AdA最终有产生式:最终有产生式: SaA , A , AaA, AdA332.将正规文法转换成正规式将每条产生式改写为正规式用代入法解
21、正规式方程组最后只剩下一个开始符号定义的正规式,其中不含非终结符正规文法到正规式的转换规则:文法产生式正规式规则1 AxB ByA=xy规则2 AxA|yA=x*y规则3 Ax AyA=x|y34例:将文法GS转换成正规式 G:Sa A|a AdA|d先由产生式得: S=aA|a A=d*d将A代入S中得:S=ad*d|a利用正规式变换得S=a(d*d|)=ad* 说明:d*d|=(|d|dd|)d|=d|dd|= d*所求正规式为ad*35有穷自动机有穷自动机(Finite Automata)u状态转换图状态转换图u确定有穷状态自动机(确定有穷状态自动机(DFA)u非确定有穷状态自动机(非确
22、定有穷状态自动机(NFA)u把把NFA变为变为DFAuDFA的化简的化简36状态转换图(状态转换图(Transition Diagram)n为了识别为了识别正则文法正则文法的句子而专门设计的的句子而专门设计的有向图有向图。n如:如:C语言中关于标识符定义的规则(词法规则)语言中关于标识符定义的规则(词法规则)如下:如下::=字母字母|字母字母|数字数字则识别标识符的状态(转换)图:则识别标识符的状态(转换)图:SIE字母字母数字数字字母或数字字母或数字状态都是非终结符号状态都是非终结符号S:开始状态:开始状态E:终止状态,用双圈表示:终止状态,用双圈表示I:标识符状态:标识符状态37状态转换图
23、状态转换图概念概念1 1n有限方向图有限方向图n结点表示状态结点表示状态n有一个起始状态,初态有一个起始状态,初态n至少有一个终止状态,终态。用双圆圈表示至少有一个终止状态,终态。用双圆圈表示n状态的数量有限状态的数量有限n状态之间用有方向的边状态之间用有方向的边箭头相连箭头相连n箭头上有标记箭头上有标记38状态转换图状态转换图概念概念2 2n当前状态n箭头的起始结点n目的状态n箭头的终点n箭头上的标记n当前状态允许输入字符或一类字符n从当前状态通过输入箭头上的标记到达目的状态39n void state0( buffer & aBuf, token & aToken ) nn char aC
24、har = aBuf.getChar();n if (aChar=a)n n aToken.val.append(aChar);n state1( aBuf, aToken ); n n elsen aToken.type = token.error;n40n void state1( buffer & aBuf, token & aToken )nn char aChar = aBuf.getChar();n while ( (aChar=a)|n (aChar=0) )n n aChar = aBuf.getChar();n aToken.val.append(aChar);n n sta
25、te2( aBuf, aToken );n41nvoid state2( buffer & aBuf, token & aToken ) nn aBuf.goBack(1);n aToken.val.removeTail(1);n aToken.type = token.identifier;nn 42如何为正则文法构造状态转换图?如何为正则文法构造状态转换图?n什么是正则文法?(什么是正则文法?(U:=a 或或U:=aB)n步骤如下:步骤如下:n以以S为开始状态作结点;为开始状态作结点;n把文法中的每一个把文法中的每一个非终结符号非终结符号作为作为状态结点状态结点;n对于形如对于形如Q:=a
展开阅读全文