计算机编译原理 (13)

合集下载

编译原理复习题(经典)

编译原理复习题(经典)

编译原理复习题一、是非题1.计算机高级语言翻译成低级语言只有解释一种方式。

(×)3.每个文法都能改写为 LL(1) 文法。

(×)4.算符优先关系表不一定存在对应的优先函数。

(√)5.LR分析方法是自顶向下语法分析方法。

(×)6.“ 用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行”这种说法。

(× )7.一个句型的句柄一定是文法某产生式的右部。

(√)8.仅考虑一个基本块,不能确定一个赋值是否真是无用的。

(√ )9.在中间代码优化中循环上的优化主要有不变表达式外提和削减运算强度。

(× )10.对于数据空间的存贮分配,FORTRAN采用动态贮存分配策略。

(×)11.甲机上的某编译程序在乙机上能直接使用的必要条件是甲机和乙机的操作系统功能完全相同。

(× ) 12.递归下降分析法是自顶向下分析方法。

(√ )13.产生式是用于定义词法成分的一种书写规则。

(×)14.在SLR(1)分析法的名称中,S的含义是简单的。

(√)15.综合属性是用于“ 自上而下” 传递信息。

(× )16.符号表中的信息栏中登记了每个名字的属性和特征等有关信息,如类型、种属、所占单元大小、地址等等。

(×)17.程序语言的语言处理程序是一种应用软件。

(×)18.解释程序适用于COBOL 和FORTRAN 语言。

(×)19.一个LL(l)文法一定是无二义的。

(√)20.正规文法产生的语言都可以用上下文无关文法来描述。

(√)21.一张转换图只包含有限个状态,其中有一个被认为是初态,最多只有一个终态。

(×)22.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。

(√)22.逆波兰法表示的表达式亦称后缀式。

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

(√ )24.数组元素的地址计算与数组的存储方式有关。

编译原理习题答案

编译原理习题答案

编译原理习题答案1、正规文法又称DA、0型文法B、1型文法C、2型文法D、3型文法2、对于无二义性的文法,规范归约是BA.最左推导B.最右推导的逆过程C.最左归约的逆过程D.最右归约的逆过程。

3、扫描器的任务是从源程序中识别出一个个单词符号4、程序所需的数据空间在程序运行前就可确定,称为A管理技术。

A静态存储B动态存储C栈式存储D堆式存储5、编译过程中,语法分析器的任务是(B)。

①分析单词是怎样构成的②分析单词串是如何构成语句和说明的③分析语句和说明是如何构成程序的④分析程序的结构A、②③B、②③④C、①②③D、①②③④6、文法G:E→E+T|TT→T某P|PP→(E)|i则句型P+T+i的句柄和最左素短语分别为BA.指示器B.临时变量C.符号表D.程序变量8、程序语言的单词符号一般可以分为保留字、标识符、常数、运算符、界符等等。

9、下列B优化方法是针对循环优化进行的。

A.删除多余运算B.删除归纳变量C.合并已知量D.复写传播10、若文法G定义的语言是无限集,则文法必然是AA、递归的B、前后文无关的C、二义性的D、无二义性的11、文法G产生的D的全体是该文法描述的语言。

A、句型B、终结符集C、非终结符集D、句子12、Chomky定义的四种形式语言文法中,0型文法又称为A文法;1型文法又称为C文法。

A.短语文法B.上下文无关文法C.上下文有关文法D.正规文法A.短语文法B.上下文无关文法C.上下文有关文法D.正规文法13、语法分析最常用的两类方法是自顶向下和自底向上分析法。

14、一个确定的有穷自动机DFA是一个AA五元组(K,∑,f,S,Z)B四元组(VN,VT,P,S)C四元组(K,∑,f,S)D三元组(VN,VT,P)A、语法B、语义C、代码D、运行15、B不属于乔姆斯基观点分类的文法。

A、上下文无关文法B、算符优先文法C、上下文有关文法D、正规文法16、一个文法所描述的语言是A;描述一个语言的文法是BA.唯一的B.不唯一的C.可能唯一,可能不唯一A.唯一的B.不唯一的C.可能唯一,可能不唯一17、语法分析是依据语言的语法规则进行的,中间代码产生是依据语言的等价变换规则进行的。

编译廖力习题答案

编译廖力习题答案

编译廖力习题答案1、编译过程中,语法分析器的任务不包括()A、分析单词是怎样构成的B、分析单词串是如何构成语句和说明的C、分析语句和说明是如何构成程序的D、分析程序的结构答案:分析单词是怎样构成的2、编写一个计算机高级语言的源程序后,到正式上机运行之前,一般要经过()这几步a、编辑b、编译c、连接d、运行A、abcdB、abcC、acD、ad答案:编译3、解释方式和编译方式的主要区别在于A、能否对源程序查错B、能否生成目标代码C、能否多用户运行D、机器资源利用率高低答案:能否生成目标代码4、若在C语言源程序中出现“&#&”,且不出现在引号和注释里,在编译时会()A、不报错B、语法分析时报错C、词法分析时报错D、代码生成时报错答案:词法分析时报错5、若在C语言程序中出现“aa11bb=123;”,且不出现在引号和注释里,在编译时会()A、词法分析时报错B、语义分析时报错C、生成中间代码时报错D、语法分析时报错答案:语法分析时报错6、面向机器的语言指的是()A、用于解决机器硬件设计问题的语言B、特定计算机系统所固有的语言C、各种计算机系统都通用的语言D、只能在一台计算机上使用的语言答案:特定计算机系统所固有的语言7、面向机器语言的特点是()A、程序的执行效率低,编制效率低,可读性差B、程序的执行效率高,编制效率高,可读性强C、程序的执行效率低,编制效率高,可读性强D、程序的执行效率高,编制效率低,可读性差答案:程序的执行效率高,编制效率低,可读性差8、编译程序是对()A、汇编程序的翻译B、高级语言的解释执行C、机器语言的执行D、高级语言的翻译答案:D满分:2分9、编译程序是一种()软件A、系统B、应用C、MISD、ERP答案:C您的回答:无得分:0分解题思路:无10、()不是编译程序的组成部分A、词法分析器程序B、代码生成程序C、设备管理程序D、语法分析程序答案:设备管理程序11、设有表达式a*b-c,将其中a*b识别为表达式的编译阶段是()A、词法分析B、语法分析C、语义分析D、代码生成答案:语法分析12、编译原理各阶段的工作都涉及到()A、表格管理B、语法分析C、出错处理D、代码优化答案:表格管理;出错处理13、程序语言一般分为()和()A、高级语言B、专用程序语言C、低级语言D、通用程序语言答案:高级语言;低级语言14、高级语言的翻译方式有()和()将高级语言源程序“翻译”成目标程序的方式有()。

《编译原理》第十三章习题答案

《编译原理》第十三章习题答案
问题 5: 编译程序的实现应考虑的问题有那些?
答案: 编译程序的实现 应考虑:开发周期、目标程序的效率、可移植性、可调试性、可维护
性、可扩充性等。
盛威网()专业的计算机学习网站
3
C2,然后分 3 步实现。
盛威网()专业的计算机学习网站
问题 3: 什么叫做软件移植?
答案: 通常把某个机器(称为宿主机)上已有的软件移植到另一台机器(称为目标机)
问题 4: 什么叫做交叉编译?
答案: 交叉编译是指把一个源语言在宿主机上经过编译产生目标机的汇编语言或机器语言。
盛威网()专业的计算机学习网站
1
《编译原理》课后习题答案第十三章
附加题
问题 1: 如何用 T 型图 表示一个编译程序的实现?
答案: 用 T 型图 表示编译程序的实现
问题 2: 如何用自展方式在 PC 机上实现 C 语言的编译程序?请用 T 型图 表示。
答案: 用自展方式在 PC 机上实现 C 语言的编译程序,首先把 C 划分成真包含的子集 C1 和
编译原理第十三章习题答案编译原理课后习题答案编译原理习题答案编译原理第六章答案编译原理第七章答案编译原理第四章答案编译原理第三章答案编译原理第五章答案编译原理复习题编译原理习题
《编译原理》课后习题答案第十三章
第 13 章 编译程序的构造
第1题 构造一个编译程序有哪些途径?
答案:
编译程序的实现途径可有: (1)手工构造:用机器语言、汇编语言或高级程序设计语言书写。 (2)自动构造工具:Lex,Yacc。 Lex ,Yacc 分别是词法和语法分析器的生成器。 (3)移植方式:目标程序用中间语言。 (4)自展方式:用 T 型图表示。

《编译原理》课后习题答案第三章第3章文法和语言第1

《编译原理》课后习题答案第三章第3章文法和语言第1

《编译原理》课后习题答案第三章第3 章文法和语言第1 题文法G=({A,B,S},{a,b,c},P,S)其中P 为:S→Ac|aBA→abB→bc写出L(G[S])的全部元素。

答案:L(G[S])={abc}第2 题文法G[N]为:N→D|NDD→0|1|2|3|4|5|6|7|8|9G[N]的语言是什么?答案:G[N]的语言是V+。

V={0,1,2,3,4,5,6,7,8,9}N=>ND=>NDD.... =>NDDDD...D=>D......D或者:允许0 开头的非负整数?第3题为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。

答案:G[S]:S->S+D|S-D|DD->0|1|2|3|4|5|6|7|8|9第4 题已知文法G[Z]:Z→aZb|ab写出L(G[Z])的全部元素。

盛威网()专业的计算机学习网站 1《编译原理》课后习题答案第三章答案:Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbbL(G[Z])={anbn|n>=1}第5 题写一文法,使其语言是偶正整数的集合。

要求:(1) 允许0 打头;(2)不允许0 打头。

答案:(1)允许0 开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0 开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|0第6 题已知文法G:<表达式>::=<项>|<表达式>+<项><项>::=<因子>|<项>*<因子><因子>::=(<表达式>)|i试给出下述表达式的推导及语法树。

(5)i+(i+i)(6)i+i*i盛威网()专业的计算机学习网站 2 《编译原理》课后习题答案第三章答案:<表达式><表达式> + <项><因子><表达式><表达式> + <项><因子>i<项><因子>i<项><因子>i( )(5) <表达式>=><表达式>+<项>=><表达式>+<因子>=><表达式>+(<表达式>)=><表达式>+(<表达式>+<项>)=><表达式>+(<表达式>+<因子>)=><表达式>+(<表达式>+i)=><表达式>+(<项>+i)=><表达式>+(<因子>+i)=><表达式>+(i+i)=><项>+(i+i)=><因子>+(i+i)=>i+(i+i)<表达式><表达式> + <项><项> * <因子><因子> i<项><因子>ii(6) <表达式>=><表达式>+<项>=><表达式>+<项>*<因子>=><表达式>+<项>*i=><表达式>+<因子>*i=><表达式>+i*i=><项>+i*i=><因子>+i*i=>i+i*i盛威网()专业的计算机学习网站 3《编译原理》课后习题答案第三章第7 题证明下述文法G[〈表达式〉]是二义的。

编译原理作业参考答案

编译原理作业参考答案
(2)
最左推导:NNDDD3D34
NNDNDDDDD5DD56D568
最右推导:NNDN4D434
NNDN8ND8N68D68568
2*.写出一个文法,使其语言是奇数集,且每个奇数是不以0开头。
答:
SCAB|B(考虑了正负号)
A1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | AA | A0 |
低级语言:机器语言和汇编语言。
高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。
翻译程序:能够把某一种语言程序(源语言程序)改变成另一种语言程序(目
标语言程序),后者与前者在逻辑上是等价的。其中包括:编译程序,解释程序,汇编程序。
{2,4}a = {1,0},{2,4}b = {3,5},无需划分
{3,5}a = {3,5},{3,5}b = {2,4},无需划分
{0,1}a = {1},{0,1}b = {2,4},无需划分
因此,最终的划分为:{0,1}、{2,4}和{3,5},化简后的结果:
5.(P65,14)构造一个DFA M,它接受={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。
T*(i+i)F*(i+i)i*(i+i)
⑵构造语法树
E最左推导构造语法树
E + T
E + T i
T i
i
3.(P36, 9)证明下面的文法是二义的:
SiSeS | iSi
答:对于句子iiiei有两棵不同的语法树。因此该文法是二义的。
SiSeSiiSeSiiieSiiiei

编译原理考试试题与答案(汇总)

编译原理考试试题与答案(汇总)
其SLR(1)分析表为:
对输入串ab#给出分析过程为:
一、是非题:
1.一个上下文无关文法的开始符,可以是终结符或非终结符。 ( )
2.一个句型的直接短语是唯一的。 ( )
3.已经证明文法的二义性是可判定的。 ( )
4.每个基本块可用一个DAG表示。 ( )
5.每个过程的活动记录的体积在编译时可静态确定。 ( )
1.编译程序是对高级语言程序的解释执行。(× )
2.一个有限状态自动机中,有且仅有一个唯一的终态。(×)
3.一个算符优先文法可能不存在算符优先函数与之对应。(√ )
4.语法分析时必须先消除文法中的左递归。(×)
5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。(√)
6.逆波兰表示法表示表达式时无须使用括号。(√ )
2.考虑文法G[S]:
S → (T) | a+S | a
T → T,S | S
消除文法的左递归及提取公共左因子。
解:消除文法G[S]的左递归:
S→(T) | a+S | a
T→ST′
T′→,ST′| ε
提取公共左因子:
S→(T) | aS′
S′→+S | ε
T→ST′
T′→,ST′| ε
3.试为表达式w+(a+b)*(c+d/(e-10)+8)写出相应的逆波兰表示。
8.一个过程相应的DISPLAY表的内容为(现行活动记录地址和所有外层最新活动记录的地址)
10.常用的两种动态存贮分配办法是(栈式)动态分配和(堆式)动态分配。
11.一个名字的属性包括( 类型)和(作用域 )。
12.常用的参数传递方式有(传地址),(传值),(传名)

编译原理第三版王生原

编译原理第三版王生原

编译原理第三版王生原编译原理是计算机科学中非常重要的一门课程,它涉及到编程语言的设计、编译器的构建以及程序的执行过程等方面。

《编译原理》第三版由王生原编著,是一本经典的教材,被广泛应用于计算机相关专业的教学和研究中。

本书共分为13章,内容涵盖了编译原理的基本概念、词法分析、语法分析、语法制导翻译、中间代码生成、运行时环境等多个方面。

每一章都详细介绍了相关的理论知识,并通过大量的实例和案例分析,帮助读者深入理解和掌握编译原理的核心内容。

在第一章中,王生原介绍了编译原理的基本概念和编译器的工作原理。

他首先阐述了编译器在程序设计和执行过程中的重要作用,然后详细介绍了编译器的基本结构和工作流程。

通过对编译器的整体框架和各个模块的功能进行分析,读者可以清晰地了解编译器的工作过程,为后续的学习打下坚实的基础。

接下来的几章分别介绍了词法分析和语法分析的原理和方法,包括正规表达式、有限自动机、上下文无关文法等内容。

王生原通过丰富的例子和图表,生动地阐述了这些复杂概念,帮助读者理解和掌握这些重要的知识点。

在中间代码生成和运行时环境这两个关键章节中,王生原详细介绍了中间代码的生成过程和运行时环境的组织结构,为读者展示了编译器如何将高级语言程序翻译成目标代码,并在目标机器上执行的全过程。

除了理论知识的讲解,本书还包括了大量的实例和案例分析,帮助读者将理论知识应用到实际的编译器设计和实现中。

通过这些实例,读者可以更加直观地了解编译原理的应用,提高自己的实际编程能力。

总的来说,王生原的《编译原理》第三版是一本很好的教材,它系统全面地介绍了编译原理的基本概念和核心技术,适合计算机相关专业的学生和从业人员阅读和参考。

通过学习本书,读者可以全面深入地了解编译原理的知识体系,提高自己的编程能力,为今后的学习和工作打下坚实的基础。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
5.1 过程的动态特性
5.1.1 过程与活动
<1> 过程、活动、生存期 过程的每一次运行称为一次 活动 ( activation )。 活 动是一个动态的概念,它有有限的生存期(life time)。 定义5.1 活动的生存期是指从进入活动的第一条指令执行到 离开此活动前的最后一条指令执行的这段时间,其中包括 调用其它过程时其它活动的生存期。 ■
重点:详细讨论
20
<3> 堆分配策略
5.2.2 静态与动态分配简介(续2)
特点:可任意分配和撤消数据;对程序设计语言没有限制; 静态、栈与堆的关系: 可以静态分配的数据均可以栈分配 可以静态和栈分配的数据均可以堆分配 反之不一定 堆分配的基本思想:(用一个双向队维护可用空间信息)
21
期末安排
• • • •
19
<2> 栈分配策略
5.2.2 静态与动态分配简介(续1) 特点:按栈的方式分配存储空间 限制: 1. 当活动停止后,局部于活动的名字值不能保持(会出现悬 空引用); 2. 无法处理需要随时分配或撤销(不满足LIFO)的动态数据; 3. 被调用者的活动比调用者的活得更长,此时,活动树不能 正确描绘过程间的控制流。(send/receive) 存储安排:
2
5.1.1 过程与活动(续1)
<2> 活点是有去必有回 • 顺序调用:生存期不交 • 嵌套调用:生存期嵌套,关系由活动执行轨迹的 条件(例如参数等)动态确定 • 容易混淆的概念:过程的并行定义和嵌套定义( 作用域不交和嵌套) 2. 消息传递:send/receive,特点是可以有去无回。
28
<3> 调用序列和返回序列内容 调用序列 调用者(①): 传递参数 维护访问链(如果必要) 保存返回地址和控制链 保存机器状态 (指令计数器寄存器等) 将控制转向被调用者 被调用者(②): 设置新的活动记录大小 为可变数组分配空间(若有) 初始化本地数据(若必要) ...(开始可执行代码)
5.3.2 调用序列与返回序列(续2) 返回序列 被调用者(③): 保留返回值(若为函数) 恢复访问链(如果必要) 恢复调用时机器状态 恢复控制链 将控制返回调用者 调用者(④): 接收返回值(若有的话) ...(继续执行代码)
25
5.3.1 控制栈中的活动记录(续2) 例5.5 控制栈的变化过程(从s到r、q(1,9)、q(1,3)、q(1,0))
26
5.3.2 调用序列与返回序列
<1> 简化的活动记录 任何时刻 top和sp 都是唯一的! (因为只有一个栈) top→ 参数与返回值 控制链 (调用与返回序列引用) sp→ 本地数据 临时变量 (过程运行时引用)
top→
问题:如何使得过程调用和返回时能够实现: 1. 程序控制流正确转移 2. 活动记录正确切换 解决方案: 在过程运行代码的适当位置,加入实现这些功能的代码。 称它们为调用序列和返回序列
27
5.3.2 调用序列与返回序列(续1) <2> 调用序列和返回序列的位置 调用序列:①、② 返回序列:③、④ <3> 调用序列和返回序列的内容
5
5.1.1 过程与活动(续4) 例5.1 考虑快排序过程: program sort(input, output); procedure readarray; function partition(y, z: integer):integer; procedure quicksort(m,n:integer); i:=partition(y,z)的结果: 考虑sort的执行: 时间缩为一个点,且翻转:
16
5.2 运行时数据空间的组织
5.2.1 运行时内存的划分与数据空间的存储分配策略
可执行代码(静态数据区)[注] 静态数据区(static data) 栈(stack) ↓ ↑ 堆(heap) [注] 当前情况下,源程 序代码与可执行代码是一 对一的关系,因此可以静 态绑定。 OOPL允许对代码重置 (override),因此代码 也存在动态绑定问题。
5.1.2 控制栈与活动记录
控制流与活动树的关系
<1> 程序控制流:对应活动树从根开始的一次深度优先遍历。 <2> 活动树上各节点之间具有下述关系: 同一层次的活动生存期不交; 任一时刻,处在生存期的活动构成一条从根到某节点的路径; 路径上各节点生存期是嵌套的(后进先出)。
8
控制流与活动树的关系(续) <3> 控制栈与活动记录 控制栈:保存所有在生存期的活动(一条后进先出的路径) 活动记录(activation record):栈中的每个元素称为一 个活动记录,为活动提供的活动场所。 活动记录中至少应该存放两类信息: 1. 控制信息:控制活动的正确调用与返回和控制活动记 录的正确切换; 2. 访问信息:用于为当前活动提供对数据,如本地数据 和非本地数据的访问。
14
<4> 环境与状态
5.1.3 名字的绑定(续4)
环境与状态是1对多的映射: 允许递归调用的情况下,同一作用域中的一个名字,可 以同时绑定到多个存储单元。如同一个快排序过程的三个活 动的活动记录q(1,9)、q(1,3)和q(1,0)均被放在控制栈中; 由于一个存储单元可以存放不同的值,状态也是一个一 对多的映射。
15
5.1.3 名字的绑定(续5) <5> 影响存储分配策略的因素 编译器怎样对存储空间进行组织和采用什么样的存储分 配策略,很大程度上取决于程序设计语言采用的机制,如: • 过程能否递归 • 过程能否嵌套 • 过程调用时参数如何传递 • 哪些实体可以作为参数和返回值 • 是否允许动态的为对象分配和撤销存储空间 • 存储空间是否必须显式地释放 • 等等
23
5.3 栈式动态分配
5.3.1 控制栈中的活动记录
<1> 活动记录的具体内容(控制信息+访问信息 ) 1. 参数与返回值 2. 控制链(可选) 3. 访问链(可选) 4. 保存的机器状态 5. 本地(局部)数据 6. 临时变量 其中: 1. 参数与返回值:存放实参和返回值; 2. 控制链(可选):指向调用者活动记录 的指针,用于当调用返回时,将当前 栈顶正确切换到调用者的活动记录; 3. 访问链(可选):用于在可嵌套定义的 过程中指示访问非本地数据;
正课:6月5日、12日 复习:6月19日(课程内容、习题、考试相关问题) 考试:7月5日5、6节 考前答疑:课代表与同学和辅导老师商量确定(两个 半天) • 注:若同学希望作业讲解,则课代表与辅导老师商量 确定
苯鸟先飞
勤能补拙
结束(2007年5月29日)
22
上次课程内容
1. 过程的动态特性 • 过程、活动、活动的生存期 • 顺序执行程序的控制流 • 活动树与控制栈 • 控制栈与活动记录 2. 名字的绑定 • 绑定是运行时名字与存储空间的结合 • 环境与状态、名字与存储空间1对多的关系 3. 影响存储分配策略的因素 4. 运行时内存的划分和数据空间的分配策略 • 静态数据区 (静态分配策略) • 动态数据区—栈数据区(栈分配策略) —堆数据区(堆分配策略)
3
<3> 顺序执行程序的控制流
5.1.1 过程与活动(续2)
特点:程序的执行在时间上是顺序的和排他的。即在程 序执行的任一瞬间,有且仅有一个活动正在活动。 假想时间是一支笔,则任何一个顺序执行程序的执行 过程(控制流)是一个“一笔画”。 控制流满足: ① 控制流是连续的; ② 过程间的控制流可以用树来表示。
9
5.1.2 控制栈与活动记录(续1) 例5.2 快排序程序运行时某状态的控制栈:
控制栈中保存了任何时刻所有在生存期活动的活动记录
10
5.1.3 名字的绑定
<1> 名字的绑定 定义 5.3 运行时为名字 X 分配存储空间 S , 这一过程 称为绑定(binding)。 ■ 换句话说,绑定是名字X与存储空间S的结合。 X是一个对象: • 既可以是数据对象,如变量,与之结合的是一个 存储单元; • 也可以是操作对象,如过程,与之结合的是可执 行的代码。 • 我们的讨论仅限于X是一个数据对象。
数据区与分配策略: 1. 静态分配策略:编译时安排所有数据对象的存储,即绑 定是静态确定的; 2. 栈分配策略:按栈的方式管理运行时的数据存储空间; 3. 堆分配策略:在运行时根据要求从堆数据区动态地分配 和释放数据存储空间。 17
5.2.2 静态与动态分配简介
<1> 静态分配策略: 特点:绑定是1对1的映射。名字在程序编译时与存储空 间结合,每次过程活动时,它的名字映射到同一存储单元。 程序运行时不再有对存储空间的分配。
6
5.1.1 过程与活动(续5) 活动树的实质是反映了顺序执行程序的调用和时序关系,它 把每个活动的生存期缩小到了一点。 其中: 例5.1 快排序程序的一次执行的活动树: s-sort r-readarray q-quicksort p-partition
5
8
10
20
30
仅关心活动是否可正确执行,不关心活动执行了多长时间 7
18
<1> 静态分配策略(续) 静态分配的限制: 1. 数据对象的大小和它在内存中位置的限制必须在编译时确定, 如数组的大小不能是动态的; 2. 不允许程序递归,因为一个过程的所有活动使用同样的名字 绑定,即绑定是一对一的; 3. 不能动态生成或撤消数据,因为运行时没有存储分配机制。 完全采用静态分配的语言:早期的FORTRAN。 允许分别编译的数据定义模块 ( 如全程引用的数据 ) , 也可以采用静态分配,因为它们一般在整个程序运行的 期间被共享。
11
<2> 静态与动态
5.1.3 名字的绑定(续1)
名字的声明与名字的绑定均需要有对应的存储空间,而存 储空间的对应方式,一个是静态的,一个是动态的。 声明时关心的是声明的作用域,即当一个名字被引用时, 在不同的作用域中与该名字的不同声明结合;名字和作用域是 静态的一对一关系。 绑定时关心的是绑定的生存期,即当一个名字在运行时被 实际分配的存储单元,名字与存储单元结合的这段时间被称为 绑定的生存期,显然此生存期应该和名字的生存期一致。 运行时名字与存储单元的结合可以是一对多的关系。 静 态 动 态 过程的定义 过程的活动 名字的声明 名字的绑定 声明的作用域 绑定的生存期 12 符号表 活动记录
相关文档
最新文档