精品课程《编译原理》ppt课件Chapt3词法分析-.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《精品课程《编译原理》ppt课件Chapt3词法分析-.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理 精品课程 编译 原理 ppt 课件 Chapt3 词法 分析
- 资源描述:
-
1、国防科技大学计算机系国防科技大学计算机系602教研室教研室复习:复习:程序语言的语法描述程序语言的语法描述 n几个概念几个概念:考虑一个考虑一个有穷有穷 字母表字母表 字符集字符集其中每一个元素称为一个其中每一个元素称为一个字符字符上的上的字字(也叫也叫字符串字符串)是指由是指由中的字符所构中的字符所构成的一个有穷序列成的一个有穷序列不包含任何字符的序列称为不包含任何字符的序列称为空字空字,记为,记为用用*表示表示上的所有字的全体上的所有字的全体,包含空字包含空字国防科技大学计算机系国防科技大学计算机系602教研室教研室复习:复习:程序语言的语法描述程序语言的语法描述 n*的子集的子集U和和V
2、的的连接连接(积积)定义为)定义为UV|U&V nV自身的自身的 n次积记为次积记为Vn=VVVn规定规定V0=,令,令 V*=V0V1V2V3 称称V*是是V的的闭包闭包;n记记 VVV*,称,称V+是是V的正规闭包。的正规闭包。国防科技大学计算机系国防科技大学计算机系602教研室教研室复习:复习:程序语言的语法描述程序语言的语法描述 n上下文无关文法的定义:上下文无关文法的定义:一个上下文无关文法一个上下文无关文法G G是一个四元式是一个四元式 G=(VG=(VT T,V VN N,S S,P)P),其中,其中V VT T:终结符集合:终结符集合(非空非空)V VN N:非终结符集合:非终
3、结符集合(非空非空),且,且V VT T V VN N=S S:文法的开始符号,:文法的开始符号,S S V VN NP P:产生式集合:产生式集合(有限有限),每个产生式形式为,每个产生式形式为P P,P P V VN N,(V VT T V VN N)*开始符开始符S S至少必须在某个产生式的左部出现一次。至少必须在某个产生式的左部出现一次。国防科技大学计算机系国防科技大学计算机系602教研室教研室复习:复习:程序语言的语法描述程序语言的语法描述 n定义:称定义:称 A 直接推出直接推出,即,即 A 仅当仅当A 是一个产生式,是一个产生式,且且,(VT VN)*。n如果如果 1 2 n,则
4、我们称这个序,则我们称这个序列是从列是从 1到到 n的一个的一个推导推导。若存在一个从。若存在一个从 1到到 n的推导,则称的推导,则称 1可以可以推导推导出出 n。国防科技大学计算机系国防科技大学计算机系602教研室教研室n通常,用通常,用 表示:从表示:从 1 1出发,经过出发,经过一步或若干步,可以推出一步或若干步,可以推出 n n。n1n*1 用用 表示:从表示:从 1 1出发,经过出发,经过0 0步或步或若干步,可以推出若干步,可以推出 n n。*所以所以 :即即 或或*S,|)(*TV SGLq定义:假定定义:假定G G是一个文法,是一个文法,S S 是它的开始符号。是它的开始符号
5、。如果如果 ,则,则 称是一个称是一个句型句型。仅含终结符。仅含终结符号的句型是一个号的句型是一个句子句子。文法。文法G G所产生的句子的全所产生的句子的全体是一个体是一个语言语言,将它记为,将它记为 L(G)L(G)。国防科技大学计算机系国防科技大学计算机系602教研室教研室复习:复习:程序语言的语法描述程序语言的语法描述 n最左推导最左推导:任何一步:任何一步 都是对都是对 中的最中的最左非终结符进行替换。左非终结符进行替换。最右推导最右推导:任何一步:任何一步 都是对都是对 中的最中的最右非终结符进行替换。右非终结符进行替换。国防科技大学计算机系国防科技大学计算机系602教研室教研室复习
6、:复习:程序语言的语法描述程序语言的语法描述 n用一张图表示一个句型的推导用一张图表示一个句型的推导,称为称为语法树语法树。Ei+*()EiiEEEEE(E)(E+E)(E*E+E)(i*E+E)(i*i+E)(i*i+i)E(E)(E+E)(E+i)(E*E+i)(E*i+i)(i*i+i)国防科技大学计算机系国防科技大学计算机系602教研室教研室复习:复习:程序语言的语法描述程序语言的语法描述 n定义定义:如果一个文法存在某个句子对应两如果一个文法存在某个句子对应两颗不同的语法树颗不同的语法树,则说这个则说这个文法是二义的文法是二义的。n语言的二义性:一个语言的二义性:一个语言是二义性的语
7、言是二义性的,如,如果对它不存在无二义性的文法。果对它不存在无二义性的文法。国防科技大学计算机系国防科技大学计算机系602教研室教研室复习:复习:程序语言的语法描述程序语言的语法描述 n形式语言鸟瞰形式语言鸟瞰0型型(短语文法,图灵机短语文法,图灵机):产生式形如:产生式形如:其中:其中:(VT VN)*且至少含有一个非终结符;且至少含有一个非终结符;(VT VN)*1型型(上下文有关文法,线性界限自动机上下文有关文法,线性界限自动机):产生式形如:产生式形如:其中:其中:|,仅,仅 S 例外。例外。国防科技大学计算机系国防科技大学计算机系602教研室教研室复习:复习:程序语言的语法描述程序语
8、言的语法描述 n形式语言鸟瞰形式语言鸟瞰 2型型(上下文无关文法,非确定下推自动机上下文无关文法,非确定下推自动机):产生式形如:产生式形如:A 其中:其中:A VN;(VT VN)*。3型型(正规文法,有限自动机正规文法,有限自动机):产生式形如:产生式形如:A B 或或 A 其中:其中:VT*;A,B VN 产生式形如:产生式形如:A B 或或 A 其中:其中:VT*;A,B VN国防科技大学计算机系国防科技大学计算机系602教研室教研室第三章第三章 词法分析词法分析n词法分析的任务:从左至右逐个字符地词法分析的任务:从左至右逐个字符地对源程序进行扫描,产生一个个单词符对源程序进行扫描,产
9、生一个个单词符号。号。n词法分析器词法分析器(Lexical Analyzer)又称扫描又称扫描器器(Scanner):执行词法分析的程序:执行词法分析的程序国防科技大学计算机系国防科技大学计算机系602教研室教研室3.13.1 对于词法分析器的要求对于词法分析器的要求一、词法分析器的功能和输出形式一、词法分析器的功能和输出形式n功能功能:输入源程序、输出单词符号输入源程序、输出单词符号n单词符号的种类:单词符号的种类:基本字基本字:如:如 beginbegin,repeatrepeat,标识符标识符表示各种名字:如变量名、数组表示各种名字:如变量名、数组名和过程名名和过程名常数常数:各种类型
10、的常数:各种类型的常数运算符运算符:+,-,*,/,界符界符:逗号、分号、括号和空白:逗号、分号、括号和空白国防科技大学计算机系国防科技大学计算机系602教研室教研室n输出的单词符号的表示形式输出的单词符号的表示形式:(单词种别单词种别,单词自身的值单词自身的值)n单词种别通常用整数编码表示。单词种别通常用整数编码表示。若一个种别只有一个单词符号,则种别编若一个种别只有一个单词符号,则种别编码就代表该单词符号。假定基本字、运算码就代表该单词符号。假定基本字、运算符和界符都是一符一种。符和界符都是一符一种。若一个种别有多个单词符号,则对于每个若一个种别有多个单词符号,则对于每个单词符号,给出种别
11、编码和自身的值。单词符号,给出种别编码和自身的值。n标识符单列一种;标识符自身的值表示成标识符单列一种;标识符自身的值表示成按机器字节划分的内部码。按机器字节划分的内部码。n常数按类型分种;常数的值则表示成标准常数按类型分种;常数的值则表示成标准的二进制形式。的二进制形式。国防科技大学计算机系国防科技大学计算机系602教研室教研室例例 C程序程序n while(i=j)i-;n输出单词符号:输出单词符号:=,-国防科技大学计算机系国防科技大学计算机系602教研室教研室例例 FORTRAN程序程序nIF(5.EQ.M)GOTO 100IF(5.EQ.M)GOTO 100n输出单词符号:输出单词符
12、号:逻辑逻辑IFIF(34(34,-)-)左括号左括号(2(2,-)-)整常数整常数(20(20,55的二进制的二进制)等号等号(6(6,-)-)标识符标识符(26(26,M)M)右括号右括号(16(16,-)-)GOTOGOTO(30(30,-)-)标号标号(19(19,100100的二进制的二进制)国防科技大学计算机系国防科技大学计算机系602教研室教研室二、词法分析器作为一个独立子程序二、词法分析器作为一个独立子程序n词法分析是作为一个独立的阶段,是否词法分析是作为一个独立的阶段,是否应当将其处理为一遍呢?应当将其处理为一遍呢?作为独立阶段的优点:结构简洁、清晰和条作为独立阶段的优点:结
13、构简洁、清晰和条理化,有利于集中考虑词法分析一些枝节问理化,有利于集中考虑词法分析一些枝节问题。题。不作为一遍:将其处理为一个子程序。不作为一遍:将其处理为一个子程序。国防科技大学计算机系国防科技大学计算机系602教研室教研室词法分析器词法分析器词法分词法分析器析器语法分语法分析器析器符号表符号表源程序源程序单词符号单词符号取下一单词取下一单词.国防科技大学计算机系国防科技大学计算机系602教研室教研室词法分析器的结构词法分析器的结构预处理预处理子程序子程序扫描器扫描器输入缓冲区输入缓冲区扫描缓冲区扫描缓冲区单词符号单词符号输入输入列表列表3.2 词法分析器的设计词法分析器的设计国防科技大学计
14、算机系国防科技大学计算机系602教研室教研室n输入串放在输入缓冲区中。输入串放在输入缓冲区中。n预处理子程序:剔除无用的空白、跳格、预处理子程序:剔除无用的空白、跳格、回车和换行等编辑性字符回车和换行等编辑性字符;区分标号区、区分标号区、捻接续行和给出句末符等捻接续行和给出句末符等n扫描缓冲区扫描缓冲区 起点起点 搜索搜索指示器指示器 指示器指示器一、输入、预处理一、输入、预处理国防科技大学计算机系国防科技大学计算机系602教研室教研室 WhatALongWord WhatALongWo rdrd WhatALongWord WhatALongWo国防科技大学计算机系国防科技大学计算机系602
15、教研室教研室二、单词符号的识别二、单词符号的识别:超前搜索超前搜索1 基本字识别基本字识别:例如例如:DO99K=1,10 DO 99 K=1,10 IF(5.EQ.M)GOTO55 IF(5.EQ.M)GOTO 55DO99K=1.10IF(5)=55n需要超前搜索才能确定哪些是基本字需要超前搜索才能确定哪些是基本字国防科技大学计算机系国防科技大学计算机系602教研室教研室2 标识符识别标识符识别:n字母开头的字母数字串,后跟界符或算符字母开头的字母数字串,后跟界符或算符3 常数识别常数识别:n识别出算术常数并将其转变为二进制内码识别出算术常数并将其转变为二进制内码表示。有些也要超前搜索。表
16、示。有些也要超前搜索。5.EQ.M 5.E084 算符和界符的识别算符和界符的识别n把多个字符符合而成的算符和界符拼合成把多个字符符合而成的算符和界符拼合成一个单一单词符号。一个单一单词符号。:=,*,.EQ.,+,-,=国防科技大学计算机系国防科技大学计算机系602教研室教研室三三、状态转换图状态转换图1 1 概念概念n状态转换图是一张有限方向图。状态转换图是一张有限方向图。213XY结点代表状态,用圆圈表示结点代表状态,用圆圈表示。状态之间用箭弧连结,箭弧状态之间用箭弧连结,箭弧上的标记上的标记(字符字符)代表射出结代表射出结状态下可能出现的输入字符状态下可能出现的输入字符或字符类。或字符
17、类。一张转换图只包含有限个状态,其中一张转换图只包含有限个状态,其中有一个为初态,至少要有一个终态。有一个为初态,至少要有一个终态。国防科技大学计算机系国防科技大学计算机系602教研室教研室识别标识符的状态转换图识别标识符的状态转换图123字母字母其他其他字母或数字字母或数字*识别识别整常数整常数的状态转换图的状态转换图123数字数字其他其他数字数字*n一个状态转换图可用于识别一个状态转换图可用于识别(或接受或接受)一定一定的字符串。的字符串。国防科技大学计算机系国防科技大学计算机系602教研室教研室2 2 例子例子q助忆符助忆符:直接用编码表示不便于记忆,:直接用编码表示不便于记忆,因此用助
18、忆符来表示编码。因此用助忆符来表示编码。国防科技大学计算机系国防科技大学计算机系602教研室教研室单单 词词 符符 号号 种种 别别 编编 码码 助助 忆忆 符符 内内 码码 值值 D DI IM M 1 1$D DI IM M -I IF F 2 2$I IF F -D DO O 3 3$D DO O -S ST TO OP P 4 4$S ST TO OP P -E EN ND D 5 5$E EN ND D -标标 识识 符符 6 6$I ID D 内内 部部 字字 符符 串串 常常 数数(数数)7 7$I IN NT T 标标 准准 二二 进进 制制 形形 式式 =8 8$A AS S
19、S SI IG GN N -_ _ 9 9$P PL LU US S -*1 10 0$S ST TA AR R -*1 11 1$P PO OW WE ER R -,1 12 2$C CO OM MM MA A -(1 13 3$L LP PA AR R -)1 14 4$R RP PA AR R -国防科技大学计算机系国防科技大学计算机系602教研室教研室1 12 23 34 45 56 67 78 89 910101111121213130 0空白空白字母字母字母或数字字母或数字非字母与数字非字母与数字数字数字非数字非数字数字数字=+*非非*,()其它其它*国防科技大学计算机系国防科技大
20、学计算机系602教研室教研室n几点重要限制几点重要限制不必使用超前搜索不必使用超前搜索所有基本字都是保留字所有基本字都是保留字;用户不能用它们作自用户不能用它们作自己的标识符己的标识符基本字作为特殊的标识符来处理基本字作为特殊的标识符来处理;不用特殊的不用特殊的状态图来识别,只要查保留字表。状态图来识别,只要查保留字表。如果基本字、标识符和常数如果基本字、标识符和常数(或标号或标号)之间没之间没有确定的运算符或界符作间隔,则必须使用一有确定的运算符或界符作间隔,则必须使用一个空白符作间隔。个空白符作间隔。DO99K=1,10 要写成要写成 DO 99 K=1,10国防科技大学计算机系国防科技大
21、学计算机系602教研室教研室3 状态转换图的实现状态转换图的实现n思想:每个状态结对应一小段程序。思想:每个状态结对应一小段程序。n做法做法:1)1)对不含回路的分叉结,可用一个对不含回路的分叉结,可用一个CASECASE语句或语句或一组一组IF-THEN-ELSEIF-THEN-ELSE语句实现语句实现GetChar();if(IsLetter()状态状态j的对应程序段的对应程序段;else if(IsDigit()状态状态k的对应程序段的对应程序段;else if(ch=/)状态状态l的对应程序段的对应程序段;else 错误处理错误处理;ijkl字母字母数字数字国防科技大学计算机系国防科技
22、大学计算机系602教研室教研室3 状态转换图的实现状态转换图的实现2)2)对含回路的状态结,可对应一段由对含回路的状态结,可对应一段由WHILEWHILE结构结构和和IFIF语句构成的程序语句构成的程序.i字母或数字字母或数字其它其它jGetChar();while(IsLetter()or IsDigit()GetChar();状态状态j的对应程序段的对应程序段国防科技大学计算机系国防科技大学计算机系602教研室教研室3 状态转换图的实现状态转换图的实现3)终态结表示识别出某种单词符号,因此,对应终态结表示识别出某种单词符号,因此,对应语句为语句为 RETURN(C,VAL)其中,其中,C为
23、单词种别,为单词种别,VAL为单词自身值为单词自身值.国防科技大学计算机系国防科技大学计算机系602教研室教研室n全局变量与过程全局变量与过程1)ch 字符变量、存放最新读入的源程序字符变量、存放最新读入的源程序字符字符2)strToken 字符数组,存放构成单词符字符数组,存放构成单词符号的字符串号的字符串3)GetChar 子程序过程,把下一个字符子程序过程,把下一个字符读入到读入到 ch 中中4)GetBC 子程序过程,跳过空白符,直子程序过程,跳过空白符,直至至 ch 中读入一非空白符中读入一非空白符5)Concat 子程序,把子程序,把ch中的字符连接到中的字符连接到 strToke
24、n 国防科技大学计算机系国防科技大学计算机系602教研室教研室6)IsLetter和和 IsDisgital 布尔函数,布尔函数,判断判断ch中字符是否为字母中字符是否为字母和数字和数字7)Reserve 整型函数,对于整型函数,对于 strToken 中的字符串查找保留字表,若它实保留字中的字符串查找保留字表,若它实保留字则给出它的编码,否则回送则给出它的编码,否则回送08)Retract 子程序,把搜索指针回调一子程序,把搜索指针回调一个字符位置个字符位置9)InsertId 整型函数,将整型函数,将strToken中中的标识符插入符号表,返回符号表指针的标识符插入符号表,返回符号表指针1
25、0)InsertConst 整型函数过程,将整型函数过程,将strToken中的常数插入常数表,返回常中的常数插入常数表,返回常数表指针。数表指针。国防科技大学计算机系国防科技大学计算机系602教研室教研室int code,value;strToken:=“”;/*置置strToken为空串为空串*/GetChar();GetBC();if(IsLetter()beginwhile(IsLetter()or IsDigit()beginConcat();GetChar();endRetract();code:=Reserve();if(code=0)beginvalue:=InsertId(s
展开阅读全文