程序设计语言编译原理-考试重点_第1页
程序设计语言编译原理-考试重点_第2页
程序设计语言编译原理-考试重点_第3页
程序设计语言编译原理-考试重点_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一章 引论1.编译程序分几个阶段,每个阶段的任务是什么?五个阶段:词法分析、语法分析、语义分析、中间代码生成、优化、目标代码生成词法分析任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。(如基本字,标识符,常数,算符和界符)。语法分析任务:在词法分析基础上,将单词符号串转化为语法单位(语法范畴)(短语、子句、句子、程序段、程序),并确定整个输入串是否构成语法上正确的程序。语义分析和中间代码生成任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。代码优化任务:对于代码(主要是中间代码)进行加工变换,以期能够产生更为高效(省时间和空间)的目

2、标代码。目标代码生成任务:将中间代码变换成特定机器上的低级语言代码2.表格管理和出错处理:编译各阶段均须维持表格并进行表格管理,建表的技术支持是数据结构,表格的分类、结构、处理方法决定于语言及机器,还有优化措施。一个好的编译程序应该:全,最大限度发现错误;准,准确指出错误的性质和发生地点;局部化,将错误的影响限制在尽可能小的范围内。源程序中的错误通常分为 :语法错误,不符合语法(或词法)规则的错误,如单词拼写错误、括号不匹配 . 语义错误,不符合语义规则的错误,如说明错误、作用域错误、类型不匹配 .3.前端、后端:编译前端主要由与源语言有关,但与目标机无关的那些部分组成。编译后端包括编译程序中

3、与目标机有关的那些部分。4.遍:根据系统资源的状况、运行目标的要求等,可以将一个编译程序设计成多遍扫描的形式,在每一遍扫描中,完成不同的任务。遍可以和阶段相对应,也可无关。单遍代码不太有效。遍 是对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。5.“运算符与运算对象类型不符”属于语义错误6.算法逻辑上的错误属于语义错误第二章 高级语言及其语法描述1. 程序语言是由语法和语义两方面定义的。2.上下文无关文法的定义:四个组成部分:一组终结符号、一组非终结符号、一个开始符号、一组产生式。一个上下文无关文法G是一个四元式(VT,VN,S, P ),其中: V

4、T:是非空有限集,它的每个元素是终结符号;VN:是非空有限集,它的每个元素是非终结符号,VTVN=,VTVN=V;S:SVN,称为开始符号;P :产生式集合(有限),每个产生式形式是 P->| PVN, (VTVN)*,S至少一次为P ;3.推导、最左推导、最右推导:1、推导:如两个串u0、un,存在一个串序列u0=>u1=>=>un,则我们称这个序列是从u0到un 的一个推导。 U1un:表示从u0出发,经一步或若干步,可推导出un.U1un:表示从u0出发,经0步或若干步,可推导出un.最左推导是指,任何一步=>都是对中的最左非终结符进行替换的。最右推导是指,

5、任何一步=>都是对中的最右非终结符进行替换的。4.语法树:在编译中产生语法树是为了语法分析。5、什么是句型?什么是句子?什么是语言?假定G是一个文法,S是它的开始符号。如果S=> ,则称是一个句型。仅含终结符的句型是一个句子。文法G所产生的句子的全体是一个语言。 语言是由句子组成的集合,是由一组记号所构成的集合。6.乔姆斯基把文法分成4种类型,即0型文法、1型文法、2型文法和3型文法。0型文法也称为短语文法。1型文法也称为上下文有关文法。2型文法也称为上下文无关文法。3型文法也称为正规文法。与程序语言语法有关的文法是上下文无关文法。第三章 词法分析1.状态转换图:使用状态转换图是设

6、计词法分析程序的一种好途径,状态转换图是一张有限方向图。在状态转换图中,结点代表状态,用圆圈表示。一个状态转换图可用于识别(或接受)一定的字符串。2.确定的有限自动机(DFA)、非确定有限自动机(NFA)。五元式:有限状态集合、有穷字母表、转换函数、唯一的初始状态、终止状态集合。一个确定有限自动机(DFA) M是一个五元式:M (S,s0 ,F) ,其中S是一个有限集,它的每个元素称为一个状态,是一个有穷字母表,它的每个元素称为一个输入字符,是一个从S×至S的单值部分映射。 (s,a)=s´意味着:当现行状态为、输入字符为a时,将转换到下一状态s´。我们称s

7、80;为s的一个后继状s0S是唯一的初态F 是一个终态集(可空)。一个非确定有限自动机(NFA) M是一个五元式:M (S,S0 ,F) ,其中S是一个有限集,它的每个元素称为一个状态,是一个有穷字母表,它的每个元素称为一个输入字符,是一个从S×*至S的子集的映射,即: S×* 2s,S0S是唯一的初态,F是一个终态集(可空)。3.设有确定的有限自动机DFA M = (0,1,2,3,a,b,0,3),其中为:(0,a)=1 (0,b)=2 (1,a)=3 (1,b)=2 (2,a)=1 (2,b)=3 (3,a)=3 (3,b)=3请画出状态转换矩阵和状态转化图。相应的状

8、态转换矩阵如下表: 状态ab012132213333对应的状态转换图0123开始开始410010101013012aaa,babbb4.设计一个DFA,要求能够识别=0,1上能被5整除的二进制数。5.词法分析的流程第四章 语法分析自上而下分析1.语法分析器的功能:识别语法成分,并作语法检查.2.自上而下语法分析方法遇到的主要问题是回溯和左递归。3.把一个文法改造成任何非终结符的所有候选式首符集两两不相交的方法是提取公共左因子。4.LL(1)分析法中,第一个L表示从左到右扫描输入串,第二个L表示最左推导。1表示分析时每步只需向前看一个符号。5.LL(1)文法的条件:1文法不含左递归2)FIRST

9、() FIRST() = 3)对文法中的每个非终结符A,若它存在某个候选首符集包含,则 FIRST(A) FOLLOW(A)=。 6. 对下文法,计算每个非终结符的FIRST集合和FOLLOW集合。ETE E+E| TFT TT| FPFF*F| P(E)|a|b|First(E)= First(T)= First(F)=(,a,b, First(E)=+, ,First(T)=(,a,b, , First(F)=*, ,Follow(E)= Follow(E)=#, ) Follow(T)= Follow(T)=+,#, ) Follow(F)= Follow(F)=(,a,b, ,+,),

10、# Follow(P)=*, (,a,b, ,+,),# 7.两种实现方法:递归下降分析法、预测分析程序。第五章 语法分析自下而上分析1. 简述自下而上的语法分析方法:就是从输入串开始,逐步进行“规约”,直至规约到文法的开始符号;或者说从语法树的树叶开始,逐步向上规约,直至规约到根节点。 2.一个句型的句柄是该句型的最左直接短语。3.规范规约是指最右推导的逆过程。4.算符优先分析法1)特别适应于表达式分析的方法2)算符优先分析法中,优先表中存储的是优先关系3)算符优先分析法的可规约串是句型的最左素短语。5.LR分析法:1)LR(K)文法是从左到右分析,每次向貌似句柄的符号串后看K个输入符号的一

11、种编译方法2)四种分析表3)LR(0)项目的含义4)例给定文法:SAS|b ASA|a要求列出这个文法的所有LR(0)项目。S.AS SA.S SAS.S.b Sb. A.SA AS.A ASA. A.a Aa. 5)写出LR(0)分析表的构造步骤:确定G的LR(0)项目以LR(0)项目为状态,构造一个能识别文法G的所有活前缀的NFA利用子集法,将NFA确定化,成为以项目集合为状态的DFA根据利用上述DFA可直接构造出LR分析表。 6)比较LR(0)、SLR(1)、LR(1)、LALR(1)分析表的优缺点:这4种分析表都能识别对应文法的全部句子,其共同特征就是用规范规约的方法寻找句柄进行规约。

12、在这4种方法中,LR(0)分析表对文法的要求较高,其构造方法是其它表构造方法的基础;SLR(1)分析表对文法的要求有所降低,容易实现,因而很有实用价值;LR(1)分析表对文法的要求最低,适用于一大类文法,故其分析能力最强,但其实现代价过高;LALR(1)分析表的分析能力介于SLR(1)和LR(1)之间,实现代价比LR(1)低。 第六章 属性文法和语法制导定义1.语法制导翻译法就是在语法分析的过程中,随分析的过程,根据为每个产生式添加的语义动作进行翻译的方法。 2.写出产生式、语义规则和语义子程序之间的关系。产生式:一个产生式描述了一个语法单位,但它只说明了该语法单位能产生的符号串,并未指明所产

13、生的符号串有什么实际意义,即该符号串究竟要做什么。语义规则:一个产生式的语义规则描述了该产生式的具体的动作意义,即该产生式产生的符号串要做什么。语义子程序:按照产生式的语义规则生成某种中间代码,实现相应的动作。3.对于文法的每个产生式都配备了一组属性的计算规则,称为属性。 4.文法符号的属性有两种,一种称为综合属性,一种称为继承属性。综合属性传递信息的方向是自下而上。继承属性传递信息的方向是自上而下。 5. 在分析树中,一个结点的综合属性值是从其子结点的属性值计算出来的。一个结点的继承属性由此结点的父结点或兄弟结点的某些属性确定。6.为文法S ( L ) | a L L , S | S写一个语

14、法制导定义,它输出括号的对数。S S print (S. num)S ( L ) S. num := L.num + 1S a S. num := 0L L1 , S L. num :=max L1. num , S. numL S L. num := S.num 7.为文法S( L ) | a L L , S | S写一个翻译方案,它输出每个a的嵌套深度。例如,对于( a , ( a , a) ),输出的结果是1 2 2。SS. depth := 0 SSL. depth := S. depth + 1 ( L ) S a print (S. depth) L L1. depth := L.

15、 depth L1 , S. depth := L. depth SLS. depth := L. depth S 8.S-属性文法:只含有综合属性。可借助于LR分析器实现。采用自底向上分析,例如LR分析,首先给出S-属性定义,然后,把S-属性定义变成可执行的代码段,这就构成了翻译程序。L-属性文法,如果对于每个产生式A>X1X2Xn,其每个语义规则中的每个属性或者是综合属性,或者是Xj(1<=j<=n) 的一个继承属性且这个继承属性仅依赖于: a. 产生式Xj的左边符号X1,X2,,Xj-1的属性 b. A的继承属性。S-属性文法是L-属性文法。第七章 语义分析和中间代码产

16、生1.常用的中间代码的形式:后缀式(逆波兰式)、三地址码(三元式、四元式、间接三元式)。2.会用后缀式表示:表达式的后缀表示可以如下递归定义:1)如果E是变量或者常数,那么E的后缀表示就是E本身2)如果E是形式为E1 op E2的表达式,其中op是任意的二元算符,那么E的后缀表示是E1'E2'op,其中E1和E2分别是E1和E2的后缀表示3)如果E是形式为(E1)的表达式,那么E1的后缀表示也是E的后缀表示。3.已知A是一个10×20的数组(每维下界均为1),每个元素占1个单元,且按行存放,要求写出:赋值语句X=AI,J的四元式序列。100 (*,I,20,T1) /

17、*d2=20*/101 (+,J,T1,T1) /*得到20I+J*/102 (,A,21,T2) /*得到A21*/103(=,T2T1,_,T3)/*T2T1即为AI,J即T3=T21*/104 (=,T3,_,X)第十章 优化1为了获得更优化的程序,可以从哪些层次上对程序进行优化?为了获得更优化的程序,可以从各个环节着手:在源代码级,可以选择适当的算法和安排适当的实现语句来提高程序的效率。在语义动作的设计上,考虑产生更高效的中间代码,并为优化阶段做准备。在中间代码级,安排专门的优化阶段,进行各种等价变换,以改进代码的效率。在目标代码级,考虑如何有效地利用寄存器,如何选择指令,以及进行窥孔

18、优化等。 2.常用的优化方法局部优化: 删除公共子表达式、复写传播、删除无用代码。循环优化:代码外提、强度削弱、删除归纳变量3.程序基本块是指程序中一顺序执行的语句序列,其中只有一个入口和一个出口。4.基本块的入口、基本块的划分、流图:入口就是其中的第一个语句1.求出四元式程序中的各个基本块中的入口地1)程序的第一个语句2)能由条件转移语句或无条件转移语句转移到的语句3)紧跟在条件转移语句后面的语句2. 对以上求出的每一人口语句,构造其所属的基本块。它是由该人口语句(开始)到一转移语句(包括该转移语句),或到一停语句(包括该停语句)之间的语句序列组成的。3. 删除无用代码。凡未被纳入某一基本块中的语句,都是程序中控制流程无法到达的语句,从而也是不会被执行到的语句,我们可把它们从程序中删除。5.已知如下中间代码序列:1)read X 2)read Y 3)R := X mod Y 4)if R=0 goto(8) 5)X := Y6)Y := R 7)goto (3) 8)write Y 9)halt要求:1)写出基本块的入口语句。2)为其划分基本块。3)为其构造流图。入口语句:1、3、5、8 基本块和流图 (3)R := X mod Y(4)if R=0 goto(8)(1)read X(2)read Y(5)X := Y(6)Y := R(7)go

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论