ImageVerifierCode 换一换
格式:DOCX , 页数:88 ,大小:826.27KB ,
资源ID:21086202      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21086202.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理 复习资料Word文档下载推荐.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理 复习资料Word文档下载推荐.docx

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

2、语义分析得到的源程序变成一种结构简单、含义明确、易生成、易翻译成目标代码的内在代码形式。常用的中间代码形式是四元式(算符,运算对象1,运算对象2,结果)。语义分析后的单词序列中间代码 5、代码优化(可放到目标代码生成阶段后)对中间代码或目标代码进行变换改造等优化处理,使生成的代码更高效。中间代码或目标代码优化后的中间代码或目标代码 6、目标代码生成将中间代码生成特定机器上的绝对或可重定位的指令代码或汇编指令代码。语义分析后的单词序列或优化后的中间代码目标代码 二、编译程序结构上述六个阶段的任务分别由六个模块来完成。一个完整的编译程序还应包括表格管理和出错处理程序。典型编译程序结构框图如下:三、

3、编译阶段的组合 1、前后端组合法编译前端:与源语言有关与目标机无关的部分(第1-4阶段)。编译后端:与目标机有关的部分(第6阶段)注:第5阶段置前或后端都可以。组合方式:1)同一源语言的编译前端+不同后端=不同机器上同一源语言的编译程序;2)不同源语言的编译前端生成同一种中间语言+使用共同后端=同一机器上不同语言的编译程序。 2、遍组合法遍/趟:对源程序或源程序的中间结果从头到尾扫描一次称为一遍。每一遍扫视完成一个或几个阶段的工作。一个编译程序可由一遍或多遍完成.实际编译程序分遍的主要参考因素是源语言与目标机器的特征。1.3编译技术和软件工具一、编译技术的发展 1950S早期:算术工式译成机器

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

5、言之间的转换工具; (5)程序格式化工具、程序理解工具等。1.4程序设计语言规范 从支持的计算模式来看,程序设计语言(是指书写计算机程序的高级语言)规范有如下几种: 1、强制命令式语言,即过程式语言 该型 语言中,一个过程可看作是一系列动作,其动作由命令驱动,以语句形式表示,一个语句接一个语句的执行。属于这种规范的语言如PASCAL、C、FORTRAN等,C+、Ada、COBOL等也支持这种模式。本课程介绍的编译技术针对这型语句。 2、函数式语言,即应用式语言 该型语言注重程序所表示的功能,程序的开发过程是从前面已有函数出发构造出更加复杂的函数,对初始数据集进行操作,直到最后形成的函数可以得到

6、最终结果。属于这种规范的语言如ML、LISP等。 3、基于规则(逻辑)的语言 该型语言程序的执行过程是检查一定的使能条件,满足时,则执行适当的动作。如逻辑程序设计语言PROLOG,其基本的使能条件是某种谓词逻辑表达式;再如YACC,其使能条件是程序的形式语法(BNF)。 4、面向对象语言 该型语言的主要特点是提供抽象数据类型,支持封装性、继承性和多态性。C+、Ada、Java等也支持这种模式。1.5编译程序的构造一、编译程序的构造途径 1、用某种程序语言编写; 2、用编译程序自动构造工具构造。 3、通过现有的编译基础设施进行改造和组装。二、T型图 T型图是用来表示一个编译程序所涉及到的三个方面

7、的语言的一种工具,将源语言S通过用语言H书写的编译器翻译成目标语言T的编译程序可用如下T型图THST表示。 T型图的两种组合方式:三、编译程序的自展 1、方法:用“滚雪球”的方式生成编译程序。 2、思想:先用目标机的汇编语言或机器语言书写源语言的一个子集的编译程序,再用这个子集作为书写语言(属于高级语言),实现源语言的编译程序。例:设 , 目标机A的语言为A,则两层自展构造实现语言C对应A机器的编译程序过程可描述为如下: 其自展过程:用语言A编写语言C1的编译程序TAC1A;再用C1书写语言C的编译程序TC1CA;最后再将TC1CA经过TAC1A编译得到 TACA。四、编译程序的移植、自编译、

8、交叉编译 1、移植:将某一机器(宿主机)上已有的软件移植到另一机器(目标机)上的过程。 2、自编译:用某种语言本身书写自己的编译程序的过程。 例如:在机器A上已有语言C的编译程序(将语言C翻译成A的机器码A),现希望利用此编译程序生成机器B上的语言C的编译程序(将语言C翻译成B的机器码B)。 3、交叉编译:把某源语言在宿主机上经过编译而产生目标机的汇编语言或机器语言的过程。五、可重定向编译程序 1、由于交叉编译是在一个平台上生成另一个平台上的可执行代码的过程。交叉编译受限较多。 2、编译基础设施:为开发各种编译程序成分提供相应生成工具。 3、可重定向编译程序:能够根据不同的目标机生成相应目标代

9、码的编译程序。它将与目标机相关的部分单独编写成不同模块,根据不同的目标机调用不同的模块。自由软件GCC(GNU工程的编译程序集合)是目前使用广泛的可重定向编译程序。 、支持可重定向编译的关键技术1)中间表示技术:区别于四元式等传统的中间表示,支持可重定向编译的中间表示应在适当的抽象层次上,向上能够支持多语言映射、向下能够适应多平台转换后宜于进行各种优化。2)机器描述技术:区别于传统的假定式体系结构抽象模型的描述技术,支持可重定向编译的机器描述机制应能描述系统和硬件的共性,又能描述它们各自的特性,且能适应于不同编译程序的处理。研究表明,基于体系结构描述语言详细地指定了体系结构是产生高质量机器级工

10、具的关键技术。3)代码生成程序的构造技术:为简化开始过程、提高代码可靠性,支持代码生成程序的自动构造工具是关键技术和主要难点。4)目标机描述与目标代码生成的接口技术:在重定向编译程序的开始过程中,抽取一系列函数和数据结构作为目标机描述与目标代码生成的接口可以简化编译程序的开发,提高编译程序的效率。2使学生了解文法的直观描述、符号和符号串,掌握文法和语言的形式定义、文法的分类。教学重点:文法和语言的形式定义、文法的分类教学难点:文法和语言的形式定义2学时第三章文法和语言3.1语言概述和文法的直观概念一、基本概念 1、语言:是由句子组成的集合,是由一组符号所构成的集合。 2、汉语:所有符合汉语语法

11、的句子的全体。 3、英语:所有符合英语语法的句子的全体。4、程序设计语言:所有该语言的程序的全体。二、语言研究的内容 1、语法(Syntax):每个句子构成的规律/每个程序构成的规律。表示构成语言句子的各个记号之间的组合规律。在形式语言理论中,阐明语法的工具是文法。 2、语义(Semantics):每个句子的含义/每个程序的含义。表示各个记号的特定含义。(各个记号和记号所表示的对象之间的关系)。 3、语用(Pragmatics):每个句子和使用者的关系/每个程序和使用者的关系。表示在各个记号所出现的行为中,它们的来源、使用和影响。三、文法的直观描述 通常,用句子表述一种语言,但是句子是无穷的。

12、 1、例子 以自然语言为例,人们无法列出全部句子,但是人们可以给出一些规则,用这些规则来说明(或者定义)句子的组成结构,比如汉语句子可以是由主语后随谓语而成,构成谓语的是动词和直接宾语。下面采用EBNF来表示句子的构成规则。先给定如下一组规则:句子=主语谓语主语=代词名词代词=我你他名词=王明学生工人英语谓语=动词直接宾语动词=是学习直接宾语=代词名词 有了这一组规则后,用它们导出句子的方式如下: 1)找=左端的带有句子的规则并把它由=右端的符号串代替,这个动作表示成: 句子 主语谓语 2)在得到的串主语谓语中,选取主语或谓语,再用相应规则的=右端代替之。 比如:选取了主语,并采用规则主语=代

13、词, 那么得到: 主语谓语 代词谓语, 3)重复上述步骤。 导出句子:“你是学生”的全部动作过程是: 句子 主语谓语 代词谓语你谓语你动词直接宾语 你是直接宾语你是名词你是学生 因此,“你是学生”的构成符合上述规则,而“你学生是”不符合上述规则,因此,它不是句子。 2、文法的直观定义 上例中的规则就是我们判别句子结构合法与否的依据,可以将这些规则看成是一种元语言,用它描述汉语。由此可得文法的直观定义如下: 文法:就是这样一些规则的有穷集合,它是以有穷规则集来刻划无穷句子集合的工具。3.2符号和符号串1、字母表:元素的非空有穷集,记为 。2、符号:字母表中的元素。3、符号串:符号的有穷序列。4、

14、空符号串:什么符号也不含的符号串,记为。 =a,b,c,d,z。a、b、c都称为符号。hello、stri、aezfg、main、fjfka都是上的符号串。二、符号串的基本操作 1、符号串的长度:符号所包含符号的个数,设x是一符号串,其长度记为|x|。 例:|hello|=5,|main|=4,| |=0。 2、符号串的连接:设x、y是两个符号串,则xy被称为x与y的连接。特别有: x=x=x=xx=my,y=classmate,则xy=myclassmate。 3、符号串的方幂:设x是符号串,x自身的连接称为符号串的方幂,有:x=ba, x0 = , x1 =ba, x2 =bababa 4

15、、符号串的集合:若集合A中元素都是某字母表上的符号串,则A是上的符号串集合。 5、符号串集合的乘积:若A、B均为上的符号串集合,则AB=xy|xA,y B 设A=ab,cd,B=ef,jh,则AB=abef,abjh,cdef,cdjh A=A, A=A =。 6、符号串集合的正闭包:设符号串集合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=。所谓产生式是一个序偶对(,

16、 ),其中 V+,V*,通常表示为: 或 =,产生式也叫规则、重写规则、生成式。 0|1|2|3|9 2、文法文法G是一个四元组,G=(VN,VT, P, S)。其中:VN,VT分别是非空有限的非终结符集和终结符集,且二者交集为;P为产生式集;S VN,是文法的开始符号(或识别符),它是一个非终结符,至少要在一条规则中作为左部出现。文法G=(VN,VT, 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、直接推导 设是文

17、法G=(VN,VT, P, S) 的产生式, (VN VT) *,若有符号串v,w满足v=,w=,则称w是v的直接推导,或称v是w的直接归约。记作v=w。现有文法GE:EE+T | T TT*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=+相应

18、的直接推导序列为: E=E+T=E+T*F=E+F*F=T+F*F=F+F*F=F+F*i=F+i*i=i+i*i 5、句型和句子 设GS是一文法,如有 S=* x,则称x是文法GS的句型。若x是GS的句型,且x VT*,则称x是GS的句子。 6、语言 文法GS的语言是GS的所有句子构成的集合。即L(G) =x|S =*x,且xVT*。文法GS:SMVD M小王|小张 V是|不是 D大学生则文法GS表示的语言可定义为: L(G) =小王是大学生,小王不是大学生,小张是大学生,小张不是大学生 MVD,M是D,M是大学生等均是GS的句型。 7、文法的等价 若L(G1) =L(G2) ,则称G1和G

19、2是等价的。3.4文法的类型 Chomsky将文法按其所表示的语言的表达能力,由高往低分为四类:0型,1型,2型,3型文法。一、定义 (1)0型文法 如果文法G的产生式,其中 (VNVT) *, 且至少含有一个非终结符号, (VNVT) *。则称G为0型文法。0型文法又称短语结构文法。 (2)1型文法 如果0型文法G的产生式满足|=|,仅当= 时例外。则称此文法G是1型文法。1型文法也称上下文有关文法。 (3)2型文法 一个1型文法G,如果满足VN,则称为2型文法。或者说2型文法的产生式都形如A 。2型文法也称上下文无关文法。 (4)3型文法 一个2型文法G,如果产生式全都是形如 A a或A

20、aB,其中:A、B VN ,a VT *,则G为3型文法。3型文法也称正则文法或正规文法或右线性文法。它对应有穷自动机。(5)四类文法产生对应的四类语言。二、文法之间的关系四类文法的定义是通过逐步增加限制条件进行的。即有:3型文法2型文法1型文法0型文法。三、例题 判断下列文法类型:例1:S aSYZ SaYZ aYay yYyy yZyz ZYYZ zZzz 0,1例2:S xSYZ SxYZ xYx yYyy yZyz ZYYZ zZzz例3:SaT TbT|cT|b|c 0,1,2,3例4:SxB|c BAz AcS3使学生掌握语法树的构造、句型分析的方法,了解二义性文法的改造和有关文法

21、实用性的一些说明。句型分析二义性文法的改造、句型分析3.4 上下文无关文法及语法树 上下文无关文法有足够的能力来描述现今程序设计语言的语法结构。今后如无特别说明,“文法”一词均指上下文无关文法。一、语法树语法树也称推导树,给定文法G=(VN, VT,P,S),对于文法G的任意一个句型都存在一个相应的语法树,它满足:(1)树中每一个结点都有一个标记,此标记是V= VNVT中的一个符号。(2)根的标记是S。(3)苦树的一结点A至少有一个子女,则AVN。(4)如结点A的子女结点从左到右次序为B1,B2.Bn,则必有产生式AB1B2.Bn。 SaAS | aASbA |SS |ba对句型aabbaa的

22、推导过程可表示为下图所示语法树。下面两个推导过程均可由上图表示。 (1) SaASaSbASaabASaabbaSaabbaa (2) SaASaAaaSbAaaSbbaaaabbaa这说明同一语法树可以表示对同一句型不同的推导过程。二、最左(右)推导 1、如果每一步中,都是对中最左(右)非终结符进行替换, 则称之为最左(右)推导。2、最右推导称为规范推导,由规范推导所得的句型称为规范句型。3、同一语法树最多对应唯一的最左(右)推导。4、一个句型有可能对应着不同的语法树。文法GE: Ei | E+E | E*E | (E),则句型 i*i+i可能对应着下面两个最右推导: (1) EE+EE+i

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

24、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|a 课堂作业:为上述改造前和和改造后的文法构造唯一的语法树。3.6句型的分析句型的分析就是识别一个符号串是否为某文法的一个句型。本课程介绍的分析算法都是从左到右

25、的分析算法。它们分为两大类:自顶向下分析、自底向上分析一、自顶向下分析自顶向下分析:由根向下逐步建立语法树,是一个逐步推导的过程。 ScAd Aab |a 对输入串cabd进行识别过程为:ScAdcabd,构造语法树步骤如图所示:识别过程也有可能是ScAdcad,此时无法识别出串cabd,需要回溯。二、自底向上分析自底向上分析:自叶向上构造语法树,是一个逐步约的过程。自底向上分析法的核心在于寻找“可归约串”。对串cabd归约过程为 cabdcAdS,构造语法树步骤如图所示: 归约过程也有可能是cabdcAbd,此时无法识别出串cabd,也需要回溯。三、句型分析的有关问题 1、基本概念(1)令G

26、S是一文法,是文法G的一个句型,如果有:S =* A,且A =+,则称是句型相对于非终结符A的短语,如有A,则称是相对于非终结符A或相对于规则A的直接短语(也叫简单短语)。(2)一个句型的最左直接短语称为该句型的句柄。注意: 作为短语的必须是需要分析的句型的一部分。2、例子已知文法GE: EE+T | T TT*F | F F(E) | 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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1