收藏 分享(赏)

编译原理考试知识点复习.doc

上传人:wspkg9802 文档编号:9324039 上传时间:2019-08-02 格式:DOC 页数:9 大小:224.21KB
下载 相关 举报
编译原理考试知识点复习.doc_第1页
第1页 / 共9页
编译原理考试知识点复习.doc_第2页
第2页 / 共9页
编译原理考试知识点复习.doc_第3页
第3页 / 共9页
编译原理考试知识点复习.doc_第4页
第4页 / 共9页
编译原理考试知识点复习.doc_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、第一章:编译过程的六个阶段:词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成解释程序:把某种语言的源程序转换成等价的另一种语言程序目标语言程序,然后再执行目标程序。解释方式是接受某高级语言的一个语句输入,进行解释并控制计算机执行,马上得到这句的执行结果,然后再接受下一句。编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序(机器语言程序或汇编语言程序)。解释程序和编译程序的根本区别:是否生成目标代码第三章:Chomsky 对文法中的规则施加不同限制,将文法和语言分为四大类:0 型文法(PSG) 0 型语言或短语结构语言

2、文法 的每个产生式 中:若 *N*, (NT)* ,则 是 0 型文法,即短语结构文法。1 型文法(CSG) 1 型语言或上下文有关语言在 0 型文法的基础上:若产生式集合中所有|,除(空串)外,则是型文法,即:上下文有关文法另一种定义:文法 G 的每一个产生式具有下列形式:A,其中、V*,AVN,V+;2 型文法(CFG) 2 型语言或上下文无关语言文法的每个产生式 A,若 AN ,(NT)*,则是型法,即:上下文无关文法。3 型文法(RG) 3 型语言或正则(正规)语言 若、N,T 或 ,右线性文法:若产生式为或左线性文法:若产生式为 或都是型文法(即:正规文法)最左(最右)推导在推导的任

3、何一步 ,其中 、 是句型,都是对 中的最左(右)非终结符进行替换规范推导:即最右推导。规范句型:由规范推导所得的句型。句子的二义性(这里的二义性是指语法结构上的。 )文法 GS的一个句子如果能找到两种不同的最左推导(或最右推导),或者存在两棵不同的语法树,则称这个句子是二义性的。文法的二义性一个文法如果包含二义性的句子,则这个文法是二义文法,否则是无二义文法。短语若 S* A 且 A +,则称 是句型 相对于非终结符 A 的短语。简单短语(直接短语)若 S * A 且 A,则称 是句型 相对于非终结符 A 的简单短语。句柄一个句型的最左简单短语。 (产生式的右部)2型文法1型文法0型文法3型

4、文法子树与短语的关系(1) 短语:子树的末端结点(即树叶)组成的符号串;(2) 直接短语:简单子树的末端结点组成的符号串; (3) 句柄:最左简单子树的末端结点组成的符号串;左图所示的关于句型 E+E*i 的语法树来说:它有 3 棵子树,即 3 个短语分别为 i、E*i 和 E+E*i;直接短语、句柄均为 i。 从语法树中可以看出,所有树叶的组合就是其相对应的父结点的短语。句型 i+i*i 的语法树有 8 棵子树,短语和直接短语如下:直接短语:i1, i2 , i3短语:i1,i2,i3,i1*i2,i1*i2+i3句柄:i1注意:i2+i3 不是短语不是某棵子树的结果第四章:单词符号的输出形

5、式 二元组:(单词种别,单词自身的值)单词符号的分类关键字,标识符 ,常数,运算符,界符等(这种分类不是唯一的)【例 4.2】 令 =a,b, 上的正规式和相应的正规集的例子有 : 正规式 正规集a aab a, bab ab(ab)(ab) aa, ab, ba, bba , a, aa, 任意个 a 的串(ab) ,a,b,aa,ab 所有由 a 和 b 组成的串(ab)(aabb)(ab) *上所有至少含有两个相继的 a 或两个相继的 b 组成的串 DFA 定义:一个确定的有穷自动机 Md是一个五元组:M d=(K, f, S, Z) ,其中:(1) K:有穷状态集;(2) :有穷输入字

6、母表; (3) f :转换函数,K K 的单值映射;即 f (k i , a)=kj ,其中 k i、k jK,a;(4) S : SK,惟一初态;(5) Z:ZK,是一个终态集,也称可接受状态或结束状态。【例】DFA M=(S,U,V,Q,a,b,f,S,Q) ,其中 f 定义为:f(S,a)=U ,f(V,a)=Uf(S,b)=V,f(V,b)=Qf(U,a)=Q,f(Q,a)=Qa bS U VU Q VV U QQ Q Q34251X6ababab2Yf(U,b)=V,f(Q,b)=QDFA 的表示(1)用转换函数;(2)状态转换矩阵;(3)状态转换图转换函数 :DFA M=(0, 1

7、, 2, 3, a, b , f, 0, 3 ) f: f(0,a)=1 f(0,b)=2 f(1,a)3 f(1,b) 2f(2,a)=1 f(2,b)=3 f(3,a)3 f(3,b)3 转换矩阵 状态转换图NFA M 的定义:一个非确定有穷自动机 Mn是一个五元组 Mn=(K, , f, S, Z ),其中: (1) K、Z 的意义与 DFA 相同;(2) f:从 K* K 的子集映射;(3) S K,是一个非空初态集。 与 DFA 的主要区别允许有多个初始状态。允许状态在其输出边上有相同的符号(多值映射)。允许输出边上有空串符号 。特点:在给定状态和符号的情况下,不能唯一的确定下一个状

8、态。NFA 的确定化基本方法 基本方法: 边合并 ,符号合并 (NFA 转化成的 DFA 不是唯一的) 【 例 】 NFA M 如右图所示,试将其确定化为 DFA M。【解答】(1)用子集法将图所示的 NFA M 确定化为表 1。(2)对表 1 中的所有子集重新命名得到表 2 的状态转换矩阵确定有穷自动机的化简:_closure(S0)第五章:语法分析是编译程序的核心部分:在词法分析的基础上,识别单词符号序列是否是给定文法的正确句子(程序) 。自上而下分析的前提:消除左递规和消除回溯。自顶向下分析法就是从文法的开始符号出发,试图推导出与输入的单词串完全匹配的句子。如果能够推导出,则该输入串是给

9、定文法的句子。如果不能推导出,则该输入串不是给定文法的句子。自顶向下分析法分两种不确定性分析法:是带有回溯的分析方法,效率低,代 价高,极少使用。确定性分析法:对文法有一定的限制,但实现简单直观,便于手工或自动构造。LL(1)文法的定义一个上下文无关文法是 LL(1)文法的充分必要条件是:对每个非终结符 A 的任两个不同产生式 A,A,满足:Select(A )Select(A)= ,其中:、 不同时推导出 注:对 LL(1)文法进行语法分析时不会产生回溯。LL(1)的含义:(LL(1)文法是无二义的; LL(1)文法不含左递归)第 1 个 L:从左到右扫描输入串 第 2 个 L:生成的是最左

10、推导1 :向右看 1 个输入符号便可决定选择哪个产生式某些非 LL(1)文法到 LL(1)文法的等价变换: 1. 提取公因子 2. 消除左递归 1. 提取左公因子形如: Aa 1a 2.a n 提取左公因子: A a( 1 2. n)改写为: A a A A 1 2. n 2. 消除左递归 (如果一个 文法是左递归时,则不能采用自顶向下分析法。 )(1)左递归的定义 (含有左递归的文法绝对不是 LL(1)文法)一个文法含有下列形式的产生式时, AA AVN , V* 直接左递归 AB B A A, BVN , , V * 间接左递归(2)直接左递归的消除 (改为右递归)形如: A A a|(a

11、 非 , 不以 A 打头)改写为: A A A aA | 形如: AA a1 | Aa2 | . . . | Aan | b1 | b2 | . . . | bm 其中,每个 a 都不等于 ,b1 , . . . , bm 均不以 A 开头。改写为: A b 1 A | b2 A | . . . | bm A A a 1 A | a2 A | . . . | an A | SSa Sb SbS SaS| E E + TT T T * FFF ( E )i E T EE + T ET F TT * F TF ( E )i 预测分析法(又称 LL(1)分析法,属于确定的自顶向下分析方法) 基本思想

12、 :从左到右扫描源程序,直接根据:(1) 当前(需推导 )的语法变量; (2) 输入串的当前输入符号; 确定进行分析所需的候选式:使其第一个符号与当前输入符号相同,或该候选式可推导出的第一个符号与当前符号相同。预测分析器构成:预测分析程序,先进后出栈,预测分析表与文法有关第七章对输入串的分析过程(已知文法的分析表)LR 分析法:是一种规范规约过程LR(k)含义L :从左到右扫描输入符号R :最右推导对应的最左归约 (反序完成最右推导)k :超前读入 k 个符号,以便确定归约用的产生式LR(0)项目分类移进项目,形如 A a,a 是终结符, , V * 以下同 【例】 S bBB 待约项目,形如

13、 A B 【例】 Sb BB SbB B 归约项目,形如 A 【例】 SbBB 接受项目,形如 S S 第八章:一个属性文法包含一个上下文无关文法和一系列语义规则,这些语义规则附在每个产生式上。文法符号的属性:单词的含义,即与文法符号相关的一些信息。如,类型、值、存储地址等。一个属性文法(attribute grammar)是一个三元组 A=(G, V, F)G:上下文无关文法。V:属性的有穷集。每个属性与文法的一个终结符或非终结符相连。属性与变量一样,可以进行计算和传递。F:关于属性的断言或谓词(一组属性的计算规则 )的有穷集。断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符

14、或非终结符相联的属性。综合属性:若产生式左部的单非终结符 A 的属性值由右部各非终结符的属性值决定 , 则 A的属性称为综合属性。 继承属性:若产生式右部符号 B 的属性值是根据左部非终结符的属性值或者右部其它符号的属性值决定的,则 B 的属性为 继承属性。在两种情况下,都说属性 b 依赖于属性 c1,c2,ck(1)非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性。(2) 终结符只有综合属性,没有继承属性,它们由词法程序提供。在计算时: 综合属性沿属性语法树向上传递;继承属性沿属性语法树向下传递。 语法制导翻译:是指在语法分析过程中,完成附加在所使用的产生式上的语义规则描述的

15、动作。语法制导翻译实现:对单词符号串进行语法分析,构造语法分析树,然后根据需要构造属性依赖图,遍历语法树并在语法树的各结点处按语义规则进行计算。中间代码(中间语言)1、是复杂性介于源程序语言和机器语言的一种表示形式。/2、一般,快速编译程序直接生成目标代码。3、为了使编译程序结构在逻辑上更为简单明确,常采用中间代码,这样可以将与机器相关的某些实现细节置于代码生成阶段仔细处理,并且可以在中间代码一级进行优化工作,使得代码优化比较容易实现。何谓中间代码:源程序的一种内部表示,不依赖目标机的结构,易于代码的机械生成。为何要转换成中间代码逻辑结构清楚;利于不同目标机上实现同一种语言。便于移植,便于修改

16、,便于进行与机器无关的优化。中间代码的几种形式:逆波兰记号 ,三元式和树形表示 ,四元式 逆波兰记号:把运算分量(操作数 )写在前面,把运算符写在后面的表示法,又称后缀表示法。中缀表达式向逆波兰表达式转换postfix(x)=x postfix(c)=cpostfix(E1 op E2)= postfix(E1) postfix(E2) oppostfix(E)= postfix(E) 第九章:符号表的一般形式:一张符号表的的组成包括两项,即名字栏和信息栏。 信息栏包含许多子栏和标志位,用来记录相应名字和种种不同属性,名字栏也称主栏。主栏的内容称为关键字(key word) 。符号表的功能:(

17、1)收集符号属性在分析语言程序中标识符说明部分时,编译程序根据说明信息收集有关标识符的属性,并在符号表中建立符号的相应属性信息。(2) 上下文语义的合法性检查的依据: 检查标识符属性在上下文中的一致性和合法性。(3)作为目标代码生成阶段地址分配的依据符号的主要属性及作用:1. 符号名 2. 符号的类型 (整型、实型、字符串型等) )3. 符号的存储类别(公共、私有)4. 符号的作用域及可视性 (全局、局部) 5. 符号变量的存储分配信息 (静态存储区、动态存储区)6. 符号的其它属性 数组内情向量(类型、维数、各维的上下界、首地址等 ) 记录结构型的成员信息函数及过程的形参 第十章:运行时的存

18、储区为了使目标程序能够运行,编译程序要从操作系统中得到一块存储区,以使目标程序能够在其上运行。运行时的存储区划分目标区:存放目标代码。静态数据区:编译时能确定所占用空间的数据。栈区和堆区:可变数据及管理过程活动的控制信息。存储分配方案策略:静态存储分配;动态存储分配:栈式、 堆式。 静态存储分配1、基本策略在编译时就安排好目标程序运行时的全部数据空间,并能确定每个数据项的单元地址。2、适用的分配对象:子程序的目标代码段;全局数据目标(全局变量)3、静态存储分配的要求:不允许递归调用,不含有可变数组。FORTRAN 程序是段结构,不允许递归,数据名大小、性质固定。 是典型的静态分配动态存储分配

19、1、如果一个程序设计语言允许递归过程、可变数组或允许用户自由申请和释放空间,那么,就需要采用动态存储管理技术。2、两种动态存储分配方式:栈式,堆式栈式动态存储分配分配策略:将整个程序的数据空间设计为一个栈。【例】在具有递归结构的语言程序中,每当调用一个过程时,它所需的数据空间就分配在栈顶,每当过程工作结束时就释放这部分空间。过程所需的数据空间包括两部分一部分是生存期在本过程这次活动中的数据对象。如局部变量、参数单元、临时变量等;另一部分则是用以管理过程活动的记录信息(连接数据) 。活动记录(AR)一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区 (块)叫做一个活动记录。构成1、

20、临时工作单元;2、局部变量;3、机器状态信息;4、存取链;5、控制链;6、实参;7、返回地址第十一章:什么是代码优化所谓优化,就是对代码进行等价变换,使得变换后的代码运行结果与变换前代码运行结果相同,而运行速度加快或占用存储空间减少。优化原则:等价原则:经过优化后不应改变程序运行的结果。 有效原则:使优化后所产生的目标代码运行时间较短,占用的存储空间较小。 合算原则:以尽可能低的代价取得较好的优化效果。常见的优化技术(1) 删除多余运算(删除公共子表达式 ) (2) 代码外提: 是针对循环的(3)强度削弱; 把执行时间较长的运算替换为执行时间较短的运算(4)变换循环控制条件 (5)合并已知量与

21、复写传播 (6)删除无用赋值基本块定义程序中只有一个入口和一个出口的一段顺序执行的语句序列,称为程序的一个基本块。对四元式序列,各个基本块的入口语句是:(1)代码序列的第一个语句。 (2)转移语句的目标语句。 (3)转移语句的下一条语句。例子:(1) read (C)(2) A:= 0(3) B:= 1(4) L1: A:=A + B(5) if B= C goto L2(6) B:=B+1(7) goto L1(8) L2: write (A)(9) halt必经结点在程序流图中,对任意结点 m 和 n,如果从流图的首结点出发,到达 n 的任一通路都要经过 m,则称 m 是 n 的必经结点,

22、记为 m DOM n。必经结点集:流图中结点 n 的所有必经结点的集合称为结点 n 的必经结点集,记为 D(n)。回边:假设 a b 是流图中一条有向边,如果 b DOM a,则称 ab 是流图中的一条回边。循环(依据回边判断)1、给出一个回边 nd,定义这个边的( 自然)循环是 d 加上所有不经过 d 能到达 n 的结点;2、d 是这个循环的首结点。 【 例 】 求出左图的所有回边。【解答】(1) 66,因为 D(6)=1,2,4,6,所以 6 DOM 6,故 66 是回边;(2) 74,因为 D(7)=1,2,4,7,所以 4 DOM 7,故 74 是回边;(3) 42,因为 D(4)=1,2,4,所以 2 DOM 4,故 42 是回边。容易看出,其它有向边都不是回边。 例二:求回边和循环 回边 4 3(3 DOM 4)循环:3,4,5,6,7,8,101243576回边 7 4( 4 DOM 7 )循环:4,5,6,7,8,10回边 107 ( 7 DOM 10 )循环: 7,8,10回边 8 3 (3 DOM 8)循环:3,4,5,6,7,8,10

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

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

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


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

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

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