编译原理简明教程(第3版)-课件 第4章 词法分析_第1页
编译原理简明教程(第3版)-课件 第4章 词法分析_第2页
编译原理简明教程(第3版)-课件 第4章 词法分析_第3页
编译原理简明教程(第3版)-课件 第4章 词法分析_第4页
编译原理简明教程(第3版)-课件 第4章 词法分析_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

新工科建设·计算机类系列教材

免费提供编译原理16目录第一章

概述第二章形式语言理论基础第三章自动机理论基础第四章词法分析第五章语法分析—自顶向下分析方法第六章语法分析—自底向上分析方法第七章语义分析及中间代码的生成第八章代码优化第九章目标代码的生成第十章符号表和出错处理第十一章

面向对象语言的编译第十二章

并行编译技术第十三章

软件构造4词法分析学习目标词法分析是编译过程的第一步,其主要任务是对源程序进行扫描,从中识别出单词,是编译过程中不可缺少的部分。重点:词法分析的过程;单词的形式、种类;词法分析程序的设计方法3

目录4.1词法分析概述4.2词法分析程序4.3词法分析程序的自动生成4.4本章小结44.1词法分析概述4.1.1词法分析的功能词法分析程序的主要功能

输入源程序输出单词符号单词符号(单词):程序语言具有独立意义的最小语法单位属性字:单词的一种机内表示(反映单词的有关特性).54.1.1词法分析的功能包括处理说明部分·把单词的全部属性都识别出来不必包括处理说明部分·不把单词的全部属性都识别出来词法分析分为两类64.1.1词法分析的功能识别单词从用户的源程序中把单词分离出来;生成属性字把单词转换成机内表示,便于后续处理。词法分析又称为扫描器,任务有两个:74.1.2词法分析的两种处理结构词法分析是主程序:词法分析程序字符串表示的源程序源程序字符字符语法分析是主程序,词法分析是子程序:源程序字符词法分析程序单词回送8符号表语法分析程序4.1.3单词符号的种类保留字(关键字)常数标识符界限符(特殊符号)程序语言定义的具有固定意义的标识符如:Pascal中的begin、end、if、while…。用来表示各种名字.如:变量名、数组名、过程名等。如:128、0.123、3.14E-2…。如:+、-、*、/、>=、<=、》=、《=等。单词符号94.1.4词法分析程序的输出形式

一般采用二元式

一个语言的单词符号分为几类,如何分类、怎样编码,是一个技术性问题,主要取决于处理上的方便。

如:标识符分为一类

常数且按类型(整数、实数)分类

保留字可分为一类,也可一字一类

界限符可分为一类,也可一符一类

单词类别单词符号的属性值对于采用一字一类、一符一类,不需再给出单词的值。10

但若一个类别中含多个单词符号,还需给出相应的值(按某种编码)例如:对于标识符,常把存放它的有关信息的符号表项的指针作为属性值。对于常数,常把存放它的常数表项的指针作为属性值。11标识符保留字常数特殊符号4.2词法分析程序4.2.1词法分析程序的设计与实现初始化读字符是字母?读标识符数字?取数字查常量表生成属性字写到输出流是否分析结束结束特殊符号?出错查特殊符号表生成属性字查保留字表查到?查名字表生成属性字生成属性字YYYYNNNNYN124.2.2单词的识别单词的文法规则:<标识符>→<字母>|<标识符><字母>|<标识符><数字><无符号整数>→<数字>|<无符号整数><数字><特殊符号>→+|-|*|<=|…单词的状态转换图如下13标识符或保留字

数实数(无指数部分)带指数的实数

加号

减号

乘号

除号

等于

小于

小于等于

不等于144.2.3无符号数的识别文法规则如下:<无符号数>→<无符号实数>|<无符号整数><无符号实数>→<无符号整数>.<数字串>[E<比例因子>]|<无符号整数>E<比例因子><比例因子>→<有符号整数><有符号整数>→[+|-]<无符号整数><无符号整数>→<数字串><数字串>→<数字>{<数字>}<数字>→0|1|2…|915

设无符号数为:

t=….…E…(整数部分)(小数部分)(指数部分)

令W=…

…1

P=…

e=

则t=W-1

读无符号数的程序流程图见图4.7164.2.4标识符的识别<标识符>→<字母>{<字母>|<数字>}<字母>→A|B|C|…|Z|a|b|…|z<数字>→0|1|2|…|9保留字是特殊的标识符特殊处理事先构造保留字表事先构造保留字树规定保留字在源程序中用分界符括起来

174.3词法分析程序的自动生成4.3.1基本思想通常可通过两种途径来构造词法分析程序:

手工方式和自动生成

1、手工方式根据对语言中各类单词的描述或定义,手工构造词法分析程序。如:可根据文法或状态转换图构造相应的状态矩阵,读状态矩阵同控制程序一起组成了编译程序的词法分析程序。

也可根据文法或状态转换图利用某种语言(汇编或高级语言)直接编写词法分析程序。184.3词法分析程序的自动生成2、自动生成

只要给出某语言各类单词词法结构的文法描述(如正则式),以及各类单词在词法分析时应采取的语义动作,自动生成系统。对上述信息进行加工,即可得到所需的词法分析程序,例:RWORD、LEXLEX是美国Bell实验室1975年用C语言研制的一个词法分析程序的自动生成工具。

LEX源程序LEX编译系统词法分析程序194.3.2LEX源程序结构辅助定义转换规则(识别规则)用户子程序(代码)LEX源程序201、辅助定义在使用LEX语言时,先将高级语言的词法写成辅助定义式(类似宏定义)。例:⑴标识符letter→A|B…|a|b…|zdigit→0|1|…|9ident→letter(letter|digit)*⑵整常数integer→digit(digit)*21⑶一般实常数

sign→+|-|εsigninteger→signintegerdecimal→eger|eger⑷

含指数部分的实数

exprel→(decimal|signinteger)E

signinteger⑸

实常数real→decimal|exprel222.识别规则(规定了相应词法分析程序的功能){}是定义在υ{,,…,}上的正则表达式—词型{}是语义动作(一个可执行的程序段)例:整常数:digit{val=int(id);求整型值return(16);return(val)}return()子程序;16:单词的类别编码23标识符:

letter

{if(keyword(id)!=0)return(keyword(id));else{return(15);return(id)}}

keyword()查保留字表,=0未查到243.用户子程序(辅助函数部分)

用户编写的函数代码(可被识别规则调用)4.3.3LEX编译程序工作过程

Ⅰ根据每条Pi,构造相应NFAⅡ将各NFA连成一个完整的NFAⅢ由NFA构造状态转换矩阵ⅣNFA→DFAⅤ根据DFA及识别规则构造词法分析程序254.3.4LEX的实现

经LEX编译后得到词法分析程序由两部分组成:

一张状态转换矩阵表(DFA)和一个控制程序可看作是如下形式的有限自动机

P1|P2|…|Pn

当输入的单词与Pj匹配时,就进行相应的动作(返回Ai所定义的单词属性)Pi例P66264.3.5LEX的使用方式

单独使用:开发编辑器、模式识别等

与YACC等结合使用:生成扫描器和语法分析器27284.4本章小结1.词法分析程序的工作是从输入源代码中取得单词,以作为语法分析

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论