程序设计语言与编译原理-第六章词法分析课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《程序设计语言与编译原理-第六章词法分析课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计语言 编译 原理 第六 词法 分析 课件
- 资源描述:
-
1、程序设计语言与编译 主要内容主要内容1.介绍词法分析的过程2.讨论词法分析器的设计与实现3.介绍实现词法分析器的主要工具:程序设计语言与编译第一节第一节 词法分析概述词法分析概述一一.词法分析的功能词法分析的功能1.1.功能功能扫描源程序的字符串,按照词法规则,识别出单词符号作为输出;对识别过程中发现的词法错误,则输出有关的错误信息。程序设计语言与编译功能:输入源程序,输出单词符号。单词功能:输入源程序,输出单词符号。单词符号是一个程序语言的基本语法符号。符号是一个程序语言的基本语法符号。3 3程序设计语言与编译词法分析器的词法分析器的功能功能:输入源程序,输出单词符号。:输入源程序,输出单词
2、符号。单词符号单词符号:一个程序语言的基本语法符号。分为以下:一个程序语言的基本语法符号。分为以下5 5种。种。1 1、保留字保留字(关键字关键字):由程序语言定义的具有固定意义的标:由程序语言定义的具有固定意义的标识符。也可称为保留字或基本字。例如:识符。也可称为保留字或基本字。例如:PascalPascal中的中的beginbegin,endend,ifif等。它是等。它是确定确定的。的。2 2、标识符标识符:用来表示各种名字,如变量名、数组名、过程:用来表示各种名字,如变量名、数组名、过程名等。它是名等。它是不限不限的。的。3 3、常数常数:常数的类型一般有整型、实型、布尔型、文字型:常
3、数的类型一般有整型、实型、布尔型、文字型等。它是等。它是不限不限的。的。4 4、运算符运算符:如:如+、-、*、/等。它是等。它是确定确定的。的。5 5、界符界符:如逗号、分号、括号、:如逗号、分号、括号、/*,*/等。它是等。它是确定确定的。的。确定确定不限不限二二.词法分析器的输出形式词法分析器的输出形式程序设计语言与编译5 5程序设计语言与编译 (单词类别,单词的属性)区分单词所属的类区分单词所属的类(整数编码整数编码)单词的值单词的值2.2.单词的输出形式单词的输出形式(1)(1)二元式二元式 单词符号的表示形式单词符号的表示形式:词法分析器所输出的单词符号常常表示成:词法分析器所输出
4、的单词符号常常表示成 二元式(单词种别,单词自身的值)二元式(单词种别,单词自身的值)。单词种别单词种别可以用以下形式表示:可以用以下形式表示:1 1、一类单词统一用一个整数值代表其属性。例如:、一类单词统一用一个整数值代表其属性。例如:1 1代表关键字,代表关键字,2 2代表标识符等。代表标识符等。2 2、每一个单词一个类别。例如:、每一个单词一个类别。例如:1 1代表代表BEGINBEGIN,2 2代表代表ENDEND等。等。单词自身的值单词自身的值可以表示成:常量的二进制表示;常量、变量等在符号表可以表示成:常量的二进制表示;常量、变量等在符号表种的地址码,等等。种的地址码,等等。程序设
5、计语言与编译(2 2)单词类别的划分)单词类别的划分基本字、运算符、界符基本字、运算符、界符:一字一码一字一码标识符标识符:单列一种单列一种常数常数:按类型分类按类型分类 程序设计语言与编译一个例子A:=B50+10;的输出为:(标识符的编码,A)(:=的编码,)(标识符的编码,B50)(的编码,)(整数的编码,10)(;的编码,)程序设计语言与编译注意:注意:一个语言的单词符号如何分种,分几种,怎一个语言的单词符号如何分种,分几种,怎样编码,是一个技术问题。标识符一般同归为一种。样编码,是一个技术问题。标识符一般同归为一种。常数则宜按类型(整、实、布尔)分。关键字可以常数则宜按类型(整、实、
6、布尔)分。关键字可以将其全体视为一种,也可将其全体视为一种,也可一字一种一字一种。运算符可采用运算符可采用一符一种,但也可把具有一定共性的视为一种。界一符一种,但也可把具有一定共性的视为一种。界符则一般采用符则一般采用一符一种一符一种。如何进行分种主要取决于。如何进行分种主要取决于处理上的方便。处理上的方便。若是一符一种分种,单词自身值就不需要了若是一符一种分种,单词自身值就不需要了。否则,要查符号表。否则,要查符号表。程序设计语言与编译例:例:151151FORTRANFORTRAN编译程序的词法分析器在扫描输入串编译程序的词法分析器在扫描输入串 IF(5EQIF(5EQM)GOTO 100
7、M)GOTO 100 后,它输出的后,它输出的单词符号串单词符号串是:是:逻辑逻辑IF IF (3434,_ _)左括号左括号 (2 2,_ _)整常数整常数 (2020,55的二进制表示)的二进制表示)等号等号 (6 6,_ _)标识符标识符 (2626,MM)右括号右括号 (1616,_ _)GOTO GOTO (3030,_ _)标号标号 (1919,100100的二进制表示)的二进制表示)IFIF为关键字,种别编码为关键字,种别编码3434,采用一符一种的编码方式。采用一符一种的编码方式。常数类型,种别编码常数类型,种别编码2020,单词自,单词自身的值为身的值为55的二进制表示。的二
8、进制表示。(为界符,种别编码为界符,种别编码2 2,采,采用一符一种的编码方式。用一符一种的编码方式。等号为运算符,种别编码等号为运算符,种别编码6 6,采用一符一种的编码方式。采用一符一种的编码方式。M M为标识符,种别编码为标识符,种别编码2626,单,单词自身值为词自身值为MM。)为界符,种别编码为界符,种别编码1616,采用一符一种的编码方式。采用一符一种的编码方式。GOTOGOTO为关键字,种别编码为关键字,种别编码3030,采用一符一种的编码方式。采用一符一种的编码方式。100100为标号,种别编码为标号,种别编码1919,单词,单词内部的值用内部的值用100100的二进制表示。的
9、二进制表示。程序设计语言与编译例例 :下述:下述C+C+代码段:代码段:while(i=j)i-while(i=j)i-;经词法分析器处理以后,它将被转换为如下的经词法分析器处理以后,它将被转换为如下的单词符号串单词符号串 (while(while,_)_)(,_)_)(id(id,指向,指向i i的符号表指针的符号表指针 )(=(=,_)_)(id(id,指向,指向j j的符号表指针的符号表指针 )()(),_)_)(id(id,指向,指向i i的符号表指针的符号表指针 )(-(-,_ _)(;,_)_)程序设计语言与编译词法分析程序的实现方式词法分析程序的实现方式u完全独立方式完全独立方式
10、:词法分析程序作为:词法分析程序作为单独一趟单独一趟来来实现。词法分析程序读入整个源程序,它的输实现。词法分析程序读入整个源程序,它的输出作为语法分析程序的输入。出作为语法分析程序的输入。u相对独立方式相对独立方式:把词法分析程序作为语法分析:把词法分析程序作为语法分析程序的一个独立程序的一个独立子程序子程序。语法分析程序需要新。语法分析程序需要新符号时调用这个子程序。符号时调用这个子程序。2.词法分析器作为一个独立子程序词法分析器作为一个独立子程序1212程序设计语言与编译完全独立方式完全独立方式u采用词法分析工作完全独立的原因:采用词法分析工作完全独立的原因:简化设计,降低语法分析的复杂性
11、简化设计,降低语法分析的复杂性提高编译效率提高编译效率增加编译系统的可移植性增加编译系统的可移植性 源程序词法分析程序语法分析程序属性字序列属性字序列.1313程序设计语言与编译相对独立方式相对独立方式u当采用递归下降分析等技术实现一趟编译程当采用递归下降分析等技术实现一趟编译程序时常采用这种方式。序时常采用这种方式。词法分词法分析器析器语法分语法分析器析器符号表符号表源程序源程序单词符号单词符号取下一单词取下一单词.1414程序设计语言与编译设计前提设计前提:把把scannerscanner作为一个独立的子程序;作为一个独立的子程序;词法分析器的任务为输出单词符号。词法分析器的任务为输出单词
12、符号。必要性必要性:编辑性字符如空白符、回车符等,除了出现在文字和编辑性字符如空白符、回车符等,除了出现在文字和 常数中以外,在别处出现都没有意义。常数中以外,在别处出现都没有意义。功功 能能:剔除无用字符。剔除无用字符。实实 现现:预处理子程序。预处理子程序。程序设计语言与编译输入列表预处理预处理子程序子程序扫描器扫描器扫描缓冲区扫描缓冲区输入缓冲区输入缓冲区单词符号图图 词法分析器词法分析器语法分析器语法分析器预预处处理理部部分分扫扫描描器器程序设计语言与编译一一.扫描缓冲区扫描缓冲区1.1.输入缓冲区输入缓冲区:源程序输入缓冲区2.2.预处理程序:预处理程序:取消注解,剔除无用的空白、跳
13、格、回车、换行等 程序设计语言与编译3.3.扫描缓冲区扫描缓冲区:从输入缓冲区输入固定长度的字符串到另一个缓冲区(扫描缓冲区),词法分析可以直接在此缓冲区中进行符号识别。扫描缓冲区的结构:扫描缓冲区的结构:用来指示正在扫描的单词的起点;:用于向前搜索,寻找单词的结束;:设置左右两个缓冲区,当左缓冲区读完后,新读入的字符存入右缓冲区;反之,存放在左缓冲区;左缓冲区左缓冲区右缓冲区右缓冲区起点指示器起点指示器搜索指示器搜索指示器 程序设计语言与编译u扫描缓冲区的大小扫描缓冲区的大小应当保证单词符号不被缓冲区的边界打断应当保证单词符号不被缓冲区的边界打断扫描缓冲区使用一个一分为二的区域 使用循环链表
14、实现使用循环链表实现规定单词符号的大小不超过整个链表的容量规定单词符号的大小不超过整个链表的容量起始指针起始指针搜索指针搜索指针1919程序设计语言与编译二二.符号的识别符号的识别根据语言规定的词法规则,进行识别;对不同类型的单词符号,有不同的识别要求。超前搜索超前搜索 词法分析程序在读取单词时,为了判断词法分析程序在读取单词时,为了判断是否已读入整个单词的全部字符,常采是否已读入整个单词的全部字符,常采取向前多读取字符并通过读取的字符来取向前多读取字符并通过读取的字符来判别,即所谓判别,即所谓超前搜索技术超前搜索技术。程序设计语言与编译 例如:在标准例如:在标准FORTRANFORTRAN中
15、中 1 1、DO99KDO99K=1,10=1,10 2 2、IFIF(5.EQ.M)I=10(5.EQ.M)I=10 3 3、DO99KDO99K=1.10=1.10 4 4、IFIF(5)=55(5)=55 其中的其中的DODO、IFIF为关键字为关键字其中的其中的DODO、IFIF为标识符为标识符的一部分的一部分程序设计语言与编译(2)标识符的识别:多数语言的标识符是字母开头的多数语言的标识符是字母开头的“字字母母/数字数字”串,而且在程序中标识符的出现后都跟着算符或界符。因此,串,而且在程序中标识符的出现后都跟着算符或界符。因此,不难识别。不难识别。(3)常数的识别:根据常数的格式;大
16、多数常数后都有运算根据常数的格式;大多数常数后都有运算符或界符。如符或界符。如FORTRANFORTRAN的的5.E085.E08与与5.EQ.M5.EQ.M也必须超前搜索。也必须超前搜索。(4)运算符的识别:需要超前搜索,需要超前搜索,对于诸如对于诸如C+C+语言中的语言中的“+”+”、“-”-”,这种复合成的算符,需要超前搜索。,这种复合成的算符,需要超前搜索。(5)界符的识别:需要超前搜索,如需要超前搜索,如/*程序设计语言与编译是设计词法分析器的有效工具。是设计词法分析器的有效工具。转换图:转换图:是一张有限方向图。在状态转换图中,是一张有限方向图。在状态转换图中,结点结点代表代表 状
17、态,状态,用圆圈表示。状态之间用用圆圈表示。状态之间用箭弧箭弧连接。箭弧上连接。箭弧上的的标记(字符)标记(字符)代表在射出结状态下可能出现的输代表在射出结状态下可能出现的输入字符或字符类。入字符或字符类。状态转换图的功能状态转换图的功能:用于识别一定的字符串。用于识别一定的字符串。初态初态:一张转换图的启动条件,至少有一个:一张转换图的启动条件,至少有一个,用圆圈表示。用圆圈表示。终态终态:一张转换图的结束条件,至少有一个,用双圈表示。:一张转换图的结束条件,至少有一个,用双圈表示。*:表示多读进了一个字符。:表示多读进了一个字符。程序设计语言与编译 (node):圆圈表示结点,代表状态(s
18、tate)(弧):连接结点,边上的标记字符表示该状态下可能接收或识别的字符;1 12 23 3x xy y有限的有向图有向边上标记字符唯一初态若干终态(至少一个)程序设计语言与编译1 12 23 3XY(a)(a)转换图示例转换图示例2 20 01 1字母字母其他其他字母或数字字母或数字*(b b)识别标识符的转换图)识别标识符的转换图其他其他2 20 01 1数字数字数字数字*(c c)识别整数的转换图)识别整数的转换图简单的状态转换图示例:简单的状态转换图示例:初态初态终态终态从从0 0状态到状态到1 1状态状态可能出现字母可能出现字母程序设计语言与编译7 7*6 65 5数字数字1 10
19、 01 1数字数字数字数字2 2数字数字3 3E E 或或 D D+或或数字数字其他其他E E 或或 D D数字数字其他其他数字数字例:识别例:识别FORTRANFORTRAN实型常数实型常数的转换图:的转换图:例如下列实型常数可以例如下列实型常数可以被以下转换图识别:被以下转换图识别:1.23E+41.23E+4 .56E-7 .56E-7程序设计语言与编译第四章设计的语言允许下述单词:标识符、数字串、begin、end、integer、if、then、else、function、read、write、-、*、=、=、=、:=、;、(、)词法分析器的设计与实现词法分析器的设计与实现一一.单词
20、符号单词符号 程序设计语言与编译 单词符号 种别编码助忆符内码值begin01$BEGIN-end02$END-integer03$INTEGER-if04$IF-then05$THEN-else06$ELSE-function07$FUNCTION-read08$READ-write09$WRITE-单词符号 种别编码助忆符内码值标识符10$ID字符串常数11$INT二进制值=12$EQ-13$NE-=14$LE-=16$GE17$GT-程序设计语言与编译 单词符号 种别编码助忆符内码值-18$SUB-*19$MUL-:=20$ASSIGN-(21$LPAR-)22$RPAR-;23$SEM
21、-程序设计语言与编译 0 01 12 2字母字母字母字母/数字数字其它字符其它字符3 34 4数字数字数字数字非数字非数字5 5=6 67 7 10101111 非非=1212=1313-1414*15151616:=1717非非=1818(1919)2020;2121其他其他退一字符;查保留字表;退一字符;查保留字表;若是,返回若是,返回若不是,返回若不是,返回退一字符;退一字符;返回返回返回返回返回返回,退一字符,退一字符返回返回返回返回返回返回,退一字符,退一字符返回返回返回返回返回返回返回返回出错处理出错处理返回返回返回返回返回返回ERRORERROR,非法字符,非法字符二二.状态转换
22、图状态转换图*程序设计语言与编译 为了把为了把状态转换图状态转换图转化成转化成程序程序,每个,每个状态状态要建立一段要建立一段程序程序,它要做的工作如下:,它要做的工作如下:第一步第一步:从输入缓冲区中取一个字符。为此,我们使用函:从输入缓冲区中取一个字符。为此,我们使用函数数GETCHARGETCHAR,每次调用它,推进先行指针,送回一,每次调用它,推进先行指针,送回一个字符。个字符。第二步第二步:确定在本状态下,哪一条箭弧是用刚刚来的输入:确定在本状态下,哪一条箭弧是用刚刚来的输入字符标识的。如果找到,控制就转到该弧所指向字符标识的。如果找到,控制就转到该弧所指向的状态;若找不到,那么寻找
23、该单词的企图就失的状态;若找不到,那么寻找该单词的企图就失败了。败了。失失 败败:先行指针必须:先行指针必须重新回到重新回到开始指针处,并用另一状开始指针处,并用另一状态图来搜索态图来搜索另一另一单词。如果所有的状态转换图都单词。如果所有的状态转换图都试过之后,还没有匹配的,就表明这是一个词法试过之后,还没有匹配的,就表明这是一个词法错误,此时,调用错误校正程序。错误,此时,调用错误校正程序。GETCHAR是过程,是过程,将下一输入字符读入将下一输入字符读入CHAR,搜索指示器,搜索指示器前移一个字符。前移一个字符。程序设计语言与编译每个状态结对应一小段程序 分支状态分支状态if或case语句
24、 循环状态循环状态while语句 终态终态return语句三三.实现方法实现方法 程序设计语言与编译3333状态转换图的实现状态转换图的实现u思想:每个状态结思想:每个状态结点点对应一小段程序。对应一小段程序。u做法做法:1)对不含回路的分叉结,可用一个对不含回路的分叉结,可用一个CASE语句或语句或一组一组IF-THEN-ELSE语句实现语句实现GetChar();GetChar();if(IsLetter()if(IsLetter()状态状态j j的对应程序段的对应程序段;else if(IsDigit()else if(IsDigit()状态状态k k的对应程序段的对应程序段;else
25、if(ch=/)else if(ch=/)状态状态l l的对应程序段的对应程序段;else else 错误处理错误处理;ijkl字母字母数字数字/程序设计语言与编译34342)对含回路的状态结,可对应一段由对含回路的状态结,可对应一段由WHILE结构和结构和IF语句构成的程序语句构成的程序.i字母或数字字母或数字其它其它jGetChar();while(IsLetter()or IsDigit()GetChar();状态状态j的对应程序段的对应程序段3)3)终态结终态结点表示识别出某种单词符号点表示识别出某种单词符号,因此,因此,对应语句为对应语句为 RETURN(CRETURN(C,VAL)
展开阅读全文