编译原理(2)词法1(正规表达式与有限自动机简介)ppt课件.ppt
《编译原理(2)词法1(正规表达式与有限自动机简介)ppt课件.ppt》由会员分享,可在线阅读,更多相关《编译原理(2)词法1(正规表达式与有限自动机简介)ppt课件.ppt(38页珍藏版)》请在三一办公上搜索。
1、第 2 讲,编译原理,西北农林科技大学本科教程,主讲教师:赵建邦,第二章词法分析前三节2.1 词法分析器的设计方法2.2 一个简单的词法分析器2.3 正规表达式与有限自动机简介重点掌握 状态转换图的概念正规表达式的概念和运算,本讲目标,第二章 词法分析,2.1 词法分析器的设计方法2.2 一个简单的词法分析器2.3 正规表达式与有限自动机简介2.4 正规表达式到有限自动机的构造2.5 词法分析器的自动生成,回顾词法分析器:定位词法分析是编译的第一个阶段任务从左至右逐个字符地对源程序进行扫描,产生一个个单词(Token)符号功能输入源程序,输出单词符号(流)不断访问、更新符号表,2.1 词法分析
2、器的设计方法,词法分析器的处理结构(2种):第一种:词法分析器和语法分析器完全分开词法分析器的输出(单词符号流)作为语法分析器的输入 将词法分析工作作为独立的一遍来完成,在这个过程中不断查询和完善符号表,2.1 词法分析器的设计方法,图2-1(a) 词法分析程序作为主程序,词法分析器的处理结构(2种):第二种:词法分析器作为语法分析器调用的子程序每当语法分析器需要一个单词时便调用词法分析器词法分析和语法分析交替进行,2.1 词法分析器的设计方法,图2-1 (b) 词法分析程序作为子程序,2.1.1:单词符号的分类与输出形式分类:单词符号是程序语言的基本语法单位,具有确定的语法意义。程序语言的单
3、词符号通常可分为下面五种:保留字:如C语言中的if、else、while和do等几乎所有的程序语言都禁止用户使用保留字作为标识符标识符:用户自己定义的常量名、变量名、方法名等常数:布尔常数(true/false)和其它常数运算符: “+”、“-”、“*”、“/”、“”、“”等界符:在语言中是作为语法上的分界符号使用的,如“,”、“;”、“(”、“)”、“=”等,2.1 词法分析器的设计方法,2.1.1:单词符号的分类与输出形式输出形式:单词符号通常表示成如下的二元式:(单词种别,单词自身的值/内码值)1、单词种别:即单词的种类。为了处理方便,通常让每种单词对应一个整数码,可以最大限度地将每个单
4、词区别开来保留字:可以统一视为一种,也可一字一种(后一种较常用)标识符:统一归为一种常数:可统一归为一种或按照整型、实型、布尔型等分为几种运算符和界符可统一归为一种或采用一符一种,2.1 词法分析器的设计方法,2.1.1:单词符号的分类与输出形式2、单词自身的值如果一个种别只含一个单词符号,对于这个单词符号,种别编码就完全代表它自身的值如果一个种别含有多个单词符号,除了给出种别编码之外,还应给出单词符号自身的值,以便区分同一种类的单词,2.1 词法分析器的设计方法,注意,标识符自身的值就是标识符自身的字符串,而常数自身的值是常数本身的二进制数值(第一种)。也可用指向某类表格中一个特定项目的指针
5、来区分同类中的不同单词。例如,对于标识符,可以用它在符号表的入口指针作为它自身的值;而常数也可用它在常数表的入口指针作为它自身的值(第二种)。,例如:if(a1) b=100;如果采用每种单词对应一个整数码,对应的二元式序列?假如五类单词的种别规定如下:保留字if种别:2标识符种别:10常量种别: 11 “=”种别: 17 “”种别: 23“;”种别: 26“(”种别: 29“)”种别: 30,10,2.1 单词符号分类举例,上面的子程序输出的二元式序列:( 2, ) if ( 29, ) ( 10,a ) a( 23, ) ( 11,1的二进制) 1 ( 30, ) )( 10,b ) b(
6、 17, ) =( 11,100的二进制) 100( 26, ) ;,采用第一种表示,2.1.2:状态转换图(概念)上一小节解决了单词符号的表示,但是如何识别单词呢? 答:借助“状态转换图” 在词法分析中,可以用状态转换图来识别单词。状态转换图是状态有限的有向图,结点代表状态,用圆圈表示;结点之间可由有向边连接,代表状态转换关系,有向边上可标记字符,表示前一状态接受某一个字符之后的状态转移,2.1 词法分析器的设计方法,例如,右图表示在状态i下的状态转换:若输入字符为x,则读入x并转换到状态j;若输入字符为y,则读入y并转换到状态k。,2.1.2:状态转换图(表示)状态转换图的要求状态(即结点
7、)个数有限至少一个初始状态,若干终止状态每条边上标有字符(也可以是空字符)状态转换图的表示习惯初始状态用“ ”表示非终止状态用“”表示状态之间的跳转用“ ”(有向边)表示终止状态用“*”表示,2.1 词法分析器的设计方法,字符,2.1.2:状态转换图(表示)特别说明:终止状态用“*”表示某些终止状态是在读入了一个其它不属于该单词的符号后才得到相应的单词编码的,这表明在识别单词的过程中多读入了一个符号,所以识别出单词后应将最后多读入的这个符号予以回退;我们对此类情况的处理是在终态上以“*”作为标识。,2.1 词法分析器的设计方法,2.1.2:状态转换图(举例),2.1 词法分析器的设计方法,标识
8、符,无符号整数,无符号数字,图2-4(a) 含分支的状态i,2.1 词法分析器的设计方法,图2-4(b) 含回路的状态i,2.1.2:状态转换图(编程)含分支的状态对应一个switch()语句或对应一组if-else语句含回路的状态对应一个while语句终态对应一个return()语句意味着从词法分析器返回到调用段,一般指返回到语法分析器,第二章 词法分析,2.1 词法分析的设计方法2.2 一个简单的词法分析器2.3 正规表达式与有限自动机简介2.4 正规表达式到有限自动机的构造2.5 词法分析器的自动生成,2.2 一个简单的词法分析器示例,大多数程序语言的单词符号都可以用状态转换图予以识别构
9、造一个C语言子集的词法分析器:定义C语言子集的单词符号及内码值C语言子集对应的状态转换图状态转换图的代码实现,2.2.1:C语言子集的单词符号表示使用种别编码不利于记忆,故使用助记符和种别编码对应,2.2 一个简单的词法分析器示例,2.2.1:C语言子集的单词符号表示,2.2 一个简单的词法分析器示例,2.2.2:C语言子集对应的状态转换图对输出程序串预处理在设计的状态转换图中,首先对输入串做预处理,即剔除多余的空白符(在实际的词法分析中,预处理还包括剔除注释和制表换行符等编辑性字符的工作),使词法分析工作既简单又清晰。将保留字作为一类特殊的标识符来处理即对保留字不专设对应的状态转换图,当转换
10、图识别出一个标识符时就去查对表2.1的前五项,确定它是否为一个保留字。当然,也可以专设一个保留字表来进行处理。,2.2 一个简单的词法分析器示例,图2-5 简单词法分析的状态转换图,返回(id,id在符号表中的位置)或返回(保留字,),返回(num,num在常数表中的位置),返回(+,),返回(=,),返回(relop,EQ),返回(;),返回(),非法字符错,21,2.2.2:C语言子集对应的状态转换图特别注意:状态2在识别标识符和保留字时:1、先看识别出的单词是否是保留字,否则是标识符2、如果是标识符,查符号表中是否已有,如果表中没有此标识符,将此标识符登录到符号表中,并返回(id,id在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 词法 正规 表达式 有限 自动机 简介 ppt 课件
链接地址:https://www.31ppt.com/p-1626968.html