收藏 分享(赏)

编译原理 复习资料.doc

上传人:tkhy51908 文档编号:6993725 上传时间:2019-04-29 格式:DOC 页数:66 大小:1.24MB
下载 相关 举报
编译原理 复习资料.doc_第1页
第1页 / 共66页
编译原理 复习资料.doc_第2页
第2页 / 共66页
编译原理 复习资料.doc_第3页
第3页 / 共66页
编译原理 复习资料.doc_第4页
第4页 / 共66页
编译原理 复习资料.doc_第5页
第5页 / 共66页
点击查看更多>>
资源描述

1、教材资料授课顺序:1教学目的:正确理解什么是编译程序;了解编译程序工作的基本过程及其各阶段的基本任务;熟悉编译程序总框;了解编译程序的生成过程和构造工具。教学重点与难点:编译程序工作的基本过程及其各阶段的基本任务,编译程序总框。授课学时:2学时 教学方式:多媒体讲授教学内容:第一章 引论1.1 什么是编译程序一、基本概念1、翻译程序:是指这样的一种程序,它能够把一种语言程序(源语言程序) 转换成另一种功能等价的语言程序(目标语言程序) 。2、编译程序是一种翻译程序,其源程序是高级语言,目标语言程序是低级语言。通常是一次性翻译方式。如 TC 等高级语言编译程序。3、解释程序也是一种翻译程序,它与

2、编译程序的区别:立即执行源程序,通常是逐句翻译执行。如 BASIC、SQL、 JAVA 的 BYTECODE 解释程序等。二、高级语言程序的处理过程高级程序设计语言程序的典型处理过程如下图所示:1.2编译过程和编译程序结构一、编译过程的阶段划分一般编译程序的工作过程按阶段进行,每个阶段将源程序从一种表示形式转换成另一种表示形式。典型的阶段划分方法是将整个编译过程分为如下六个阶段:1、词法分析:任务:对构成源程序的字符串进行扫描和分解,识别出单词(如标识符等) 符号。输入:源程序输出:单词符号序列例子:有待分析源程序:main() int x=10,y;词法分析后的输出:1)保留字: main

3、2)界符:左圆括号 (3)界符:右圆括号)4)界符:左大括号5)保留字:int6)标识符:x7)运算符:=8)常数:10 ,界符:,9)标识符:y10)界符:;11)界符:右大括号 2、语法分析任务:根据语言的语法规则对单词符号串(符号序列) 进行语法分析,识别出各类语法短语(可表示成语法树的语法单位 ),判断输入串在语法上是否正确。输入:单词序列输出:语法分析后的单词序列3、语义分析任务:按语义规则对语法分析器归约出的语法单位进行语义分析,审查有无语义错误,为代码生成阶段收集类型信息,并进行类型审查和违背语言规范的报错处理。输入:语法分析后的单词序列输出:语义分析后带语义信息的单词序列4、中

4、间代码生成(并非所有的编译程序都包含此阶段)任务:将语义分析得到的源程序变成一种结构简单、含义明确、易生成、易翻译成目标代码的内在代码形式。常用的中间代码形式是四元式(算符,运算对象1,运算对象2,结果) 。输入:语义分析后的单词序列输出:中间代码5、代码优化(可放到目标代码生成阶段后)任务:对中间代码或目标代码进行变换改造等优化处理,使生成的代码更高效。输入:中间代码或目标代码输出:优化后的中间代码或目标代码6、目标代码生成任务:将中间代码生成特定机器上的绝对或可重定位的指令代码或汇编指令代码。输入:语义分析后的单词序列或优化后的中间代码输出:目标代码二、编译程序结构上述六个阶段的任务分别由

5、六个模块来完成。一个完整的编译程序还应包括表格管理和出错处理程序。典型编译程序结构框图如下:三、编译阶段的组合1、前后端组合法编译前端:与源语言有关与目标机无关的部分(第1-4 阶段 )。编译后端:与目标机有关的部分(第6阶段)注:第5阶段置前或后端都可以。组合方式:1)同一源语言的编译前端+不同后端=不同机器上同一源语言的编译程序;2)不同源语言的编译前端生成同一种中间语言+使用共同后端=同一机器上不同语言的编译程序。2、遍组合法遍/趟:对源程序或源程序的中间结果从头到尾扫描一次称为一遍。每一遍扫视完成一个或几个阶段的工作。一个编译程序可由一遍或多遍完成.实际编译程序分遍的主要参考因素是源语

6、言与目标机器的特征。1.3编译技术和软件工具一、编译技术的发展1950S 早期:算术工式译成机器代码。1950S 中期:FORTRAN 编译系统。1950S 末期:自动生成工具出现,如:LEX、YACC。1960S:自展技术。1971年:用自展技术生成 PASCAL 编译程序。现代:并行编译技术。二、编译技术与软件工具1、先进的软件开发技术和软件工具能提高编程效率、缩短调试时间。2、编译程序本身是一种软件工具。3、大部分软件工具的开发常用到编译技术和方法。4、进行源程序处理的软件工具实质上都在不同程度上用到了编译程序各个部分的技术和方法。如:(1)语言结构化编辑器(语法) ;(2)语言程序调试

7、工具(语法、语义) ;(3)语言程序测试工具(静、动态测试,发现错误) ;(4)高级语言之间的转换工具;(5)程序格式化工具、程序理解工具等。1.4程序设计语言规范从支持的计算模式来看,程序设计语言(是指书写计算机程序的高级语言)规范有如下几种:1、强制命令式语言,即过程式语言该型 语言中,一个过程可看作是一系列动作,其动作由命令驱动,以语句形式表示,一个语句接一个语句的执行。属于这种规范的语言如 PASCAL、C 、FORTRAN 等,C+、Ada、COBOL 等也支持这种模式。本课程介绍的编译技术针对这型语句。 2、函数式语言,即应用式语言该型语言注重程序所表示的功能,程序的开发过程是从前

8、面已有函数出发构造出更加复杂的函数,对初始数据集进行操作,直到最后形成的函数可以得到最终结果。属于这种规范的语言如 ML、LISP 等。3、基于规则(逻辑)的语言该型语言程序的执行过程是检查一定的使能条件,满足时,则执行适当的动作。如逻辑程序设计语言 PROLOG,其基本的使能条件是某种谓词逻辑表达式;再如 YACC,其使能条件是程序的形式语法(BNF) 。4、面向对象语言该型语言的主要特点是提供抽象数据类型,支持封装性、继承性和多态性。C+、Ada、Java 等也支持这种模式。1.5编译程序的构造一、编译程序的构造途径1、用某种程序语言编写;2、用编译程序自动构造工具构造。3、通过现有的编译

9、基础设施进行改造和组装。二、T 型图T 型图是用来表示一个编译程序所涉及到的三个方面的语言的一种工具,将源语言S 通过用语言 H 书写的编译器翻译成目标语言 T 的编译程序可用如下 T 型图 THST 表示。T 型图的两种组合方式:三、编译程序的自展1、方法:用“滚雪球”的方式生成编译程序。2、思想:先用目标机的汇编语言或机器语言书写源语言的一个子集的编译程序,再用这个子集作为书写语言(属于高级语言) ,实现源语言的编译程序。例:设 , 目标机 A 的语言为 A,则两层自展构造实现语言 C 对应 A机器的编译程序过程可描述为如下:其自展过程:用语言 A 编写语言 C1的编译程序 TAC1A;再

10、用 C1书写语言 C 的编译程序 TC1CA;最后再将 TC1CA 经过 TAC1A 编译得到 TACA。四、编译程序的移植、自编译、交叉编译1、移植:将某一机器(宿主机) 上已有的软件移植到另一机器 (目标机)上的过程。2、自编译:用某种语言本身书写自己的编译程序的过程。 例如:在机器 A 上已有语言 C 的编译程序(将语言 C 翻译成 A 的机器码 A) ,现希望利用此编译程序生成机器 B上的语言 C 的编译程序(将语言 C 翻译成 B 的机器码 B) 。3、交叉编译:把某源语言在宿主机上经过编译而产生目标机的汇编语言或机器语言的过程。五、可重定向编译程序1、由于交叉编译是在一个平台上生成

11、另一个平台上的可执行代码的过程。交叉编译受限较多。2、编译基础设施:为开发各种编译程序成分提供相应生成工具。 3、可重定向编译程序:能够根据不同的目标机生成相应目标代码的编译程序。它将与目标机相关的部分单独编写成不同模块,根据不同的目标机调用不同的模块。自由软件GCC(GNU 工程的编译程序集合)是目前使用广泛的可重定向编译程序。、支持可重定向编译的关键技术1)中间表示技术:区别于四元式等传统的中间表示,支持可重定向编译的中间表示应在适当的抽象层次上,向上能够支持多语言映射、向下能够适应多平台转换后宜于进行各种优化。2)机器描述技术:区别于传统的假定式体系结构抽象模型的描述技术,支持可重定向编

12、译的机器描述机制应能描述系统和硬件的共性,又能描述它们各自的特性,且能适应于不同编译程序的处理。研究表明,基于体系结构描述语言详细地指定了体系结构是产生高质量机器级工具的关键技术。3)代码生成程序的构造技术:为简化开始过程、提高代码可靠性,支持代码生成程序的自动构造工具是关键技术和主要难点。4)目标机描述与目标代码生成的接口技术:在重定向编译程序的开始过程中,抽取一系列函数和数据结构作为目标机描述与目标代码生成的接口可以简化编译程序的开发,提高编译程序的效率。授课顺序:2教学目的:使学生了解文法的直观描述、符号和符号串,掌握文法和语言的形式定义、文法的分类。教学重点:文法和语言的形式定义、文法

13、的分类教学难点:文法和语言的形式定义授课学时:2学时教学方式:多媒体讲授教学内容:第三章文法和语言3.1语言概述和文法的直观概念一、基本概念 1、语言:是由句子组成的集合,是由一组符号所构成的集合。2、汉语:所有符合汉语语法的句子的全体。3、英语:所有符合英语语法的句子的全体。4、程序设计语言:所有该语言的程序的全体。 二、语言研究的内容1、语法(Syntax):每个句子构成的规律 /每个程序构成的规律。表示构成语言句子的各个记号之间的组合规律。在形式语言理论中,阐明语法的工具是文法。2、语义(Semantics):每个句子的含义/每个程序的含义。表示各个记号的特定含义。 (各个记号和记号所表

14、示的对象之间的关系) 。3、语用(Pragmatics):每个句子和使用者的关系/每个程序和使用者的关系。表示在各个记号所出现的行为中,它们的来源、使用和影响。三、文法的直观描述通常,用句子表述一种语言,但是句子是无穷的。1、例子以自然语言为例,人们无法列出全部句子,但是人们可以给出一些规则,用这些规则来说明(或者定义)句子的组成结构,比如汉语句子可以是由主语后随谓语而成,构成谓语的是动词和直接宾语。下面采用 EBNF 来表示句子的构成规则。先给定如下一组规则:句子=主语 谓语主语=代词名词代词=我你他名词=王明学生工人英语谓语=动词 直接宾语动词=是学习直接宾语=代词名词 有了这一组规则后,

15、用它们导出句子的方式如下:1)找=左端的带有句子的规则并把它由=右端的符号串代替,这个动作表示成:句子 主语 谓语2)在得到的串主语 谓语中,选取主语或谓语 ,再用相应规则的=右端代替之。 比如:选取了主语 ,并采用规则主语=代词 , 那么得到:主语 谓语 代词 谓语 ,3)重复上述步骤。导出句子:“你是学生”的全部动作过程是:句子 主语 谓语 代词 谓语你谓语你动词 直接宾语 你是直接宾语你是名词你是学生 因此, “你是学生” 的构成符合上述规则,而“ 你学生是 ”不符合上述规则,因此,它不是句子。2、文法的直观定义上例中的规则就是我们判别句子结构合法与否的依据,可以将这些规则看成是一种元语

16、言,用它描述汉语。由此可得文法的直观定义如下:文法:就是这样一些规则的有穷集合,它是以有穷规则集来刻划无穷句子集合的工具。3.2符号和符号串一、基本概念 1、字母表:元素的非空有穷集,记为 。2、符号:字母表中的元素。3、符号串:符号的有穷序列。4、空符号串:什么符号也不含的符号串,记为 。例: =a,b,c ,d,z。a、b、c都称为符号。hello、stri 、aezfg 、main、fjfka 都是 上的符号串。二、符号串的基本操作1、符号串的长度:符号所包含符号的个数,设 x 是一符号串,其长度记为|x|。例:|hello|=5,|main|=4,| |=0。2、符号串的连接:设 x、

17、y 是两个符号串,则 xy 被称为 x 与 y 的连接。特别有:x=x=x=x例:x=my ,y=classmate ,则 xy=myclassmate。3、符号串的方幂:设 x 是符号串,x 自身的连接称为符号串的方幂,有:例:x=ba, x0 = , x1 =ba, x2 =bababa4、符号串的集合:若集合 A 中元素都是某字母表 上的符号串,则 A 是 上的符号串集合。5、符号串集合的乘积:若 A、B 均为 上的符号串集合,则 AB=xy|xA,y B 例:设 A=ab,cd,B=ef,jh,则 AB=abef,abjh,cdef,cdjhA=A, A=A =。6、符号串集合的正闭包

18、:设符号串集合 A,A 的正闭包记为 A+,A 的闭包记为A*。 例: 设 =0,1,则 + =0,1,00,01,10,11,000,001。* =, 0,1,00,01,10。3.3文法和语言的形式定义一、基本概念1、产生式设 VN,VT 分别是非空有限的非终结符号集和终结符集。V= VN VT, VN VT=。所谓产生式是一个序偶对(, ),其中 V+, V*,通常表示为: 或 =,产生式也叫规则、重写规则、生成式。例: 0|1|2|3|92、文法文法 G 是一个四元组,G=(V N,V T, P, S)。其中:V N,V T 分别是非空有限的非终结符集和终结符集,且二者交集为 ;P 为

19、产生式集;S VN,是文法的开始符号( 或识别符) ,它是一个非终结符,至少要在一条规则中作为左部出现。例:文法 G=(VN,V T, P, S),其中 VN =S,B, VT =0,1,P=S 0B,B 1,B 1B。开始符为 S。可用文法的通俗表示法表示如下:GS: S 0B,B 1,B 1B这个文法表示所有形如01,011,0111,01111的串。3、直接推导设 是文法 G=(VN,V T, P, S) 的产生式, (VN VT) *,若有符号串v,w 满足 v=,w=,则称 w 是 v 的直接推导,或称 v 是 w 的直接归约。记作v=w。例:现有文法 GE: EE+T | T TT

20、*F | F F(E) | i 设 v=E+F*i,w=E+i*i,则有 v=w 或 E+F*i = E+i*i。4、推导如存在一直接推导序列 v=0=1=2=n=u (n0),则称符号串 u 为符号串 v的一个推导(或者说 v 是 u 的一个归约 ),记为 v=+ u;若有 v=+u,且有 v=u,则记作v=*u。例:对于上例中文法 GE:EE+T | T TT*F | F F(E) | i设 v=E,u=i+i*i,则有:v= +u。相应的直接推导序列为:E=E+T=E+T*F=E+F*F=T+F*F=F+F*F=F+F*i=F+i*i=i+i*i5、句型和句子设 GS是一文法,如有 S=

21、* x,则称 x 是文法 GS的句型。若 x 是 GS的句型,且 x V T*,则称 x 是 GS的句子。 6、语言文法 GS的语言是 GS的所有句子构成的集合。即 L(G) =x|S =*x,且 xV T*。例:文法 GS:SMVD M小王|小张 V是|不是 D大学生则文法 GS表示的语言可定义为:L(G) =小王是大学生,小王不是大学生,小张是大学生,小张不是大学生MVD,M 是 D,M 是大学生等均是 GS的句型。7、文法的等价若 L(G1) =L(G2) ,则称 G1和 G2是等价的。3.4文法的类型Chomsky 将文法按其所表示的语言的表达能力,由高往低分为四类: 0型,1型,2型

22、,3型文法。一、定义(1)0型文法如果文法 G 的产生式 ,其中 (VNV T) *, 且至少含有一个非终结符号, (V NV T) *。则称 G 为0 型文法。0型文法又称短语结构文法。(2)1型文法如果0型文法 G 的产生式 满足|=|,仅当 = 时例外。则称此文法 G 是1型文法。1型文法也称上下文有关文法。(3)2型文法一个1型文法 G,如果满足 V N,则称为2型文法。或者说2型文法的产生式都形如A 。2型文法也称上下文无关文法。(4)3型文法一个2型文法 G,如果产生式全都是形如 A a 或 A aB ,其中:A、B VN ,a V T *,则 G 为3型文法。3型文法也称正则文法

23、或正规文法或右线性文法。它对应有穷自动机。(5)四类文法产生对应的四类语言。二、文法之间的关系四类文法的定义是通过逐步增加限制条件进行的。即有:3型文法2型文法1型文法0型文法。三、例题判断下列文法类型:例1:文法 GS:S aSYZ SaYZ aYay yYyy yZyz ZYYZ zZzz0,1例2:文法 GS:S xSYZ SxYZ xYx yYyy yZyz ZYYZ zZzz0,1例3:文法 GS:SaT TbT|cT|b|c 0,1,2,3例4:文法 GS:SxB|c BAz AcS0,1,2,3授课顺序:3教学目的:使学生掌握语法树的构造、句型分析的方法,了解二义性文法的改造和有

24、关文法实用性的一些说明。教学重点:句型分析教学难点:二义性文法的改造、句型分析授课学时:2学时教学方式:多媒体讲授教学内容:3.4 上下文无关文法及语法树 上下文无关文法有足够的能力来描述现今程序设计语言的语法结构。今后如无特别说明, “文法”一词均指上下文无关文法。一、语法树语法树也称推导树,给定文法 G=(VN, VT,P,S),对于文法 G 的任意一个句型都存在一个相应的语法树,它满足:(1)树中每一个结点都有一个标记,此标记是 V= VNV T 中的一个符号。(2)根的标记是 S。(3)苦树的一结点 A 至少有一个子女,则 AV N。(4)如结点 A 的子女结点从左到右次序为 B1,B

25、2.Bn,则必有产生式 AB1B2.Bn。例:GS: SaAS | aASbA |SS |ba对句型 aabbaa 的推导过程可表示为下图所示语法树。下面两个推导过程均可由上图表示。 (1) SaASaSbASaabASaabbaSaabbaa(2) SaASaAaaSbAaaSbbaaaabbaa这说明同一语法树可以表示对同一句型不同的推导过程。二、最左(右) 推导1、如果每一步 中,都是对 中最左( 右)非终结符进行替换, 则称之为最左( 右)推导。2、最右推导称为规范推导,由规范推导所得的句型称为规范句型。3、同一语法树最多对应唯一的最左(右) 推导。4、一个句型有可能对应着不同的语法树

26、。例:文法 GE: Ei | E+E | E*E | (E),则句型 i*i+i 可能对应着下面两个最右推导:(1) EE+EE+iE*E+iE*i+ii*i+i(2) EE*EE*E+EE*E+iE*i+ii*i+i三、二义性语法树1、如果一个文法存在某个句子对应着两棵不同的语法树,则称此文法是二义的。不存在一种算法能在有限步骤内判断一个2型文法是否是二义的。2、实际应用中,常找出一组无二义性的充分条件来构造无二义性文法。3、例子例1:下列简单算术表达式的文法是二义性文法。EE+E|E-E|E*E|E/E|(E) |id引入新的非终结符后可变换为非二义性文法。EE+T|E-T|T TT*F|

27、T/F|F F(E) |id 例2:If 语句的文法 GS:Sif E then S Sif E then S else S SE Ea0|a0|b=1|b=-1|b=0假设执行下列语句前 b=0,有 If 句子:if a0 then if a0 then b=1 else b=-1则当 a=1时,b=1; 当 a=-1时,b=-1; 当 a=0时,b=0。 通过引入新非终结符、加 规则进行改造后得文法:(1)SU|M|E (2) Uif E then S (3) Uif E then M else U (4) Mif E then M else M (5) M S (6) M (7) Ea0

28、|a0|b=1|b=-1|b=0课堂作业:为上述改造前和和改造后的文法构造唯一的语法树。3.6句型的分析句型的分析就是识别一个符号串是否为某文法的一个句型。本课程介绍的分析算法都是从左到右的分析算法。它们分为两大类:自顶向下分析、自底向上分析一、自顶向下分析自顶向下分析:由根向下逐步建立语法树,是一个逐步推导的过程。例:文法 GS: ScAd Aab |a对输入串 cabd 进行识别过程为:ScAd cabd,构造语法树步骤如图所示:识别过程也有可能是 ScAdcad,此时无法识别出串 cabd,需要回溯。二、自底向上分析自底向上分析:自叶向上构造语法树,是一个逐步约的过程。自底向上分析法的核

29、心在于寻找“可归约串 ”。例:对串 cabd 归约过程为 cabdcAdS,构造语法树步骤如图所示:归约过程也有可能是 cabdcAbd,此时无法识别出串 cabd,也需要回溯。三、句型分析的有关问题1、基本概念(1)令 GS是一文法, 是文法 G 的一个句型,如果有: S =* A,且 A =+,则称 是句型 相对于非终结符 A 的短语,如有 A,则称 是 相对于非终结符A 或相对于规则 A 的直接短语( 也叫简单短语)。(2)一个句型的最左直接短语称为该句型的句柄。注意: 作为短语的 必须是需要分析的句型 的一部分。2、例子例1:已知文法 GE: EE+T | T TT*F | F F(E

30、) | i对于给定的句型 i*i+i,指出该句型的所有短语、直接短语和句柄。解:将句型改写为 i1*i2+i3,则:1)因 E=+i1*i2+i3, E=+i1*i2,故句型相对于 E 的短语有:i1*i2+i3,i1*i2。2)因 T=+i1*i2,T= +i1,T= +i3,故句型相对于 T 的短语有 i1*i2, i1, i3。3)因 F=+i1,F= +i2, F=+i3,故句型相对于 F 的短语为:i1, i2, i3;且 i1, i2, i3均为句型相对于规则 Fi 的直接短语,其中 i1为句柄。下面根据语法树进行分析:例2: GS: SaAS S a ASbA A SS A ba

31、要求对句型 aabbaa 的进行分析。解:将句型改写为 a1a2b1b2a3a4,则:1)该句型相对于 S 的短语: a1a2b1b2a3a4和 a4;2)该句型相对于 A 的短语: a2b1b2a3和 b2a3;3)该句型相对于 Sa 的直接短语: a2,a4 ;4)该句型相对于 Aba 的直接短语: b2a3;5)句柄:a2。问题: a1、b1、b2、a3 为什么不是短语?3.7文法实用性的一些说明一、有关文法的实用限制1、在实用中,文法中不得含有害规则或多余规则。2、形如 UU 的规则为有害规则。3、不可达规则或不可终止规则为多余规则。例:GS:SAb|Cd Ab De CCa二、限制使

32、用 规则即形如 A 的规则,它会使有关文法的证明和讨论变得复杂。习题讲解P48第11题扩展: 令文法 GE为:ET|E+T|E-T TF|T*F|T/F F(E) |i要求证明 F+T*F 是它的一个句型,构造其语法树,并指出这个句型的所有短语、直接短语和句柄。解:1)证明:因为 E E+T T+T F+T F+T*F,即有 E=* F+T*F,故:F+T*F是 GE的一个句型。语法树如下图所示。2)句型分析该句型相对于 E 的短语: F+T*F、F; 该句型相对于 T 的短语: T*F、F;该句型相对于 TF 的直接短语 F,相对于 TT*F 的直接短语:T*F;该句型的句柄:F。作业:P4

33、7练习 2、5、9 、11、16授课顺序:4教学目的:让学生了解词法分析程序的概念及设计原则、单词的分类,掌握正规文法、正规式的相关概念及等价转换方法。教学重点:正规文法和正规式的相关概念及等价转换教学难点:正规文法和正规式的等价转换授课学时:2学时 教学方式:多媒体讲授教学内容:第四章词法分析4.1 词法分析程序的设计一、词法分析程序的设计思想通常将词法分析程序(扫描器)设计为子程序形式,当语法分析程序需要单词时,则调用该子程序。二、单词分类通常分为5类:(1)基本字(关键字、保留字 ):具有特殊含义的标识符,不作他用,有分隔语法的作用;(2)标识符:表示各种名字;(3)常量:整型、实型、布

34、尔型、字符型;(4)运算符:算术、逻辑、关系运算符;(5)界符:包括.,; ,( ,) ,: , ,等,有时也把运算符称作界符。三、词法分析程序的设计原则(1)把扫描器当作语法分析的一个过程,当语法分析需要一个单词时,便调用扫描器。(2)扫描器从初态出发,当识别一个单词后便进入终态,同时输出二元组。四、词法分析程序的输出词法分析程序扫描后输出单词序列表示为如下二元组形式: 二元组:(单词种别,单词自身值或指针)例:若规定标识符、常数、基本字、运算符、界符的种别用整数编码分别为1、2、3、4、5,则对程序段 : “ if k=7 then a:=b ; ” ,则其经扫描器扫描后输出的单词符号及其

35、二元组为: 基本字 if (3, if) 标识符 k (1, 指向 k 的符号表入口的指针 )等号= (4, =) 常数7 (2, 7)基本字 then (3, then)标识符 a (1, 指向 a 的符号表入口的指针 )赋值号:= (4, :=)标识符 b (1, 指向 b 的符号表入口的指针)分号; (5, ;)五、词法分析程序独立设计的优点(1)使整个编译程序的结构更加简洁、清晰、条理化;(2)改进了编译程序的效率;(3)增加了编译程序的可移植性。4.2单词的描述工具一、正规文法3型文法,又称右线性文法或正规文法(Regular Grammars),其表达式形如:AaB 或Aa。正规文

36、法描述的语言是 VT*上的正规集。绝大部分程序设计语言的单词都能用正规文法来描述。二、正规式和正规集1、定义正规式也称正规表达式,是表示正规集的工具,递归定义如下:1) 和 都是字母表上的正规式,表示正规集为 和 ;2)a,a 是 上的正规式,表示正规集 a;3)假定 e1、e2都是上的正规式,对应正规集为 L(e1)、L(e2),则(e1)、e1|e2、e1.e2、 e1*也是正规式,分别表示的正规集为 L(e1),L(e1) L(e2) ,L(e1).L(e2) ,和L(e1)*;4)仅由有限次运用上述步骤产生的表达式才是上的正规式,仅由这些正规式产生的字集才是上的正规集。例: 设=0 ,

37、1,则有:正规式 正规集0 00|1 0,101 011* , 1, 11,111.(0|1)* , 0, 1,01, 103、正规式服从的代数规则设 r,s,t 为正规式,则正规式服从如下的代数规则:r|s=s|r (或满足交换律)r|(s|t)=(r|s)|t (或满足结合律 )r(st)=(rs)t (连接 满足结合律)r(s|t)=rs | rt (分配律)r=r=r ( 是连接的恒等元素)注意: rssr r|(st)rs | rt三、正规式和正规文法的等价性任意一个正规语言既可以由正规式定义,也可由正规文法来定义。正规式和正规文法之间可进行等价转换。1、正规式转换成正规文法将=VT

38、 上的正规式 r 换成正规文法 G =(VN, VT,P,S)方法如下:(1)令 Sr (2)对形如 Axy 的产生式,可分解成 AxB,By (3)对形如 Ax*y 的产生式,可分解成为 AxA, Ay(4)对形如 Ax|y 的产生式,可分解为 Ax ,Ay反复利用上述规则,直至所有产生式中最多只含一个终结符。例:将 R=a(a|d)*转换成相应的正规文法。解:步骤如下: (1) Sa(a|d)*(2) SaB , B(a|d)B , B(3) SaB , BaB ,BdB, B相应的正规文法如(3)式所示,即 GS: SaB BaB|dB| 2、正规文法转换成正规式将正规文法 G=(VN,

39、 VT,P,S)换成=VT 上的正规式 r 的转换规则:1)将产生式 AxB By 合写为 A=xy;2)将产生式 AxA Ay 合写为 A=x*y;3)将产生式 Ax Ay 合写为 A= x|y反复利用上述规则,直至只剩下一个由开始符定义的产生式,且该产生式右部不含一个非终结符。例:将正规文法 GS: SdA|eB AaA|b BbB|c 换成正规式。解:步骤如下:(1)由 AaA|b,将 A 转换成 a*b;由 BbB|c,将 B 转换成 b*c;(2)由 SdA|eB,将 S 可转换成(da*b)|(eb*c)故所求正规式为 R=(da*b)|(eb*c)。授课顺序:5教学目的:让学生掌

40、握 DFA 和 NFA 的定义,了解 DFA 和 NFA 的表示方法,掌握 NFA 与 DFA 的等价转换方法及 DFA 的化简方法。教学重点:DFA 和 NFA 的定义、等价转换及 DFA 的化简教学难点:DFA 和 NFA 的等价转换、DFA 的化简授课学时:2学时 教学方式:多媒体讲授教学内容:4.3有穷自动机一、概述有穷自动机(Finite Automata):可准确识别正规集(即识别正规文法所定义的语言和正规式所表示的集合)的一种装置。它分为两类:(1)确定的有穷自动机(Deterministic Finite Automata,简称 DFA)(2)不确定的有穷自动机(Nondete

41、rministic Finite Automata,简称 NFA)二、确定的有穷自动机(DFA)1、定义确定的有穷自动机表示为一个五元组:M=(K, ,f,S,Z),其中:(1) K 是一有穷状态集;(2)是一有穷字母表,称输入符号字母表;(3) f 是转换函数,是在 KK 上的映射。如 f(ki,a)=kj;(4) S 是唯一的一个初态;(5) ZK,是一终态集,终态也称结束态或可接受态。2、DFA 的状态图表示假设 DFA M 有 m 个状态,n 个输入字符,则:(1)状态图有 m 个结点,每个结点最多有 n 条弧射出;(2)有唯一的一个初态结点,前面冠以“=”或“-”标记;(3)有若干终

42、态结点,用双圆圈或“+”标记;例:下图所示 DFA 可识别正则集 L(ab*c),如串 abbc 可被认别。3、DFA 的矩阵表示(1)行表示状态;(2)列表示输入字符则;(3)矩阵元素表示相应状态行和输入字符列下新状态(即 k 行 a 列为 f(k,a)的值) ;(4)用“=”标记行或第一行表示初态;(5)终态行右端标以1,非终态行右端标以0。例:上图也可表示为矩阵形式:a b c S A 0A A B 0B 14、转换函数定义扩充方便起见,对 DFA 中转换函数定义进行扩充:f 是转换函数,是在 K*K 上的映射,有:(1) f(k1,)=k1(2) f(k1,a)=f(f(k1,a),)

43、其中,k1K,a ,*。5、接受(识别)设 DFA=(K, ,f,S,Z) ,若 f(S,)=PZ,则称符号串 *可被该 DFA 接受(识别)。例:试证串 abbc 可被图示 DFA 识别。证:f(S,abbc)=f(f(S , a),bbc)=f(f(A ,b),bc)=f(f(A,b),c)=f(A,c)=B由于 B 为终态,得证。6、语言确定有穷自动机 M 所接受的所有符号串集称为此自动机可接受的语言 L(M)。7、重要结论(1)上的一个字符串集 V*是正规集,当且仅当存在着一个上的确定有穷自动机M,使得 V=L(M)。(2) DFA 的确定性表现在状态转换函数是单值函数,即 f(k,a

44、) 唯一确定一个后继状态。二、不确定的有穷自动机(NFA)1、定义不确定的有穷自动机表示为一个五元组:NFA M=(K,f,S,Z),其中:(1) K 是一有穷状态集(1)是一有穷字母表,称输入符号字母表(3) f 是转换函数,是在 K*K 的子集上的映射。(4)S 是初态集(5) ZK,是一终态集,终态也称结束态或可接受态。例:状态图表示的 NFA 如下:状态图表示的 DFA 如下:4、转换函数定义扩充因为 f 是转换函数,是在 K*K 的子集上的映射,有:(1) f(k,a)=f(k1 ,)f(k2,).f(kn,)其中,kiK,a ,* ,且 f(k,a)=k1,k2,kn 5、接受(识

45、别)设 NFA=(K,f,S ,Z) ,如果 z0f(S ,) 且 z0Z,则称符号串 *可被该NFA 接受 (识别)。例:试证串 abc 可被图示 NFA 识别。证:f(S,abc)=f(A ,bc)=f(A ,c) f(C,c)=B,又因为 B 终态集B,得证。6、语言不确定有穷自动机 M 所接受的所有符号串集称为此自动机可接受的语言 L(M)。7、重要结论(1)对于每个 NFA M,必存在一个 DFA M1,使得 L(M)=L(M1);(2)对于任何两个有穷自动机 M1和 M2,若 L(M1)=L(M2),则称有穷自动机 M1和M2等价。三、FA 到 DFA 的转换1、相关概念 闭包:-

46、closure(I)表示状态集 I 中任何状态 A 经任意条 弧而能到达的状态集。状态集 I 的 a 弧转换:表示为 J=move(I,a) ,J 是所有那些从 I 中任一状态经一条 a弧而到达的后继状态全体。令:Ia=-closure(J)=-closure(move(I,a)例:对下图 NFA,取 I=S,1 ,则 -closure(I)S ,1,2,J=move(I,0)=1,I0=-closure(J)=1,22、NFA 的确定化用造表法将 NFA 确定化过程如下:(0)表的第0行和第0列作标识行列的值。(1)将 -closure(I)作为表中第1行第1列。(1)假定 =a1,a2,.an,设第 i 行第一列已确定状态集为 I,则置该行第 i 列为Iai,如 Iai 未曾在任何行第一列出现过,则将 Iai 加入下一空行 i+1的第一列,并在第0列标记为 Ti+1。(3)反复重复第(1) 步,直至无新状态出现为止。(4)重新命名新状态。例:将上图所示 NFA 确定化(0-3步:造表)整理后得: 重新命名新状态得 DFA 如下图所示:四、DFA 的化简1、相关概念(1)一个 DFA 是化简(最小化) 了的,即它没有多余状态且其状态中没有相互等价的。(2)多余状态是指从自动机的开始状态出发,任何输入串也不可达的状态。 2、状态等价在 DFA 中,两个状态 s 和 t

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报