第3章 词法分析优秀PPT.ppt
《第3章 词法分析优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第3章 词法分析优秀PPT.ppt(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章 词法分析现在学习的是第1页,共73页n任务任务n扫描或词法分析阶段将源程序读作字符文件并将其分为若扫描或词法分析阶段将源程序读作字符文件并将其分为若干个单词。干个单词。n词法分析的处理结构词法分析的处理结构n(1)把词法分析程序作为主程序。把词法分析程序作为主程序。n(2)把词法分析程序作为语法分析程序调用的子程序。把词法分析程序作为语法分析程序调用的子程序。n由由于于把把词词法法分分析析器器安安排排成成一一个个子子程程序序比比较较自自然然,因因此此,词法分析程序通常采用第二种处理结构。词法分析程序通常采用第二种处理结构。现在学习的是第2页,共73页词法分析的两种处理结构词法分析的两种
2、处理结构(a)词法分析程序作为主程序词法分析程序作为主程序(b)词法分析程序作为子程序词法分析程序作为子程序现在学习的是第3页,共73页3.1 扫描处理扫描处理n单词的分类单词的分类n关键字关键字(keyword)/保留字保留字(reserved word):如:如C语言语言中的中的if、else、while和和do等,这些字保留了语言所规等,这些字保留了语言所规定的含义,是编译程序识别各类语法成分的依据。几定的含义,是编译程序识别各类语法成分的依据。几乎所有程序语言都限制用户使用保留字来作为标识符。乎所有程序语言都限制用户使用保留字来作为标识符。n标识符标识符(identifier):用来标
3、记常量、数组、类型、:用来标记常量、数组、类型、变量、过程或函数名等,通常由用户自己定义。变量、过程或函数名等,通常由用户自己定义。现在学习的是第4页,共73页n常常数数:包包括括各各种种类类型型的的常常数数,如如整整型型常常数数386、实实型型常常数数0.618、布布尔尔型型常常数数TRUE、字字符符串串常常数数“Hello world!”等。等。n运运 算算 符符:如如“+”、“-”、“*”、“/”、“”、“0)inr=inr+368;else inr=inr*inr;经过词法分析器输出:经过词法分析器输出:(if,_)(,_)(id,“count”)(,_)(num,0)(),_)(id
4、,“inr”)(=,_)(id,“inr”)(+,_)(num,368)(;,_)(else,_)(id,“inr”)(=,_)(id,“inr”)(*,_)(id,“inr”)(;,_)现在学习的是第8页,共73页n剔除空白符和注释剔除空白符和注释空白符包括空格、制表符、换行符等。空白符包括空格、制表符、换行符等。n常数常数把数字组合成常数,用一个单词类别(例如把数字组合成常数,用一个单词类别(例如num)来表示所有的常数,而常数的值作为单)来表示所有的常数,而常数的值作为单词(这里是词(这里是num)的值。单词和单词的值一起)的值。单词和单词的值一起传递给语法分析器。例如,输入传递给语法分
5、析器。例如,输入31+28+59经过经过词法分析输出词法分析输出(num,31)(+,_)(num,28)(+,_)(num,59)。现在学习的是第9页,共73页n识别标识符和关键字识别标识符和关键字用一个单词类别(例如用一个单词类别(例如id)来表示所有的标识)来表示所有的标识符。当输入流中出现形成标识符的字符串时,符。当输入流中出现形成标识符的字符串时,字符串存储在符号表的一个表项中,而指向该字符串存储在符号表的一个表项中,而指向该表项的指针则成为单词(这里是表项的指针则成为单词(这里是id)的值。)的值。由于关键字通常也满足标识符的形成规则,所以由于关键字通常也满足标识符的形成规则,所以
6、要区别关键字和标识符,一个简单的办法是把所要区别关键字和标识符,一个简单的办法是把所有关键字保存在一张表中,通过查表,不是关键有关键字保存在一张表中,通过查表,不是关键字的就是标识符。字的就是标识符。现在学习的是第10页,共73页n词法词法 分析器的接口分析器的接口词法分析器介于语法分析器和源程序字符输入流之间,词法分析器介于语法分析器和源程序字符输入流之间,并与这两者交互。词法分析阶段从输入字符流读字符并与这两者交互。词法分析阶段从输入字符流读字符并形成单词,然后将生成的单词极其值传递给编译器并形成单词,然后将生成的单词极其值传递给编译器的下一个阶段。的下一个阶段。输入输入词法分析器词法分析
7、器语法分析器语法分析器读字符读字符回退字符回退字符传递单词传递单词及其值及其值现在学习的是第11页,共73页在某些情况下,词法分析器在把单词传给语法分在某些情况下,词法分析器在把单词传给语法分析器之前,需要从输入串超前地读入一些字符,析器之前,需要从输入串超前地读入一些字符,以确定需要传递给语法分析器的正确单词。例如,以确定需要传递给语法分析器的正确单词。例如,词法分析器在读到词法分析器在读到字符时需要读入下一个字符。字符时需要读入下一个字符。如果下一个字符是如果下一个字符是=,则词法分析器把,则词法分析器把=组合在组合在一起作为形成一起作为形成“大于等于大于等于”操作符单词的字符串;操作符单
8、词的字符串;否则把否则把作为形成作为形成“大于大于”操作符单词的字符串,操作符单词的字符串,这时词法分析器已经多读了一个字符。多读入的这时词法分析器已经多读了一个字符。多读入的字符必须退回给输入流,因为它可能是下一个单字符必须退回给输入流,因为它可能是下一个单词的开始符号。词的开始符号。现在学习的是第12页,共73页3.2 单词的描述单词的描述正规表达式正规表达式n正规表达式正规表达式(Regular Expression)n正规表达式正规表达式用来表示字符串的结构。用来表示字符串的结构。n一个正规表达式一个正规表达式r完全由它所匹配的串集来完全由它所匹配的串集来定义。反过来,这个集合称为由该
9、正规表定义。反过来,这个集合称为由该正规表达式表示的达式表示的正规集正规集或生成的语言,写作或生成的语言,写作L(r)。n正规表达式简称正规表达式简称正规式正规式。现在学习的是第13页,共73页程序设计语言的单词就是具有特定格式的字符串,所以程序设计语言的单词就是具有特定格式的字符串,所以我们可以用正规表达式来定义单词。例如,我们可以用正规表达式来定义单词。例如,如果字母用如果字母用letter表示,数字用表示,数字用digit表示,则标识符集可以用正规表达式定表示,则标识符集可以用正规表达式定义为义为letter(letter|digit)*其中,其中,letter与与(letter|dig
10、it)*的并置表示两者的连接;的并置表示两者的连接;“|”表示两个表达式二者选一,表示两个表达式二者选一,letter|digit 表示在表示在letter和和digit中两者选一;中两者选一;“*”表示零次或多次引用表示零次或多次引用“*”标记的表标记的表达式,达式,(letter|digit)*是是letter|digit的零次或多次并置,的零次或多次并置,即表示长度为即表示长度为0,1,2,的字母数字串。的字母数字串。letter(letter|digit)*表表示字母开头的字母数字串,也即标识符集。示字母开头的字母数字串,也即标识符集。letter(letter|digit)*就是表示
11、标识符的正规表达式,而标识就是表示标识符的正规表达式,而标识符集就是这个正规表达式所表示的正规集。符集就是这个正规表达式所表示的正规集。现在学习的是第14页,共73页n对于给定的字母表对于给定的字母表,正规式和正规集的递归定义:,正规式和正规集的递归定义:(1)和和 都是都是 上的正规式,表示的正规集分别为上的正规式,表示的正规集分别为 和和。(2)对任何对任何a,a是是 上的正规式,表示的正规集为上的正规式,表示的正规集为a。(3)如如果果R和和S是是 上上的的正正规规式式,它它们们所所表表示示的的正正规规集集分分别别为为L(R)和和L(S),则:,则:R|S是是 上的正规式,表示的正规集为
12、上的正规式,表示的正规集为L(R)L(S);R S是是 上的正规式,表示的正规集为上的正规式,表示的正规集为L(R)L(S);(R)*是是 上的正规式,它所表示的正规集为上的正规式,它所表示的正规集为(L(R)*;(R)也是也是 上的正规式,它所表示的正规集为上的正规式,它所表示的正规集为L(R)。(4)仅仅由由有有限限次次使使用用规规则则(1)(3)得得到到的的表表达达式式是是 上上的的正正规规式式,它所表示的集合是它所表示的集合是 上的正规集。上的正规集。现在学习的是第15页,共73页n正正规规式式间间的的运运算算符符“|”表表示示或或,“”表表示示连连接接(通通常常可可省省略略),“*”
13、表表示示闭闭包包,使使用用括括号号可可以以改改变变运运算算的的次次序序。如如果果规规定定“*”优优先先于于“”,“”优优先先于于“|”,则则在在不不出出现现混混淆淆的的情情况况下下括括号号也也可可以省去。以省去。n注注意意正正规规表表达达式式a、字字符符串串a和和符符号号a这这三三者者的的含含义义是是不不同同的的,我我们们可可以以从从上上下下文文中中清清楚楚地地区区分分出出所所谈谈到到的的a的具体含义。的具体含义。n对对于于 上上的的正正规规式式R和和S,如如果果它它所所表表示示的的正正规规集集L(R)=L(S),则称,则称R和和S等价,并记为等价,并记为R=S。现在学习的是第16页,共73页
14、n正规表达式的性质正规表达式的性质(1)交换律:交换律:R|S=S|R。(2)结合律:结合律:R|(S|T)=(R|S)|T;R(ST)=(RS)T。(3)分配律:分配律:R(S|T)=RS|RT;(R|S)T=RT|ST。(4)同一律:同一律:R=R =R。(5)幂等律:幂等律:R*=R*现在学习的是第17页,共73页n例例3-2 令令=a,bnL(a|b)=a,b。nL(a|b)(a|b)=aa,ab,ba,bb,表示同样集合的另一正规,表示同样集合的另一正规表达式可以是表达式可以是aa|ab|ba|bb。nL(a*)=,a,aa,aaa,。nL(a|b)*)=,a,b,aa,ab,ba,
15、bb,aaa,aab,aba,abb,baa,bab,aba,bbb,,表示由零个或多个,表示由零个或多个a或或b构成的字符串构成的字符串集合,即由集合,即由a和和b构成的所有字符串的集合。也可用正规表构成的所有字符串的集合。也可用正规表达式达式(a*b*)*来表示。来表示。nL(a|a*b)=a,b,ab,aab,aaab,,表示包含串,表示包含串a和零个和零个或多个或多个a后跟随一个后跟随一个b构成的字符串集合。构成的字符串集合。现在学习的是第18页,共73页n例例3-3 证明:设证明:设L(a+)=a*-,则有,则有a+=aa*。证明证明 L(a+)=a*-=,a,a2,a3,-=a,a
16、2,a3,=a,a,a2,=aa*=L(a)L(a*)=L(aa*)故故 a+=aa*现在学习的是第19页,共73页3.3 单词的识别单词的识别n状态转换图状态转换图(state transition diagram)n在词法分析中,可以用状态转换图识别单词。在词法分析中,可以用状态转换图识别单词。n状态转换图是有向图,结点代表状态,用圆圈表示;状态转换图是有向图,结点代表状态,用圆圈表示;结点之间可由有向边连接,有向边上可标记字符。从结点之间可由有向边连接,有向边上可标记字符。从结点结点i指向结点指向结点j标记字符标记字符x的有向边表示在状态的有向边表示在状态i下,若下,若输入字符为输入字符
17、为x,则读入,则读入x并转换到状态并转换到状态j。ijx现在学习的是第20页,共73页n状态(即结点)数是有限的,其中必有一初始状态状态(即结点)数是有限的,其中必有一初始状态(简称初态,一般用(简称初态,一般用start标记)以及若干终止状态标记)以及若干终止状态(简称终态),终止状态的结点用双圈表示以区别(简称终态),终止状态的结点用双圈表示以区别于其它状态。于其它状态。n从初态出发,状态转换图有向边上的字符逐个与输入从初态出发,状态转换图有向边上的字符逐个与输入字符匹配,若达到终态,则输入字符构成该状态转换字符匹配,若达到终态,则输入字符构成该状态转换图识别出的一个单词。图识别出的一个单
18、词。现在学习的是第21页,共73页标识符及无符号数的状态转换图标识符及无符号数的状态转换图(a)标识符;标识符;(b)无符号整数;无符号整数;(c)无符号数无符号数例如,用于识别标识符、无符号整数、无符号数的状态转换图,其例如,用于识别标识符、无符号整数、无符号数的状态转换图,其初始状态均用初始状态均用0状态表示。状态表示。现在学习的是第22页,共73页n某些终止状态是在读入了一个其它不属于该单词的符某些终止状态是在读入了一个其它不属于该单词的符号后才得到相应的单词编码的,这表明在识别单词的号后才得到相应的单词编码的,这表明在识别单词的过程中多读入了一个符号,所以识别出单词后应将最过程中多读入
19、了一个符号,所以识别出单词后应将最后多读入的这个符号予以回退;我们对此类情况的处后多读入的这个符号予以回退;我们对此类情况的处理是在终态上以理是在终态上以“*”作为标识。作为标识。n以模式以模式“=”和和“”的状态转换图为例。的状态转换图为例。0678start=*other现在学习的是第23页,共73页n状态转换图的实现状态转换图的实现n状态转换图非常容易用程序实现,最简单的办法是让每状态转换图非常容易用程序实现,最简单的办法是让每个状态对应一小段程序。个状态对应一小段程序。n对于不含回路的分支状态来说,可以让它对应一个对于不含回路的分支状态来说,可以让它对应一个switch()语句或一组语
20、句或一组if-else语句。语句。n对于含回路的状态来说,可以让它对应一个对于含回路的状态来说,可以让它对应一个while语句。语句。n终态一般对应一个终态一般对应一个return()语句;语句;return意味着从词意味着从词法分析器返回到调用段,一般指返回到语法分析器。法分析器返回到调用段,一般指返回到语法分析器。n程序的大小与图中状态数和边数成正比。程序的大小与图中状态数和边数成正比。现在学习的是第24页,共73页C语言子集的单词符号及内码值语言子集的单词符号及内码值单词单词种别编码种别编码助记符助记符内码值内码值while1whileif2ifelse3elseswitch4switc
21、hcase5case标识符标识符6idid在符号表中的位置在符号表中的位置常数常数7numnum在常数表中的位置在常数表中的位置+8+9*10*=11relopLE11relopLT=11relopEQ=12=;13;综合例子:一个综合例子:一个C语言子集的简单词法分析器语言子集的简单词法分析器现在学习的是第25页,共73页简单词法分析的状态转换图简单词法分析的状态转换图 现在学习的是第26页,共73页(1)character:字字符符变变量量,存存放放最最新新读读入入的的源源程程序字符。序字符。(2)token:字符数组,用来存放构成单词的字符串。:字符数组,用来存放构成单词的字符串。(3)
22、getbe():过滤空白字符。:过滤空白字符。(4)concatenation():将:将token中的字符串与中的字符串与character中的字符连接作为中的字符连接作为token中新的字符串。中新的字符串。(5)letter()和和digit():判判断断character中中的的字字符符是是否否为为字字母母和和数数字字的的布布尔尔函函数数,是是则则返返回回true,否否则返回则返回false。现在学习的是第27页,共73页(6)reserve():按按token数数组组中中的的字字符符串串查查表表判判别别其其是是否否为为保保留留字字,若若是是保保留留字字则则返返回回它它的的编编码码,否
23、否则则返回返回0值。值。(7)retract():扫描指针回退一个字符,同时将:扫描指针回退一个字符,同时将character置为空白。置为空白。(8)buildlist():将将标标识识符符登登录录到到符符号号表表或或将将常常数数登登录到常数表。录到常数表。(9)error():出现非法字符,显示出错信息。:出现非法字符,显示出错信息。现在学习的是第28页,共73页token0=0;/*对对token数组初始化数组初始化*/s=getchar();getbe();/*滤除空格滤除空格*/switch(s)case a:case b:case Z:现在学习的是第29页,共73页 while(l
24、etter()digit()concatenation();/*将当前读入的字符送入将当前读入的字符送入token数组数组*/getchar();retract();/*扫描指针回退一个字符扫描指针回退一个字符*/c=reserve();if(c=0)buildlist();/*将标识符登录到符号表中将标识符登录到符号表中*/return(id,指向指向id的符号表入口指针的符号表入口指针);现在学习的是第30页,共73页else return(保留字码保留字码,null);case 0:case 1:case 9:while(digit()concatenation();getchar();
25、现在学习的是第31页,共73页retract();buildlist();/*将常数登录到常数表中将常数登录到常数表中*/return(num,num的常数表入口指针的常数表入口指针);case+:return(+,null);case-:return(-,null);case*:return(*,null);现在学习的是第32页,共73页case:getchar();if(character=)return(relop,LE);else retract();return(relop,LT);case=:getchar();现在学习的是第33页,共73页if(character=)return
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 词法分析优秀PPT 词法 分析 优秀 PPT
限制150内