编译期末复习小结 上海海洋

发布 2021-04-20 23:47:28 阅读 9342

⒈编译程序的工作过程一般可以划分为词法分析、语法分析、语义分析、中间**生成、**优化和**生成等几个基本阶段,同时还伴有**处理和出错处理。

若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。

编译方式与解释方式的根本区别在于是否生成目标**。

翻译程序是这样一种程序,它能将用甲种语言书写的程序转换成与其等价的乙种语言书写的程序。

对编译程序而言,输入数据是源程序,输出结果是目标程序。

运行编译程序的计算机称宿主机,运行编译程序所产生目标**的计算机称目标机。

当把编译程序划分成编译前端和编译后端时,前端主要由与源语言有关但与目标机无关的部分组成,编译后端包括编译程序中与目标机有关的部分,编译后端不依赖于源语言而仅仅依赖于中间语言。

描述词法规则的有效工具是正规式,通常使用上下文无关文法来描述语法规则,使用属性文法描述语义规则。

上下文无关文法包括以下四个组成部分:一组终结符号,一组非终结符号,一个开始符号,以及一组产生式。

如果一个文法存在某个句子对应两棵不同的语法树,则这个文法是二义文法。

消除文法的二义性的方法主要有:改写二义文法为非二义文法;为文法符号规定优先顺序和结合规则。

自上而下语法分析中存在的主要问题是由左递归引起的无限循环问题和左公共因子引起的回溯问题。

.ll(1)文法是即不含左递归,也没有左公共因子的文法。要避免回溯,第一,需要文法中每一个非终结符a的各个产生式的候选首符集两两不相交,即,若a→1|2|…|n,则 first first =,ij);第二,若a存在某个候选首符集包含,则first follow =,i=1,2,..n。

自上而下语法分析的基本思想是,对任何输入串,从文法的开始符号,即根结点出发,自上而下地为输入串建立一颗语法树。递归下降分析器采用的是自上而下语法分析方法,非递归的**分析器采用的是自上而下语法分析方法,lr分析器采用的是自下而上语法分析方法。

**分析器模型是由输入、输出、栈、总控程序和**分析表组成。

自下而上语法分析的基本思想是,从终结符号开始,逐步进行规约,直至规约到文法的开始符号,即从语法树的叶节点开始,步步向上规约,直到根结。

lr分析器模型包括输入、输出、lr分析程序、栈和含有动作action与状态转换goto两部分的分析表。

属性文法是在上下文无关文法的基础上,为每个文法符号配备若干相关的“值”,称为属性,属性与变量一样可以进行计算和传递,属性加工的过程即是语义处理的过程,对文法的每个产生式配备的一组属性的计算规则,叫语义规则,语义分析和中间**的产生就是根据该规则进行的,在自上而下或自下而上语法分析过程中,在适当的时候进行属性的计算或其它语义动作(如查填符号表、产生中间**、发布出错信息)就可进行语法制导翻译得到中间**,这就是语法制导翻译的基本思想。

文法符号的属性分为两类,综合属性用于“自下而上”传递信息,继承属性用于“自上而下”传递信息。

不同的编译程序关于数据空间的存储分配策略会有所不同,静态分配策略在编译是对所有数据对象分配固定的存储单元,且在运行是始终保持不变;另外还可采用的分配策略是栈式动态分配策略和堆式动态分配策略。

21. 过程一次执行所需局部信息用一块连续的存储区来管理,这块存储区叫活动记录,它由临时数据、局部数据、机器状态、访问链、控制链、参数和返回值等域构成,不同的语言及同一语言的不同编译器使用的域可能不同,这些域在其中的布局也可能不同,另外寄存器往往可以取代它们中的一个或多个域。

22. 编译过程中编译程序需要不断汇集和反复查证出现在源程序中各种名字的属性和特征等有关信息,这些信息通常记录在一张或几张符号表中。

23. **优化可在编译的各阶段进行,其中主要的一类是在目标**之前生成的,这类优化不依赖于具体的计算机。

24. **优化可在编译的各阶段进行, 有一类是在生成目标**时进行的,这类优化在很大程度上依赖于具体的计算机。

25. 并行编译技术中两个最重要的内容是串行程序的向量化和并行化。

1.什么是编译程序?

答:编译程序也叫编译系统,是把用高级语言编写的面向过程的源程序翻译成目标程序的语言处理程序。

2. 什么是解释程序?

答:将源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身。

3. 什么是翻译程序?

答:能够把一种语言程序转换成另一种语言程序,而后者在与前者在逻辑上是等价的。

4. 以上3种程序的区别。

答:翻译程序只生成程序但不运行;解释程序一边翻译一边运行,但不生成目标**;编译程序生成目标**,并运行。

8. 什么是ll(1)文法?

答:对文法g的句子进行确定的自顶向下语法分析的充分必要条件是,g的任意两个具有相同左部的产生式a—>α满足下列条件: (1)如果均不能推导出,则 first(α)first(β)2)α 和 β 至多有一个能推导出 ε。

3)如果 β 则 first(α)follow(a将满足上述条件的文法称为ll(1)文法。

9. **分析器模型由哪些部分组成?答:输入串、输出、栈、总控程序、**分析表。

10.lr分析器模型由哪些部分组成?

答:输入串、输出、lr分析程序、栈、包含动作action和状态转换goto表的分析表。

15. 简述语法制导翻译的基本思想。

答:根据翻译的需要设置文法符号的属性,以描述语法结构的语义。例如,一个变量的属性有类型,层次,存储地址等。

表达式的属性有类型,值等。属性值的计算和产生式相联系。随着语法分析的进行,执行属性值的计算,完成语义分析和翻译的任务。

18. c语言的编译系统应该采用哪种存储分配策略,并简述理由。

答:采用栈式存储分配策略。c语言不允许过程嵌套,就是说,不允许一个过程定义出现在另一个过程定义之内,所以,c语言的非局部量仅能出现在源程序头,非局部量可采用静态存储分配,编译时确定它们的地址。

过程的每一局部变量或形参在活动记录中的位置是确定的,就是说,对它们都分配了存储单元,其地址是相对于活动记录的基地址(sp)的。因此,变量和形参运行时在栈上的绝对地址是:

绝对地址=活动记录基地址+相对地址。于是,对一个当前正在活动的过程中的任何局部变量或形参的引用可表示为变址访问形参代表的相对数,也就是相对于活动记录起点的地址。这个相对数在编译时可完全确定下来。

过程的局部数组的内情向量的相对地址在编译时也同样可完全确定下来,一旦数据空间在过程里获得分配后,对数组元素的引用也就容易用变址访问的方式来实现。只能采用在程序运行时动态地进行分配(栈式分配)

19. pascal语言的编译系统应该采用哪种存储分配策略,并简述理由。

答:pascal是一种允许过程嵌套性的语言。在编译时刻无法预先确定哪些递归过程在运行时被激活,更难以确定它们的递归深度,而每次递归调用,都要为该过程中的每个数据对象分配一个新的存储空间。

但由于pascal含有“文件”和“指示器”这些数据类型,因此,它的存储分配不能简单地运用栈式的办法来实现。因此,需要采用一种更复杂的堆式动态分配策略。

20. 编译系统常见的存储分配策略有几种?它们都适合于什么性质的语言?

( 1 ) 静态存储分配 (全部适用)( 2) 栈式分配适用于允许递归调用的程序设计语言 (过程语言—c、fortran、pascal、面向对象语言—jaca,c++)

3 ) 堆式分配对于允许程序在运行时为变量动态申请和释放存储空间的语言 ,采用堆式分配是最有效的解决方案 (面向对象语言—jaca,c++及c、pascal)

21. 简述编译过程中**优化必须遵循的原则。

答:等价原则、有效原则、合算原则。

22. 对中间**中基本块的优化和循环优化都是与机器无关的**优化,请给出2-3种对中间**优化的方法。答:**外提、强度消弱、删除归纳变量(变换循环控制条件)

23. 与机器无关的**优化有哪些种类,与机器有关的**优化有哪些种类,请举例说明。

答:与机器有关的**优化分为:寄存器优化,多处理器优化,特殊指令优化,无用指令消除等。

与机器无关的**优化分为:公共子表达式删除、复写传播、删除无用赋值、**外提、强度消弱、窥孔优化……

24. 目标**生成任务是什么?答:把语义分析后或优化后的中间**变换成目标**。

25. 目标**一般有哪几种形式?

② 待装配的机器语言模块,当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言**;

汇编语言**,须经过汇编程序汇编后,成为可执行的机器语言**。

圆锥曲线小结期末复习

圆锥曲线方程小结。圆锥曲线的定义,标准方程和几何性质。直线和圆锥曲线的位置关系,常用联立方程组 判别式来判断,特别当直线与圆锥曲线有两个相异的公共点时,则此直线被圆锥曲线截得的线段称为圆锥曲线的弦。注意弦长公式。关于圆锥曲线的中点弦问题,常用点差法,或联立方程组解决。轨迹问题 常用方法有 直接法 待...

上海版牛津英语1A期末复习题

一,选择题,将正确答案的序号填在括号里。15分 1,书 a.book b.bag 2,铅笔 a.pen b.pencil 1,尺 a.ruler b.rubber 4,五 a.four b.five 5,跳 a.dance b.jump 6,读 a.read b.write 7,眼睛 a.ear b...

上海高一数学期末复习卷

一 填空题。1 已知集合,集合,则。2.函数 且 的图象恒过点。3 函数的奇偶性是 4.若,则的最大值为。5 定义在上的奇函数,当时,则。6 已知函数在 5,上为单调递增函数,则实数的取值范围是。7 用二分法求方程x3 2x 5 0在区间 2,3 上的近似解,取区间中点x0 2.5,那么下一个有解区...