[工学]第四章词法分析1课件.ppt

上传人(卖家):三亚风情 文档编号:3368702 上传时间:2022-08-24 格式:PPT 页数:47 大小:439KB
下载 相关 举报
[工学]第四章词法分析1课件.ppt_第1页
第1页 / 共47页
[工学]第四章词法分析1课件.ppt_第2页
第2页 / 共47页
[工学]第四章词法分析1课件.ppt_第3页
第3页 / 共47页
[工学]第四章词法分析1课件.ppt_第4页
第4页 / 共47页
[工学]第四章词法分析1课件.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、计算机教研室2022-8-9第四章:词法分析1/47第四章第四章 词法分析词法分析o 词法分析是编译过程的第一步,其主要任务是对词法分析是编译过程的第一步,其主要任务是对源程序进行扫描,源程序进行扫描,产生一个个的产生一个个的单词单词符号,把作符号,把作为字符串的源程序改造成为单词符号串的中间程为字符串的源程序改造成为单词符号串的中间程序。序。因此,词法分析是编译的基础。执行词法分因此,词法分析是编译的基础。执行词法分析是编译的基础。析是编译的基础。词法分析:根据词法规则识别及组合单词,进行词法分析:根据词法规则识别及组合单词,进行词法检查。词法检查。对数字常数完成数字字符串到(二进制)数值的

2、对数字常数完成数字字符串到(二进制)数值的转换。转换。删去空格字符和注解。删去空格字符和注解。计算机教研室2022-8-9第四章:词法分析2/474.1 4.1 词法分析程序的设计词法分析程序的设计o 任务任务n 执行词法分析的程序称为词法分析器执行词法分析的程序称为词法分析器.n 词法分析器的功能是输入源程序词法分析器的功能是输入源程序,输出单输出单词符号词符号.n 单词符号单词符号是是一个一个程序语言的基本程序语言的基本符号符号。计算机教研室2022-8-9第四章:词法分析3/474.1.24.1.2词法分析程序的输出词法分析程序的输出o 程序语言的程序语言的单词符号一般分为五种单词符号一

3、般分为五种:o 关键字关键字:由程序语言定义的具有固定意义的标识由程序语言定义的具有固定意义的标识符。有时称这些标识符为保留字或基本字。例如,符。有时称这些标识符为保留字或基本字。例如,PascalPascal中的中的beginbegin,endend,if,whileif,while等。等。o 标识符标识符:用来表示各种名字用来表示各种名字,如如:变量名变量名,数组名等数组名等.o 常数常数:整型整型,实型实型,布尔型等布尔型等.o 运算符运算符:+-:+-*/等等.o 界符界符:逗号逗号,分号分号,括号括号,/,/*,*/等等.一个程序语言的关键字一个程序语言的关键字,运算符运算符,界符都

4、是确定的界符都是确定的,一一般只有几十或上百个般只有几十或上百个,而对标识符和常数的使用都而对标识符和常数的使用都不加什么限制不加什么限制.计算机教研室2022-8-9第四章:词法分析4/47单词符号的表示单词符号的表示o 单词符号常常表示成如下二单词符号常常表示成如下二元式元式:(单词种别单词种别,单词符号的属性值单词符号的属性值)o 单词种别可用以下形式表示单词种别可用以下形式表示:n单词种别通常用整数编码单词种别通常用整数编码.n一个语言的单词符号如何分种,分成几种,怎样编码,是一个一个语言的单词符号如何分种,分成几种,怎样编码,是一个技术性的问题。它主要取决于处理上的方便。技术性的问题

5、。它主要取决于处理上的方便。n标识符一般统归一种。常数则宜按类型分种。关键字可将其全标识符一般统归一种。常数则宜按类型分种。关键字可将其全体视为一种,也可以一字一种。运算符可采用一符一种的分法,体视为一种,也可以一字一种。运算符可采用一符一种的分法,但也可以把具有一定共性的运算符视为一种。至于界符一般用但也可以把具有一定共性的运算符视为一种。至于界符一般用一符一种的分法。一符一种的分法。n一类单词统一用一个整数值代表其属性如一类单词统一用一个整数值代表其属性如 1 1 代表保留字代表保留字,2,2 代表标识符等代表标识符等.n每一个单词一个类别每一个单词一个类别.如如 1 1 代表代表BEGI

6、N,2 BEGIN,2 代表代表ENDEND等等.计算机教研室2022-8-9第四章:词法分析5/47n 如果一个种别只含一个单词符号,那么,对于这个单词如果一个种别只含一个单词符号,那么,对于这个单词符号,种别编码就完全代表它自身了。若一个种别含有符号,种别编码就完全代表它自身了。若一个种别含有多个单词符号,那么,对于它的每个单词符号,除了给多个单词符号,那么,对于它的每个单词符号,除了给出种别编码之外,还应给出有关单词符号的属性信息。出种别编码之外,还应给出有关单词符号的属性信息。o 属性值属性值:n 单词符号的属性是指单词符号的特性或特征单词符号的属性是指单词符号的特性或特征.属性值则是

7、属性值则是反应特性或特征的值反应特性或特征的值.n 例如,对于某个标识符,常将存放它的有关信息的符号例如,对于某个标识符,常将存放它的有关信息的符号表项的指针作为其属性值;对于某个常数,则将存放它表项的指针作为其属性值;对于某个常数,则将存放它的常数表项的指针作为其属性值。的常数表项的指针作为其属性值。n 在本书中,假定关键字、运算符和界符都是一符一种。在本书中,假定关键字、运算符和界符都是一符一种。对于它们词法分析器只给出某种别编码,不给出它自身对于它们词法分析器只给出某种别编码,不给出它自身的值。标识符单列一种。常数按类型分种类。的值。标识符单列一种。常数按类型分种类。计算机教研室2022

8、-8-9第四章:词法分析6/47计算机教研室2022-8-9第四章:词法分析7/47计算机教研室2022-8-9第四章:词法分析8/47o 考虑下述考虑下述C+C+代码段:代码段:while(i=j)i-;while(i=j)i-;经词法分析器处理后,它将被转换为如下的单词符号经词法分析器处理后,它将被转换为如下的单词符号序列:序列:id,=,-=,-id,id,计算机教研室2022-8-9第四章:词法分析9/47第二遍第二遍单词串单词串优点优点:结构清晰、各遍功能单一结构清晰、各遍功能单一缺点:效率低缺点:效率低取单词取单词计算机教研室2022-8-9第四章:词法分析10/47词法分析器的设

9、计词法分析器的设计o输入、预处理输入、预处理 1.输入缓冲区输入缓冲区:词法分析器工作的第一步是输入源程序文本。输入串:词法分析器工作的第一步是输入源程序文本。输入串一般是放在一个缓冲区中,这个缓冲区称为输入缓冲区。一般是放在一个缓冲区中,这个缓冲区称为输入缓冲区。2.预处理预处理:就是将程序语言中的空白符、跳格符、回车符、换行符和:就是将程序语言中的空白符、跳格符、回车符、换行符和注解等编辑性字符剔掉。注解等编辑性字符剔掉。3.预处理子程序预处理子程序:就是用来完成编译的预处理。:就是用来完成编译的预处理。4.分析器分析器:分析器对扫描缓冲区进行扫描时一般用两个指示器,一个:分析器对扫描缓冲

10、区进行扫描时一般用两个指示器,一个指向当前正在识别的单词的开始位置,另一个用于向前搜索以寻找单指向当前正在识别的单词的开始位置,另一个用于向前搜索以寻找单词的终点。不论扫描缓冲区设得多大都不能保证单词符号不会被它的词的终点。不论扫描缓冲区设得多大都不能保证单词符号不会被它的边界所打断。因此,扫描缓冲区最好使用一个如下所示的一分为二的边界所打断。因此,扫描缓冲区最好使用一个如下所示的一分为二的区域:区域:起点指示器起点指示器 搜索指示器搜索指示器这意味着对标识符和常数的长度实际上必须加以限制,否则,即使缓冲区这意味着对标识符和常数的长度实际上必须加以限制,否则,即使缓冲区再大也无济于事。再大也无

11、济于事。计算机教研室2022-8-9第四章:词法分析11/47词法分析器的工作方式词法分析器的工作方式计算机教研室2022-8-9第四章:词法分析12/47单词符号的识别:超前搜索单词符号的识别:超前搜索o 在某些语言中,要识别一个单词符号必须超在某些语言中,要识别一个单词符号必须超前看若干字符,直到能区别开这些单词为止,前看若干字符,直到能区别开这些单词为止,常应用在如下几个方面:常应用在如下几个方面:关键字的识别;关键字的识别;标识符的识别;标识符的识别;常数的识别;常数的识别;算符和界符的识别;算符和界符的识别;计算机教研室2022-8-9第四章:词法分析13/47例:关键字的识别例:关

12、键字的识别o 在在FORTRAN语言中,关键字和用户自定义的标示符或语言中,关键字和用户自定义的标示符或标号之间没有特殊的界符作间隔,所以识别比较麻烦,看标号之间没有特殊的界符作间隔,所以识别比较麻烦,看如下例子:如下例子:o 1 DO99K=1,10o 2 IF(5.EQ.M)I=10o 3 DO99K=1.10o 4 IF(5)=55o 语句语句1、3的区别在于等号之后的第一个界符:一个为逗的区别在于等号之后的第一个界符:一个为逗点,另一个为句末符。所以一直搜索到这里点,另一个为句末符。所以一直搜索到这里 才能区分开才能区分开1句是句是DO语句,语句,3语句是赋值句。语句是赋值句。o 语句

13、语句2、4主要区别在于右括号之后的第一个字符:一个主要区别在于右括号之后的第一个字符:一个为字母,另一个为等号。所以也只能搜索到该字符才能得为字母,另一个为等号。所以也只能搜索到该字符才能得到语句到语句2是是IF语句,语句语句,语句4是赋值句。是赋值句。计算机教研室2022-8-9第四章:词法分析14/474.24.2单词的描述工具单词的描述工具o 程序设计语言中的单词是基本语法符号。单词程序设计语言中的单词是基本语法符号。单词符号的语法可以用有效的工具加以描述,并且符号的语法可以用有效的工具加以描述,并且基于这类描述工具,可以建立词法分析技术,基于这类描述工具,可以建立词法分析技术,进而可以

14、建立词法分析程序的自动构造方法。进而可以建立词法分析程序的自动构造方法。o 多数程序设计语言的单词的语法都能用多数程序设计语言的单词的语法都能用正规文正规文法法来描述。来描述。计算机教研室2022-8-9第四章:词法分析15/474.2.14.2.1正规文法正规文法o 文法文法G=(G=(N N,T T,)G G的任何产生式为的任何产生式为ABAB或或AA,其中,其中V VT T*,A A,B B V VN N。o 书上书上P52P52的例子都是用正规文法表示的。在这的例子都是用正规文法表示的。在这里注意里注意可以为可以为,所以右边的表达式可能是,所以右边的表达式可能是非终结符、终结符或终结符

15、加上非终结符非终结符、终结符或终结符加上非终结符。o 可以看例子中那些规则分别属于那种类型。可以看例子中那些规则分别属于那种类型。计算机教研室2022-8-9第四章:词法分析16/474.2.24.2.2正规正规式式对于字母表对于字母表而言而言,正规式和它所代表的正正规式和它所代表的正规规集的递归定义集的递归定义为为:n 和和是正规式是正规式,它们所表示的正规集分别为它们所表示的正规集分别为 和和;n 任何任何aa,a a是是上的一个正规式上的一个正规式,它所表示的正规集为它所表示的正规集为 a a;n 假定假定U U和和V V都是都是上的正规式上的正规式,它们所表示的正规集分别为它们所表示的

16、正规集分别为L(U)L(U)和和L(V),L(V),那么那么,(U|V),(U,(U|V),(U*V),(U)V),(U)*也都是正规式也都是正规式,它它们所表示的正规集分别为们所表示的正规集分别为L(U)L(V),L(U)L(V)(L(U)L(V),L(U)L(V)(连接积连接积)和和(L(U)(L(U)*(闭包闭包)。n 仅由有限次使用上述三步骤而得到的表达式才是仅由有限次使用上述三步骤而得到的表达式才是上的上的正规式。由这些正规式所表示的字集才是正规式。由这些正规式所表示的字集才是上的正规集上的正规集计算机教研室2022-8-9第四章:词法分析17/47例例4.24.2令令=a,b,=a

17、,b,上所有正规式和相应正规集的例上所有正规式和相应正规集的例子子有有:正规式正规式 正规集正规集a aa aa|b a,ba|b a,b ab abab ab baba*上所有以上所有以b b为首后跟任意多个为首后跟任意多个a a的字的字 a(a|b)a(a|b)*上所有以上所有以a a为首的字为首的字计算机教研室2022-8-9第四章:词法分析18/47例例令令=A,B,0,1,=A,B,0,1,则则:正规式正规式 正规集正规集(A|B)(A|B|0|1)(A|B)(A|B|0|1)*上标识符的全体上标识符的全体 (0|1)(0|1)(0|1)(0|1)*上上“数数”的全体的全体正归集正归

18、集是正规语言的另一种表示方法。是正规语言的另一种表示方法。计算机教研室2022-8-9第四章:词法分析19/47正规式的等价性正规式的等价性若两个正规式所表示的正规集相同,则认为二若两个正规式所表示的正规集相同,则认为二者等价。两个等价的正规式者等价。两个等价的正规式U U 和和 V V 记为记为U=V.U=V.例如:例如:b(abb(ab)*=(ba=(ba)*b b (a|b)(a|b)*=(a=(a*b b*)*计算机教研室2022-8-9第四章:词法分析20/47注意注意(1)(a|b)(1)(a|b)*(2)(2)a a*b b*(3)(ab(3)(ab)*(4)(4)a a*|b

19、b*相互不等价相互不等价12ab a1b12abax12yb计算机教研室2022-8-9第四章:词法分析21/47另另:U,V:U,V 和和W W均为正规式,下列关系普遍成立:均为正规式,下列关系普遍成立:(1)U|V=V|U (1)U|V=V|U (交换律)交换律)(2(2)U|U|(V|WV|W)=(U|VU|V)|W(|W(结合律)结合律)(3(3)U U(VWVW)=(UVUV)W(W(结合律)结合律)(4)U(4)U(V|WV|W)=UV|UW(=UV|UW(分配律)分配律)(V|WV|W)U=VU|WU(U=VU|WU(分配律)分配律)(5)(5)U=UU=U=U =U 是连接的恒

20、等元素是连接的恒等元素 (6)(6)U|U=U “U|U=U “或或”的抽取律的抽取律正规式服从的代数规律正规式服从的代数规律计算机教研室2022-8-9第四章:词法分析22/474.2.34.2.3正规文法和正规式的等价性正规文法和正规式的等价性o 一个正规语言可以由正规文法定义,也可一个正规语言可以由正规文法定义,也可以由正规式定义。以由正规式定义。o 对任何正规文法,存在定义同一语言的正对任何正规文法,存在定义同一语言的正规式;规式;o 对任何正规式,存在生成同一语言的正规对任何正规式,存在生成同一语言的正规文法。文法。计算机教研室2022-8-9第四章:词法分析23/47正规式转换成正

21、规文法正规式转换成正规文法o 将将上的一个正规式转换成文法上的一个正规式转换成文法=(=(T T,N N,).).另其中的的另其中的的T T=,确定产生式和,确定产生式和N N的元素用的元素用如下办法:如下办法:o 对任何正规式对任何正规式 r r,选择一个非终结符号,选择一个非终结符号S S生成产生生成产生式式 SS r,r,并将并将S S定为定为G G的识别符号。的识别符号。o 若若x x和和y y都是正规式,对形如都是正规式,对形如AxyAxy 的产生式,重写的产生式,重写成成AxB,ByAxB,By两个产生式两个产生式,其中其中B B是新选择的非终是新选择的非终结符号,即结符号,即 B

22、 BN N计算机教研室2022-8-9第四章:词法分析24/47正规式转换成正规文法正规式转换成正规文法o 对已转换的文法中的形如对已转换的文法中的形如AxAx*y y的产生式的产生式,重写重写为:为:A xBA xB A y A y B xB B xB B y B y 其中其中B B为一新非终结符为一新非终结符.o 对形如对形如A A x|y x|y 的产生式,重写为:的产生式,重写为:A x,A yA x,A y计算机教研室2022-8-9第四章:词法分析25/47例:例:o 将将R=a(a|d)R=a(a|d)*转化成相应的正规文法,令转化成相应的正规文法,令S S是文是文法的开始符号,

23、首先形成法的开始符号,首先形成S a(a|d)S a(a|d)*,然后形然后形成成SaASaA和和A(a|d)A(a|d)*,再重写第二条产生式形,再重写第二条产生式形成:成:SaA,A(a|d)B,A,B(a|d)BSaA,A(a|d)B,A,B(a|d)B和和 BB 进而变换为:进而变换为:SaA,AaB,AdB,BaB,SaA,AaB,AdB,BaB,BdB,ABdB,A和和 B B 计算机教研室2022-8-9第四章:词法分析26/47正规文法转换成正规式正规文法转换成正规式o 即上述过程的逆过程即上述过程的逆过程,转换规则为:转换规则为:文法产生式文法产生式正规式正规式规则规则1 1

24、A-A-xB,BxB,B -y yA=xyA=xy规则规则2 2A-A-xA|yxA|yA=xA=x*y y规则规则3 3A-A-x,x,A-A-y yA=x|yA=x|y计算机教研室2022-8-9第四章:词法分析27/47例:例:o 文法文法GSGS S aA,S a,A aA,A dA,A S aA,S a,A aA,A dA,A a,A d a,A d先有先有 S=aA|a A=(aA|dA)|(a|dS=aA|a A=(aA|dA)|(a|d)再将再将A A的正规式变换为的正规式变换为A=(a|d)A|(a|d),A=(a|d)A|(a|d),据表中规则据表中规则2 2变换为变换为A

25、=(a|d)A=(a|d)*|(a|d),|(a|d),再将再将A A右端代入右端代入S S的正规式的正规式得:得:S=a(a|d)S=a(a|d)*|(a(a|d)|a|(a(a|d)|a再利用正规式的代数变换可以此得到再利用正规式的代数变换可以此得到 S=a(a|d)S=a(a|d)*|(a|d)|(a|d)|S=a(a|d)S=a(a|d)*即即 a(a|d)a(a|d)*为所求。为所求。计算机教研室2022-8-9第四章:词法分析28/47补充:补充:状态转换图状态转换图(1 1)状态转换图)状态转换图o 状态转换图是一张有限方向图状态转换图是一张有限方向图.它只包含有穷多个它只包含有

26、穷多个状态状态,即有穷多个结点,用即有穷多个结点,用表示;状态结点都代表示;状态结点都代表文法的非终结符号表文法的非终结符号,而且至少要包含一个终止状而且至少要包含一个终止状态,用态,用表示表示.状态之间用箭弧连接状态之间用箭弧连接,箭弧上的标箭弧上的标记指明在射出弧的结点状态下可能出现的输入字符记指明在射出弧的结点状态下可能出现的输入字符或字符类或字符类.o 状态转换图实质上是语法图的一种变形。状态转换图实质上是语法图的一种变形。计算机教研室2022-8-9第四章:词法分析29/47(2)(2)利用状态图识别利用状态图识别(或接受或接受)字符串的过程字符串的过程o 从初始状态出发,按照与符号

27、串余留部分中最从初始状态出发,按照与符号串余留部分中最左字符相匹配的原则,游历状态图,直至符号左字符相匹配的原则,游历状态图,直至符号串的末端为止。如果这时恰好到达终止状态,串的末端为止。如果这时恰好到达终止状态,则符号串为该文法的句子;否则不是。则符号串为该文法的句子;否则不是。o 大多数程序设计语言的单词符号都可以用状态大多数程序设计语言的单词符号都可以用状态转换图予以识别。可以用一张状态转换图或若转换图予以识别。可以用一张状态转换图或若干张状态转换图来描述一个语言的所有单词。干张状态转换图来描述一个语言的所有单词。计算机教研室2022-8-9第四章:词法分析30/47(3)(3)状态图的

28、画法状态图的画法 由右线性正规文法(产生式形如由右线性正规文法(产生式形如 U-aW|aU-aW|a)构造状构造状态转换图。态转换图。o 除了原有代表非终结符号的状态,另增加一个除了原有代表非终结符号的状态,另增加一个终止状态终止状态Z,Z,对于每一条产生式对于每一条产生式U-aU-a,从状态,从状态U U向向Z Z画一条弧,标记为画一条弧,标记为a a,即,即计算机教研室2022-8-9第四章:词法分析31/47(3)(3)状态转换图的画法状态转换图的画法o对于每一条产生式对于每一条产生式U-aWU-aW,从状态,从状态U U向状态向状态W W画一条弧,标记为画一条弧,标记为a a,即,即计

29、算机教研室2022-8-9第四章:词法分析32/47(3)(3)状态图的画法状态图的画法 由左线性正规文法(产生式形如由左线性正规文法(产生式形如 U-Wa|aU-Wa|a)构造构造状态转换图。状态转换图。o 除了原有代表非终结符号的状态,另增加一个除了原有代表非终结符号的状态,另增加一个开始状态开始状态S,S,对于每一条产生式对于每一条产生式U-aU-a,从状态,从状态S S向向U U画一条弧,标记为画一条弧,标记为a a,即,即计算机教研室2022-8-9第四章:词法分析33/47(3)(3)状态转换图的画法状态转换图的画法o对于每一条产生式对于每一条产生式U-WaU-Wa,从状态,从状态

30、W W向状态向状态U U画一条弧,标记为画一条弧,标记为a a,即,即计算机教研室2022-8-9第四章:词法分析34/47例例1:1:o(a)(a)表示在状态表示在状态1 1下下,若输入字符为若输入字符为X,X,则读进则读进X,X,并转换到状态并转换到状态2.2.若输入若输入字符为字符为Y,Y,则读进则读进Y,Y,并转换到状态并转换到状态3.3.o(b)(b)表示在状态表示在状态0 0下下,若输入字符是一个字母若输入字符是一个字母,则读进它则读进它,并转入状态并转入状态1.1.在状态在状态1 1下下,若下一个输入字符为字母或数字若下一个输入字符为字母或数字,则读进它则读进它,并重现进入并重现

31、进入状态状态1.1.一直重复这个过程一直重复这个过程,直到状态直到状态1 1发现输入不再是字母或数字就发现输入不再是字母或数字就进入状态进入状态2.2.o(c)(c)为识别整数的转换图为识别整数的转换图.o终态结上打个星号终态结上打个星号*意味着多读进了一个不属于标识符部分的字符,意味着多读进了一个不属于标识符部分的字符,应把它退还给输入串。应把它退还给输入串。计算机教研室2022-8-9第四章:词法分析35/47例例2:2:语言无符号整数的描述语言无符号整数的描述八进制数八进制数:(OCT:(OCT,值,值 )o octoct o (0|.|7)(0|.|7)o (0|.|7)(0|.|7)

32、*十进制数十进制数:(DEC:(DEC,值,值 )o decdec 0|(1|.|9)(0|.|9)0|(1|.|9)(0|.|9)*计算机教研室2022-8-9第四章:词法分析36/473421o0-70-7 56101-90-9 十进制整数十进制整数八进制整数八进制整数计算机教研室2022-8-9第四章:词法分析37/47o识别十六进制整数的状态图。识别十六进制整数的状态图。计算机教研室2022-8-9第四章:词法分析38/47例例3:3:识别某个简单语言的所有单词识别某个简单语言的所有单词用一些带用一些带$的特殊符号的特殊符号来表示种别编码和内部来表示种别编码和内部值值计算机教研室202

33、2-8-9第四章:词法分析39/47o 为了对例为了对例3进行更好的说明,做了如下的限制:进行更好的说明,做了如下的限制:1)所有关键字(如)所有关键字(如IF,WHILE等)都是等)都是“保留字保留字”;2)对关键字不需专设对应的转换图,而只需要将他们)对关键字不需专设对应的转换图,而只需要将他们预先安排在一张表格中;预先安排在一张表格中;3)如果关键字、标识符和常数之间没有确定的运算符)如果关键字、标识符和常数之间没有确定的运算符或界符作间隔,则必须至少用一个空白符作间隔。或界符作间隔,则必须至少用一个空白符作间隔。有了上述假定后,多数单词符号的识别就不必使用有了上述假定后,多数单词符号的

34、识别就不必使用超前搜索技术。下图是一张识别表的单词符号的状态转超前搜索技术。下图是一张识别表的单词符号的状态转换图。在图中,状态换图。在图中,状态0为初态;凡带双圈者均为终态;为初态;凡带双圈者均为终态;状态状态13是识别不出单词符号的出错情形。是识别不出单词符号的出错情形。计算机教研室2022-8-9第四章:词法分析40/47例例3 3的状态图:的状态图:计算机教研室2022-8-9第四章:词法分析41/47状态转换图的实现状态转换图的实现o让每个状态结点对应一段小程序,即可用程序实现状态图。在此引进了一组全让每个状态结点对应一段小程序,即可用程序实现状态图。在此引进了一组全局变量和过程,将

35、他们作为实现转换图的基本成分。它们是:局变量和过程,将他们作为实现转换图的基本成分。它们是:1 1)chch 字符变量,存放最新读进的源程序字符。字符变量,存放最新读进的源程序字符。2 2)strTokenstrToken 字符数组,存放构成单词符号的字符串。字符数组,存放构成单词符号的字符串。3 3)GetCharGetChar子程序过程,将下一输入字符读到子程序过程,将下一输入字符读到chch中,搜索指示器前移一字符位置。中,搜索指示器前移一字符位置。4 4)GetBCGetBC子程序过程,检查子程序过程,检查chch中的字符是否为空白。若是,则调用中的字符是否为空白。若是,则调用GetC

36、harGetChar直至直至chch中进入一个非空白字符。中进入一个非空白字符。5 5)ConcatConcat子程序过程,将子程序过程,将chch中的字符连接到中的字符连接到strTokenstrToken之后。例如,假定之后。例如,假定strTokenstrToken原来的值为原来的值为“AB”AB”,而,而chch中存放中存放CC,经调用,经调用concatconcat后,后,strTokenstrToken的值就变的值就变为为“ABC”ABC”。6 6)IsLetterIsLetter和和IsDigitIsDigit布尔函数过程,分别判断布尔函数过程,分别判断chch中的字符是否是字母

37、和数字中的字符是否是字母和数字7 7)ReserveReserve整型函数过程,整型函数过程,对对strTokenstrToken中的字符串查找保留字表,若它是一个保留中的字符串查找保留字表,若它是一个保留字则返回它的编码,否则返回字则返回它的编码,否则返回0 0值。值。8 8)RetractRetract子程序过程,将搜索指示器回调一个字符位置,将子程序过程,将搜索指示器回调一个字符位置,将chch置为空白字符置为空白字符9 9)InsertIdInsertId整型函数过程,将整型函数过程,将strTokenstrToken中的标识符插入符号表,返回符号表指针中的标识符插入符号表,返回符号表

38、指针1010)InsertConstInsertConst整型函数过程,将整型函数过程,将strTokenstrToken中的常数插入常数表,返回常数表指中的常数插入常数表,返回常数表指针针计算机教研室2022-8-9第四章:词法分析42/47对于不含回路的分叉结点来说,可让它对应一个对于不含回路的分叉结点来说,可让它对应一个switchswitch语句或一组语句或一组ififthenthenelseelse语句。对应程语句。对应程序如下:序如下:GetcharGetchar();();If(isLetterIf(isLetter()()状态状态j j的对应程序段的对应程序段;Else if(

39、isDigitElse if(isDigit()()状态状态k k的对应程序段;的对应程序段;Else if(chElse if(ch=/)=/)状态状态l l对应程序段;对应程序段;Else Else 错误处理;错误处理;iljk字母字母数字数字/计算机教研室2022-8-9第四章:词法分析43/47对于含回路的状态结点来说,可对于含回路的状态结点来说,可让它对应一个由让它对应一个由whilewhile语句和语句和ifif语句构成的程序段,右图所对语句构成的程序段,右图所对应的程序段可为:应的程序段可为:GetCharGetChar();();While(isLetter()or isDig

40、itWhile(isLetter()or isDigit()()GetCharGetChar();();状态状态j j的对应程序段的对应程序段ij字母或数字字母或数字其它其它计算机教研室2022-8-9第四章:词法分析44/47转换图转换图3.3的词法分析器可构造如下:的词法分析器可构造如下:例例3 3的词法分析器:的词法分析器:intint code,value;code,value;strToken:=“”;/strToken:=“”;/*置置strTokenstrToken 为空串为空串*/GetChar();GetBCGetChar();GetBC();/();/*读入一字符读入一字符

41、*/if(IsLetterif(IsLetter()()beginbegin while(IsLetter()or IsDigit while(IsLetter()or IsDigit()()begin begin Concat();GetChar Concat();GetChar();/();/*将字符进行连接将字符进行连接*/end end计算机教研室2022-8-9第四章:词法分析45/47Retract();Retract();/*回调一位回调一位*/code:=Reserve();code:=Reserve();/*是保留字还是标识符是保留字还是标识符*/if(code=0)if(c

42、ode=0)/*如是标识符如是标识符*/begin begin value:=InsertId(strToken value:=InsertId(strToken););return($ID,value);return($ID,value);/*返回编码和属性值返回编码和属性值*/end endelseelse return(code,-);return(code,-);endend计算机教研室2022-8-9第四章:词法分析46/47else if(IsDigitelse if(IsDigit()()beginbegin while(IsDigit while(IsDigit()()begi

43、n begin Concat();GetChar Concat();GetChar();();end end Retract();Retract();value:=InsertConst(strToken value:=InsertConst(strToken););return($INT,value);return($INT,value);endendelse if(chelse if(ch=)return($ASSIGN,-);=)return($ASSIGN,-);else if(chelse if(ch=+)return($PLUS,-);=+)return($PLUS,-);计算机教

44、研室2022-8-9第四章:词法分析47/47else if(chelse if(ch=*)beginbegin GetChar GetChar();();if(ch if(ch=*)return($POWER,-);)return($POWER,-);Retract();return($SATR,-);Retract();return($SATR,-);endendelse if(chelse if(ch=;)return($SEMICOLON,-);=;)return($SEMICOLON,-);else if(chelse if(ch=()return($LPAR,-);=()return($LPAR,-);else if(chelse if(ch=)return($RPAR,-);=)return($RPAR,-);else if(chelse if(ch=)return($LBRACE,-);=)return($LBRACE,-);else if(chelse if(ch=)return($RBRACE,-);=)return($RBRACE,-);else ProcErrorelse ProcError();();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文([工学]第四章词法分析1课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|