第3章 词法分析精选PPT.ppt
《第3章 词法分析精选PPT.ppt》由会员分享,可在线阅读,更多相关《第3章 词法分析精选PPT.ppt(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章 词法分析第1页,本讲稿共73页n任务任务n扫描或词法分析阶段将源程序读作字符文件并将其分为若扫描或词法分析阶段将源程序读作字符文件并将其分为若干个单词。干个单词。n词法分析的处理结构词法分析的处理结构n(1)把词法分析程序作为主程序。把词法分析程序作为主程序。n(2)把词法分析程序作为语法分析程序调用的子程序。把词法分析程序作为语法分析程序调用的子程序。n由由于于把把词词法法分分析析器器安安排排成成一一个个子子程程序序比比较较自自然然,因因此此,词词法分析程序通常采用第二种处理结构。法分析程序通常采用第二种处理结构。第2页,本讲稿共73页词法分析的两种处理结构词法分析的两种处理结构(a
2、)词法分析程序作为主程序词法分析程序作为主程序(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,“inr”)(=,_)
4、(id,“inr”)(+,_)(num,368)(;,_)(else,_)(id,“inr”)(=,_)(id,“inr”)(*,_)(id,“inr”)(;,_)第8页,本讲稿共73页n剔除空白符和注释剔除空白符和注释空白符包括空格、制表符、换行符等。空白符包括空格、制表符、换行符等。n常数常数把数字组合成常数,用一个单词类别(例如把数字组合成常数,用一个单词类别(例如num)来表示所有的常数,而常数的值作为单词(这里是来表示所有的常数,而常数的值作为单词(这里是num)的值。单词和单词的值一起传递给语法分析)的值。单词和单词的值一起传递给语法分析器。例如,输入器。例如,输入31+28+59
5、经过词法分析输出经过词法分析输出(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|digit)*的并置表示两者的连接;的并置表示两者的连接;“|”表示
10、两个表达式二者选一,表示两个表达式二者选一,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是是 上的正规式,表示的正规集为上的正规式,表示的正规集为L(R)L(S);R S是是 上的正规式,
12、表示的正规集为上的正规式,表示的正规集为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页n正规表达式的性质正规表达式的性质(1)交换律:交换律:R|S=S|R。(2)结
14、合律:结合律: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,bb,aaa,aab,aba,abb,baa,bab,aba,bbb,,表示由零个或多
15、个,表示由零个或多个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,a2,a3,=a,a,a2,=aa*=L(a)L(a*)=L(aa*)故故 a+=aa*第19
16、页,本讲稿共73页3.3 单词的识别单词的识别n状态转换图状态转换图(state transition diagram)n在词法分析中,可以用状态转换图识别单词。在词法分析中,可以用状态转换图识别单词。n状态转换图是有向图,结点代表状态,用圆圈表示;状态转换图是有向图,结点代表状态,用圆圈表示;结点之间可由有向边连接,有向边上可标记字符。结点之间可由有向边连接,有向边上可标记字符。从结点从结点i指向结点指向结点j标记字符标记字符x的有向边表示在状态的有向边表示在状态i下,下,若输入字符为若输入字符为x,则读入,则读入x并转换到状态并转换到状态j。ijx第20页,本讲稿共73页n状态(即结点)数
17、是有限的,其中必有一初始状态(简称状态(即结点)数是有限的,其中必有一初始状态(简称初态,一般用初态,一般用start标记)以及若干终止状态(简称终标记)以及若干终止状态(简称终态),终止状态的结点用双圈表示以区别于其它状态。态),终止状态的结点用双圈表示以区别于其它状态。n从初态出发,状态转换图有向边上的字符逐个与输入字从初态出发,状态转换图有向边上的字符逐个与输入字符匹配,若达到终态,则输入字符构成该状态转换图识符匹配,若达到终态,则输入字符构成该状态转换图识别出的一个单词。别出的一个单词。第21页,本讲稿共73页标识符及无符号数的状态转换图标识符及无符号数的状态转换图(a)标标识识符符;
18、(b)无无符符号号整整数数;(c)无无符符号号数数例如,用于识别标识符、无符号整数、无符号数的状态转换例如,用于识别标识符、无符号整数、无符号数的状态转换图,其初始状态均用图,其初始状态均用0状态表示。状态表示。第22页,本讲稿共73页n某些终止状态是在读入了一个其它不属于该单词的符号某些终止状态是在读入了一个其它不属于该单词的符号后才得到相应的单词编码的,这表明在识别单词的过程后才得到相应的单词编码的,这表明在识别单词的过程中多读入了一个符号,所以识别出单词后应将最后多读中多读入了一个符号,所以识别出单词后应将最后多读入的这个符号予以回退;我们对此类情况的处理是在终入的这个符号予以回退;我们
19、对此类情况的处理是在终态上以态上以“*”作为标识。作为标识。n以模式以模式“=”和和“”的状态转换图为例。的状态转换图为例。0678start=*other第23页,本讲稿共73页n状态转换图的实现状态转换图的实现n状态转换图非常容易用程序实现,最简单的办法是让每状态转换图非常容易用程序实现,最简单的办法是让每个状态对应一小段程序。个状态对应一小段程序。n对于不含回路的分支状态来说,可以让它对应一个对于不含回路的分支状态来说,可以让它对应一个switch()语句或一组语句或一组if-else语句。语句。n对于含回路的状态来说,可以让它对应一个对于含回路的状态来说,可以让它对应一个while语语
20、句。句。n终态一般对应一个终态一般对应一个return()语句;语句;return意味着从词法分意味着从词法分析器返回到调用段,一般指返回到语法分析器。析器返回到调用段,一般指返回到语法分析器。n程序的大小与图中状态数和边数成正比。程序的大小与图中状态数和边数成正比。第24页,本讲稿共73页C语言子集的单词符号及内码值语言子集的单词符号及内码值单词单词种别编码种别编码助记符助记符内码值内码值while1whileif2ifelse3elseswitch4switchcase5case标识符标识符6idid在符号表中的位置在符号表中的位置常数常数7numnum在常数表中的位置在常数表中的位置+8
21、+9*10*=11relopLE11relopLT=11relopEQ=12=;13;综合例子:一个综合例子:一个C语言子集的简单词法分析器语言子集的简单词法分析器第25页,本讲稿共73页简单词法分析的状态转换图简单词法分析的状态转换图 第26页,本讲稿共73页(1)character:字字符符变变量量,存存放放最最新新读读入入的的源源程程序序字字符。符。(2)token:字符数组,用来存放构成单词的字符串。:字符数组,用来存放构成单词的字符串。(3)getbe():过滤空白字符。:过滤空白字符。(4)concatenation():将:将token中的字符串与中的字符串与character中
22、的字符连接作为中的字符连接作为token中新的字符串。中新的字符串。(5)letter()和和digit():判判断断character中中的的字字符符是是否否为为字字母母和和数数字字的的布布尔尔函函数数,是是则则返返回回true,否否则返回则返回false。第27页,本讲稿共73页(6)reserve():按按token数数组组中中的的字字符符串串查查表表判判别别其其是是否否为为保保留留字字,若若是是保保留留字字则则返返回回它它的的编编码码,否否则则返回返回0值。值。(7)retract():扫描指针回退一个字符,同时将:扫描指针回退一个字符,同时将character置为空白。置为空白。(8
23、)buildlist():将将标标识识符符登登录录到到符符号号表表或或将将常常数数登登录录到常数表。到常数表。(9)error():出现非法字符,显示出错信息。:出现非法字符,显示出错信息。第28页,本讲稿共73页token0=0;/*对对token数组初始化数组初始化*/s=getchar();getbe();/*滤除空格滤除空格*/switch(s)case a:case b:case Z:第29页,本讲稿共73页 while(letter()digit()concatenation();/*将当前读入的字符送入将当前读入的字符送入token数组数组*/getchar();retract(
24、);/*扫描指针回退一个字符扫描指针回退一个字符*/c=reserve();if(c=0)buildlist();/*将标识符登录到符号表中将标识符登录到符号表中*/return(id,指向指向id的符号表入口指针的符号表入口指针);第30页,本讲稿共73页else return(保留字码保留字码,null);case 0:case 1:case 9:while(digit()concatenation();getchar();第31页,本讲稿共73页retract();buildlist();/*将常数登录到常数表中将常数登录到常数表中*/return(num,num的常数表入口指针的常数表
25、入口指针);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(relop,EQ);else retract();return(=,_);case;:return(;,_);default:error();第34页,本讲稿共73页3.4 有穷自动机
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 词法分析精选PPT 词法 分析 精选 PPT
限制150内