第三章 词法分析优秀PPT.ppt
《第三章 词法分析优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第三章 词法分析优秀PPT.ppt(84页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章 词法分析1现在学习的是第1页,共84页3.1 对于词法分析器的要求 词法分析器的功能 输入源程序,输出单词符号。单词符号是一个程序语言的基本语法符号。程序语言的单词符号分类 关键字(for while)标识符(x1 xname)运算符(+*)界符 (;)常数 (23 “abcdf”)功能和输出形式2现在学习的是第2页,共84页单词符号 一个程序语言的关键字、运算符和界符都是确定的。但对于标识符和常数的使用是灵活的。词法分析器所输出的单词符号形式:(单词种别,属性值)单词种别通常用整数编码。属性值是反映单词符号特性或特征的值。本书假定 关键字、运算符和界符都是一符一种;标识符为一种;常数
2、按类型分种。3现在学习的是第3页,共84页例如:C的代码段while (x=y)x-;=,-经词法分析器处理后,输出如下序列:4现在学习的是第4页,共84页词法分析器作为一个独立子程序 好处 使整个编译程序的结构更简单、清晰和条理化。因为词法分析比语法分析要简单得多,可用更有效的特殊方法和工具进行处理。讨论 是否可以把词法分析器作为独立一遍呢?5现在学习的是第5页,共84页3.2 词法分析器的设计 常常按词法分析的任务和作为一个独立子程序来考虑它的设计。3.2.13.2.1 输入、预处理 词法分析器的第一步工作是输入源程序文本到一个输入缓冲区中。这样,词法分析的工作可以直接在这个缓冲区中进行。
3、在许多情况下,常常把输入串预处理一下,目的是为了方便单词符号的识别。预处理的工作是将源程序中多余的空白符、跳格符、回车符、换行符等编辑性字符以及注释部分剔除掉,并将结果存入扫描缓冲区中。6现在学习的是第6页,共84页词法分析器 预处理子程序词法分析器单词符号输入缓冲区扫描缓冲区源程序7现在学习的是第7页,共84页扫描缓冲区 词法分析器对扫描缓冲区进行扫描时,一般用两个指示器(P1,P2):一个指向当前正在识别的单词的开始位置,另一个用于向前搜索以寻找单词的终点。P1 P2 120个字符120个字符|标识符|=120个字符|常数|=120个字符 while(x100)8现在学习的是第8页,共84
4、页单词符号的识别-超前搜索关键字的识别(Fortran)例如:(1)do99k=1,10 do 99 k=1,10 (2)do99k=1.10 do99k是变量标识符的识别常数的识别 例如:(1)5.E-8 5-8 (2)5.EQ.M 5=M算符和界符的识别例如:+,+=,=9现在学习的是第9页,共84页 状态转换图 状态转换图是设计词法分析程序的一个好途径。转换图是一张有限的有向图。结点代表状态,用圆圈表示,状态之间用箭弧连接。箭弧上的标记代表在射出结点状态下可能出现的输入字符或字符类。一张转换图只能含有有限个状态,其中一个被认为是初态,可以有一个或多个终态(双圈)。10现在学习的是第10页
5、,共84页例如 字母字母数字 数字数字其它 其它(a)识别标识符的状态图 (b)识别整数的状态图*一个状态转换图可用于识别(或接受)一定的字符串。3311现在学习的是第11页,共84页 大多数程序语言的单词符号都可以用转换图予以识别。作为一个综合例子,我们来构造一个识别某个简单语言的所有单词符号的转换图。P42表3.1中列出了这个小语言所有单词以及它们的种别和内部值。单词符号的识别12现在学习的是第12页,共84页单词单词符号符号种别种别编码编码内码值内码值beginbeginendendififthenthenelseelsewhilewhiledodo标识符标识符整常数整常数1 12 23
6、 34 45 56 67 710101111-内部字符串内部字符串二进制形式二进制形式单词单词符号符号种别种别编码编码内码值内码值+-*/=:=:=;1313141415151616171718181919212122222323-小语言单词符号及内部表示小语言单词符号及内部表示13现在学习的是第13页,共84页词法分析的状态转换图*非字母或数字 字母 数字 非数字空白 数字*非*其它103*字母或数字 13 见P43 7*14现在学习的是第14页,共84页3.2.4 状态转换图的实现 状态转换图很容易用程序实现。最简单的办法是让每个状态结点对应一小段程序。假设已有一组全局变量和过程,将它们作
7、为实现转换图的基本部分。这些变量和过程见P44。词法分析器算法见P45。15现在学习的是第15页,共84页 ch=GetChar();GetBC();if(IsLetter(ch)/*进入关键字或标识符识别状态*/while(IsLetter(ch)|IsDigit(ch)Concat();ch=Getchar();Retract();/*回退一个字符位置*/code=Reserve();/*查找保留字表 */if(!code)return(code,-);else value=InsertId(strToken);return($ID,value);else /*进入其它单词符号的判断状态
8、*/16现在学习的是第16页,共84页状态转换图的实现状态转换图的实现 状态转换图容易用程序实现。最简单的办法是让状态转换图容易用程序实现。最简单的办法是让每个状态结点对应一每个状态结点对应一小段程序小段程序。下面引进一组。下面引进一组全局变量和过程全局变量和过程,将它们作为实现转换图的基,将它们作为实现转换图的基本部分。这些变量和过程是:本部分。这些变量和过程是:(1)(1)chch字符变量,存放最新读进的源程序字符。字符变量,存放最新读进的源程序字符。(2)(2)strTokenstrToken字符数组,存放构成单词符号的字符串。字符数组,存放构成单词符号的字符串。(3)(3)GetCha
9、rGetChar读字符函数,从输入缓冲区中读进源程序的读字符函数,从输入缓冲区中读进源程序的下一个字符到下一个字符到 chch,并把读字符指针指向下一,并把读字符指针指向下一个字符。个字符。(4)(4)GetBCGetBC函数,检查函数,检查 ch ch 中的字符是否为空白字符,中的字符是否为空白字符,若是空白字符,则反复调用若是空白字符,则反复调用 GetChar()GetChar(),直,直到到 ch ch 中读入一个非空白字符为止。中读入一个非空白字符为止。17现在学习的是第17页,共84页(5)(5)ConcatConcat函数,将函数,将 ch ch 中的字符与中的字符与 token
10、 token 中的字符中的字符串连接。串连接。(6)(6)IsLetterIsLetterIsDigitIsDigit布尔函数,分别判断布尔函数,分别判断 ch ch 中的字符是否为字中的字符是否为字符或数字。符或数字。(7)(7)ReserveReserve整数函数,对整数函数,对 token token 中的字符串查找关键中的字符串查找关键字表,若它是一个关键字则返回它的编码,字表,若它是一个关键字则返回它的编码,否则返回标识符的种别码否则返回标识符的种别码 1010。(8)(8)RetractRetract函数,读字符指针回调一个字符位置。函数,读字符指针回调一个字符位置。(9)(9)R
11、eturnReturn函数,收集并携带必要的信息返回调用程序,函数,收集并携带必要的信息返回调用程序,即返回语法分析程序。即返回语法分析程序。(10)(10)dtbdtb十进制转换函数,将十进制转换函数,将 token token 中的数字串转中的数字串转换成二进制数值表示,并以此作为函数值返换成二进制数值表示,并以此作为函数值返回。回。18现在学习的是第18页,共84页思考题:1.令=a,b,画出接受上含有偶数个 a 的字符串的状态转换图。2.2.画出状态转换图,它接受=0,1上所有满足如下条件的字符串:每个1都有0直接跟在右边。aabb120010012119现在学习的是第19页,共84页
12、3.3 正规表达式与有限自动机 词法分析器的自动生成可依据正规表达式和有限自动机的理论。实际上,状态转换图与正规表达式和有限自动机在描述语言能力方面是等价的。3.3.1 正规式与正规集 对于字母表,我们感兴趣的是它的一些特殊字集,即正规集。我们将使用正规式这个概念来表示正规集。下面是正规式和正规集的递归定义:1)和都是上的正规式,它们所表示的正规集分别为和;2)任何a,a是上的一个正规式,它所表示的正规集为a;20现在学习的是第20页,共84页正规式和正规集的递归定义(续)3)假定U和V都是上的正规式,它们所表示的正规集分别记为L(U)和L(V),那么,(U|V)、(UV)和(U)*也都是正规
13、式。它们所表示的正规集分别为L(U)L(V)、L(U)L(V)(连接积)和(L(U)*(闭包)。仅由有限次使用上述三步骤而得到的表达式才是上的正规式。仅由这些正规式所表示的字集才是上的正规集正规集。算符的优先顺序:先“*”,次“”,后“|”。21现在学习的是第21页,共84页例3.1 令=a,b,下面是上的正规式和相应的正规集。正规式 正规集 ba*上所有以b为首,后跟任 意多个a的字。a(a|b)*上所有以a为首的字。(a|b)*(aa|bb)(a|b)*上所有含有两个相继的a 或两个相继的b的字。22现在学习的是第22页,共84页例3.2 令=a,b,0,1,则:正规式 正规集(a|b)(
14、a|b|0|1)(a|b)(a|b|0|1)*上的“标识符”的全体 (0|1)(0|1)(0|1)(0|1)*上的“数”的全体23现在学习的是第23页,共84页正规式的等价性若两个正规式所表示的正规集相同,则称两者等价。例如 b(ab)*=(ba)*b (a|b)*=(a*|b*)*令U、V和W均为正规式,则下列关系成立:1)U|V=V|U 交换律2)U(V|W)=(U|V)|W 结合律3)U(VW)=(UV)W 结合律4)U(V|W)=UV|UW 分配律 (V|W)U=VU|WU 5)U=U=U注意:UVVU24现在学习的是第24页,共84页思考题:写出下面正规式1.令=a,b,含有偶数个a
15、的上的字符串。2.2.每个1都有0直接跟在右边的二进制串。(b*|ab*a)*(0|10)*aabb1200125现在学习的是第25页,共84页确定的有限自动机一个确定有限自动机(DFA)M 是一个五元式:M=(S,sM=(S,s0 0 ,F),F)其中:1)S是一个有限集,它的每个元素称为一个状态。2)是一个有穷字母表,它的每个元素称为一个输入字符。3)是一个从S至 S的单值部分映射。(s,a)=s 意味着:当现行状态为s、输入字符为a时,将转换到下一下一状态状态s。我们称s为s的一个后继。4)s0S,是唯一唯一的初态。5)F S 是一个终态集(可空)。26现在学习的是第26页,共84页状态
16、转换矩阵一个DFA可用一个矩阵表示,该矩阵的行表示状态,列表示输入字符,矩阵元素表示(s,a)的值。这个矩阵称为状态转换矩阵。例3.2 有DFADFA M M=(=(S S,s s0 0 ,F F)其中:S S=0,1,2,3,=0,1,2,3,=a,b,=a,b,s s0 0 =0,=0,F F=3,=3,(0,a)=1(0,a)=1 (0,b)=2(0,b)=2 (1,a)=3(1,a)=3 (1,b)=2(1,b)=2 (2,a)=1(2,a)=1 (2,b)=3(2,b)=3 (3,a)=3(3,a)=3 (3,b)=3(3,b)=327现在学习的是第27页,共84页状态转换矩阵 状态
17、转换图 字符状态ab 0 1 2 1 3 2 2 1 3 3 3 30 aaabbba,b 28现在学习的是第28页,共84页DFA M 接受的语言 对于*中的任何字,若存在一条从初态到某一终态结点的通路,且这条通路上的所有弧的标记符连接成的字等于,则称可为DFA MDFA M所识别(或接受)。DFA M 所能识别的字的全体,称为DFA M所接受的语言,记为L(M)L(M)。注意:若 M 的初态结点又是终态结点,则空字可被M所识别。29现在学习的是第29页,共84页例如:有DFA MDFA M 如下:0 aaabbba,b M可接收的字:aa bb aaa aab babb abaa baaa
18、 abbbM接收的语言为:含有两个相继a或b的a,b字符串。30现在学习的是第30页,共84页非确定的有限自动机一个非确定有限自动机(NFANFA)M 是一个五元式:M=(S,SM=(S,S0 0 ,F),F)其中:1)S是一个有限集,它的每个元素称为一个状态。2)是一个有穷字母表,它的每个元素称为一个输入字符。3)是一个从S*至 S的幂集的映射,即:S:S*2S4)S0 S,是一个非空初态集。5)F S 是一个终态集(可空)。31现在学习的是第31页,共84页同样,一个 NFA MNFA M 也可表示成状态转换图。NFA状态转换图与DFA状态转换图的主要区别:(1)箭弧上的标记可以不同。DF
19、A的标记是 上的单个字符,而NFA的标记是*上的字(可以是字);(2)映射函数的定义不同,DFA的是单值函数,而NFA的是多值函数。0DFA00NFA32现在学习的是第32页,共84页 对于*中的任何字,若存在一条从某个初态到某一终态结点的通路,且这条通路上所有弧的标记字依序连接成的字(忽略字)等于,则称可为NFA M 所识别(或接受)。NFA M 所能识别的字的全体,称为NFA M所接受的语言,记为L(M)L(M)。NFA M 接受的语言33现在学习的是第33页,共84页例如:下图就是一个NFA M 它所能识别的是含有两个相继 a a 或两个相继 b b 的字符串。x y aaaabbbb
20、34现在学习的是第34页,共84页NFA 与 DFA 等价 显然,DFA 是 NFA 的特例。但是可以证明对于每个NFA M,都存在一个DFA M”,使 L(M)=L(M”)证明:(构造性证明)(1)假定NFA M=,对M 的状态转换图进行以下改造:引进新的初态结点X X和终态结点Y Y,并且X、Y S,从X到S0的任意状态结点连一条箭弧,从F中任意状 态结点连一条箭弧到Y。35现在学习的是第35页,共84页对M的状态转换图进行如下替换:代之以 k k 代之以 代之以 k k 重复这种分裂过程直至状态转换图中的每条箭弧上的标记或为,或为 中的单个字母。将最终得到的NFA记为M。显然,L(M)=
21、L(M)ABA|BABBAA*A36现在学习的是第36页,共84页(2)将 NFA M 进一步变换成等价的DFA M”方法如下:假定 I 是M的状态集的子集,定义I的闭包_CLOSURE(I)为:若qI,则 q_CLOSURE(I);若qI,那么从q出发经过任意条弧而能达到的任何状态q 都_CLOSURE(I)假定 I 是M的状态子集,a,定义Ia=_CLOSURE(J)_CLOSURE(J)其中,J J是那些可以从I I中的某一状态结点出发经过一条a弧而到达的状态结点的全体。37现在学习的是第37页,共84页 假定=a1,ak。构造一张含有k+1列的表 置该表的首行首列为_CLOSURE(X
22、)。若某行第一列状态子集I已确定,求出其它列Iai i (i=1,2,k),然后检查该行上的所有状态子集,将其未出现在第一列的状态子集填入后面空行的第一列。重复上述过程,直至所有状态子集均在该表的第一列出现过。因为M的状态子集的个数是有限的,所以上述过程必定在有限步内终止。38现在学习的是第38页,共84页(3)将所构造出的表视为状态转换矩阵 将其中每个状态子集视为一个新的状态。显然,该表唯一刻划了一个DFA M”。它的初态就是该表中的首行首列的那个状态子集,终态是那些含有原终态Y的状态子集对应的新状态。显然,L(M)=L(M)=L(M”)L(M)=L(M)=L(M”)。上述把 NFA 确定化
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三章 词法分析优秀PPT 第三 词法 分析 优秀 PPT
限制150内