编译原理(2)词法-1(正规表达式和有限自动机简介).pptVIP

编译原理(2)词法-1(正规表达式和有限自动机简介).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第2讲;第二章《词法分析》前三节

2.1词法分析器的设计方法

2.2一个简单的词法分析器

2.3正规表达式与有限自动机简介

重点掌握

状态转换图的概念

正规表达式的概念和运算;第二章词法分析;回忆词法分析器:

定位

词法分析是编译的第一个阶段

任务

从左至右逐个字符地对源程序进行扫描,产生一个个单词〔Token〕符号

功能

输入源程序,输出单词符号〔流〕

不断访问、更新符号表;词法分析器的处理结构〔2种〕:

第一种:词法分析器和语法分析器完全分开

词法分析器的输出〔单词符号流〕作为语法分析器的输入

将词法分析工作作为独立的一遍来完成,在这个过程中不断查询和完善符号表;词法分析器的处理结构〔2种〕:

第二种:词法分析器作为语法分析器调用的子程序

每当语法分析器需要一个单词时便调用词法分析器

词法分析和语法分析交替进行;2.1.1:单词符号的分类与输出形式

分类:单词符号是程序语言的根本语法单位,具有确定的语法意义。程序语言的单词符号通常可分为下面五种:

保存字:如C语言中的if、else、while和do等

几乎所有的程序语言都禁止用户使用保存字作为标识符

标识符:用户自己定义的常量名、变量名、方法名等

常数:布尔常数〔true/false〕和其它常数

运算符:“+”、“-?”、“?*?”、“/?”、“”、“”等

界符:在语言中是作为语法上的分界符号使用的,如“,”、“;”、“(”、“)”、“=”等;2.1.1:单词符号的分类与输出形式

输出形式:单词符号通常表示成如下的二元式:

〔单词种别,单词自身的值/内码值〕

1、单词种别:即单词的种类。为了处理方便,通常让每种单词对应一个整数码,可以最大限度地将每个单词区别开来

保存字:可以统一视为一种,也可一字一种〔后一种较常用〕

标识符:统一归为一种

常数:可统一归为一种或按照整型、实型、布尔型等分为几种

运算符和界符可统一归为一种或采用一符一种;2.1.1:单词符号的分类与输出形式

2、单词自身的值

如果一个种别只含一个单词符号,对于这个单词符号,种别编码就完全代表它自身的值

如果一个种别含有多个单词符号,除了给出种别编码之外,还应给出单词符号自身的值,以便区分同一种类的单词

;例如:if(a1)b=100;

如果采用每种单词对应一个整数码,对应的二元式序列?

假设五类单词的种别规定如下:

保存字if种别:2

标识符种别:10

常量种别:11

“=”种别:17

“”种别:23

“;”种别:26

“(”种别:29

“)”种别:30

;2.1.2:状态转换图〔概念〕

上一小节解决了单词符号的表示,但是如何识别单词呢?

答:借助“状态转换图”

在词法分析中,可以用状态转换图来识别单词。状态转换图是状态有限的有向图,结点代表状态,用圆圈表示;结点之间可由有向边连接,代表状态转换关系,有向边上可标记字符,表示前一状态接受某一个字符之后的状态转移

;2.1.2:状态转换图〔表示〕

状态转换图的要求

状态〔即结点〕个数有限

至少一个初始状态,假设干终止状态

每条边上标有字符〔也可以是空字符〕

状态转换图的表示习惯

初始状态用“○”表示

非终止状态用“○”表示

状态之间的跳转用“”〔有向边〕表示

终止状态用“◎*”表示;2.1.2:状态转换图〔表示〕

特别说明:终止状态用“◎*”表示

某些终止状态是在读入了一个其它不属于该单词的符号后才得到相应的单词编码的,这说明在识别单词的过程中多读入了一个符号,所以识别出单词后应将最后多读入的这个符号予以回退;我们对此类情况的处理是在终态上以“*”作为标识。;2.1.2:状态转换图〔举例〕

;图2-4(a)含分支的状态i;第二章词法分析;2.2一个简单的词法分析器例如;2.2.1:C语言子集的单词符号表示

使用种别编码不利于记忆,故使用助记符和种别编码对应

;2.2.1:C语言子集的单词符号表示

;2.2.2:C语言子集对应的状态转换图

对输出程序串预处理

在设计的状态转换图中,首先对输入串做预处理,即剔除多余的空白符(在实际的词法分析中,预处理还包括剔除注释和制表换行符等编辑性字符的工作),使词法分析工作既简单又清晰。

将保存字作为一类特殊的标识符来处理

即对保存字不专设对应的状态转换图,当转换图识别出一个标识符时就去查对表2.1的前五项,确定它是否为一个保存字。当然,也可以专设一个保存字表来进行处理。;;2.2.2:C语言子集对应的状态转换图

特别注意:状态2在识别标识符和保存字时:

1、先看识别出的单词是否是保存字,否那么是标识符

2、如果是标识符,查符号表中是否已有,如果表中没有此标

文档评论(0)

199****8042 + 关注
实名认证
文档贡献者

相信自己,相信明天

1亿VIP精品文档

相关文档