《编译原理第十三章ppt课件.ppt》由会员分享,可在线阅读,更多相关《编译原理第十三章ppt课件.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用第十二章第十二章 运行运行时存存储空空间的的组织电子科技大学计算机科学与工程学院要执行和实现目标程序,需要一个运行环境来支持,要对程序中的变量进行存储分配,并提供各种运行信息。因此,本章主要讨论:运行时存储空间的组织程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的
2、金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用电子科技大学计算机科学与工程学院第一节第一节 程序的存储空间程序的存储空间程序投入运行的必要条件:程序投入运行的必要条件:1.1.一组可运行的代码一组可运行的代码2.2.一个运行环境一个运行环境 分配空间分配空间:变量、临时变量、数组、单元变量、临时变量、数组、单元 提供运行信息:提供运行信息:返回地址、主调过程的存储区返回地址、主调过程的存储区程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔
3、偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用电子科技大学计算机科学与工程学院ipip代码存储器代码存储器代码存储器代码存储器(C C C C)数据存储器数据存储器数据存储器数据存储器(D D D D)假定当前指令指针ip的值为i,则当前指令的存储地址用Ci表示一、代码空间一、代码空间线性存放着目标指令序列在GAM中,当前执行的指令位置由指令指针ip指示程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损
4、失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用电子科技大学计算机科学与工程学院二、数据空间二、数据空间编译程序给源程序中的各种类型的变量和常数分配的存诸空间,称为程序的数据空间。ipip代码存储器代码存储器代码存储器代码存储器(C C C C)数据存储器数据存储器数据存储器数据存储器(D D D D)若某个变量分配在D的i个单元,则用Di表示该变量的存诸位置(地址)数据空间在运行时是可以改变的,即动态的程序设计语言与编译经营者提供商品或者服务有欺诈行为的,
5、应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用电子科技大学计算机科学与工程学院(1)内容:变量、常数、控制和管理信息、描述符等(2)静态分配:在运行前就可确定数据空间的大小 在编译时刻就能进行的存储分配(3)动态分配:运行时才能进行的存储分配栈分配:因变量生存期的嵌套性堆分配:因生存期的随机交叉特性程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买
6、商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用电子科技大学计算机科学与工程学院临时变量量返回指返回指针动态链接接静静态链接接现场保保护参数个数参数个数参数参数单元元局部局部变量量被调用单元返回时的地址被调用单元返回时的地址指向调用单元最新活动记录的指针指向调用单元最新活动记录的指针指向被调用单元直接外层的指向被调用单元直接外层的最新活动记录的指针最新活动记录的指针保存调用时的机器状态保存调用时的机器状态调用单元向被调用单元传递调用单元向被调用单元传递的单元个数的单元个数为形式参数分配的
7、存储单元为形式参数分配的存储单元为局部变量分配的存储单元为局部变量分配的存储单元为临时变量分配的存储单元为临时变量分配的存储单元三、活动记录三、活动记录一个程序单元的一次激活所需的信息管理是通过相应的活动记录来实施的。一个单元的每次激活,都应建立相应的活动记录,它是单元实例的一部分。程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用除了变量存储区外,其余部分存储长度编译
8、时可以确定,则元素i的地址可用下式计算 D+offset(i)其中,offset(i)是i在活动记录中的位移;D是活动记录的首地址活动记录的特点活动记录的特点电子科技大学计算机科学与工程学院程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用四、变量的存储分配四、变量的存储分配条件是:语言允许递归调用1.1.静态变量静态变量:不管在程序单元的哪一次活动中,均绑定于相同的存
9、储位置条件是:活动记录,变量的存储位置在编译时可以确定2.2.半静态变量半静态变量:编译时确定相对位置,单元被激活后,x绑定于D+Offset(x)电子科技大学计算机科学与工程学院程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用3.3.半动态变量半动态变量:动态数组 编译时在活动记录中建立描述符例:1.m int a;1.n int b;4.4.动态变量动态变量:动态
10、分配编译时在活动记录中为动态变量设置二个指针,一个指向该变量的描述符,另一个指向该变量的存储空间电子科技大学计算机科学与工程学院程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用五、五、存储分配模式存储分配模式1.1.静态分配静态分配只允许静态变量,变量与存储区域的绑定关系在编译时便可建立,并完成存储分配。不允许递归调用,不允许动态数组,不允许动态类型的数据对象,即不允
11、许有非静态变量。如:FORTRAN语言。电子科技大学计算机科学与工程学院程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用2.2.栈式分配栈式分配各单元之间的调用关系遵循“后进先出”模式活动记录的建立和撤消也满足“后进先出”模式用栈分配活动记录分配方法:当激活一个程序单元时,其活动记录就动态地分配于栈顶。电子科技大学计算机科学与工程学院程序设计语言与编译经营者提供商品或
12、者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用R R的活动记录的活动记录Q Q的活动记录的活动记录P P的活动记录的活动记录如:如:P P调用调用Q Q,Q Q调用调用R R.电子科技大学计算机科学与工程学院程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消
13、费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用3.3.堆分配堆分配由于动态变量表示的数据对象,它的长度、个数都有可能在执行中改变,即在其生存期中动态改变,就不可能在栈上为这样的对象作分配。出现下列情况时,必须用堆式分配:(1)单元活动结束后,局部变量的值还需保留;(2)调用单元与被调用单元的生存期不满足嵌套关系,即出现交叉现象。电子科技大学计算机科学与工程学院程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的
14、要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用代码静态数据栈堆存储空间的组织存储空间的组织电子科技大学计算机科学与工程学院程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用第五节第五节 参数传递参数传递先看例子:procedure swap(a,b:integer);var temp:integer;begin temp:=a;a:=b;
15、b:=temp end;call swap(x,y);.形式参数形式参数实在参数实在参数程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用1.程序单元间通信方式有非局部环境和参数传递2.参数,形参,实参3.参数传递的三种类型:数据参数传递 过程参数传递 类型参数传递几点说明几点说明:程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到
16、的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用以调用 swap(i,ai)为例,且调用前 i=3 a 的几个元素分别为7,1,4,5,8程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用1.1.引用调用(传地址)引用调用(传地址
17、)在单元中对形参的引用,实际上是对形式单元中实参地址的间接引用将实参的地址传递给相应的形参程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用swap(i,ai);相当于执行:a:=i的地址;b:=a3的地址;temp:=a;(temp=3)a:=b;(i=4)b:=temp;(a3=temp=3)执行结果:i=4,a3=3程序设计语言与编译经营者提供商品或者服务有欺诈行
18、为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用2.2.值调用值调用形参只起局部变量作用形参只起局部变量作用 (1)(1)传值传值:实参的值实参的值形式单元形式单元 (2)(2)结果调用结果调用:形参的结果值形参的结果值实参单元实参单元 (3)(3)传值得结果:实参的值传值得结果:实参的值形式单元形式单元 形参的结果值形参的结果值实参单元实参单元 实现技术:一个形参对应两个单元实现技术:一个形参对应两个单元程序设计
19、语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用对“传值得结果”swap(i,ai);相当于执行:a1:=i的地址;a2:=3;b1:=a3的地址;b2:=4;temp:=a2;(temp=a2=3)a2:=b2;(a2=b2=4)b2:=temp;(b2=temp=3)a1:=a2;(i=a2=4)b1:=b2;(a3=b2=3)执行结果:i=4,a3=3程序设计语言与编译
20、经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用3.3.名调用名调用用实参原样替换形参的出现若被调用单元中的局部名与调用处的名发生冲突,则对局部名重新命名实现技术:把实参处理成一个子程序(thunk,称为参数子程序),对形参的每次引用就调用该子程序程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服
21、务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用swap(i,ai);相当于执行:temp:=i;(temp=i=3)i:=ai;(i=a3=4)ai:=temp;(ai=a4=temp=3)执行结果:i=4,a4=3 (a3不变)程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用
22、练习练习program main;program main;var a,b:integer;var a,b:integer;procedure P(x,y,z)procedure P(x,y,z)beginbeginy:=y+1;y:=y+1;z:=z+x;z:=z+x;endend begin begina:=2;a:=2;b:=3;b:=3;P(a+b,a,a);P(a+b,a,a);Write(a,b);Write(a,b);End.End.对引址调用、传值和名调用对引址调用、传值和名调用三种参数传递方式,打印的三种参数传递方式,打印的a,ba,b的值分别是什么的值分别是什么程序设计语言
23、与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用电子科技大学计算机科学与工程学院2022年12月28日 早期的早期的FORTRANFORTRAN语言是典型的静态语言,它具有如下特点:语言是典型的静态语言,它具有如下特点:不允许过程的递归调用;不允许过程的递归调用;无动态数组和动态类型;无动态数组和动态类型;程序无嵌套层次结构;程序无嵌套层次结构;以早期的以早期的FORTRANFO
24、RTRAN为例进行静态分配。为例进行静态分配。ipip代码存储器代码存储器代码存储器代码存储器数据存储器数据存储器数据存储器数据存储器单元单元n n代码段代码段单元单元2 2代码段代码段单元单元1 1代码段代码段全局数据活动记录全局数据活动记录单元单元n n活动记录活动记录单元单元2 2活动记录活动记录单元单元1 1活动记录活动记录第二节第二节 静态分配静态分配程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的
25、金额为消费者购买商品的价款或接受服务的费用电子科技大学计算机科学与工程学院2022年12月28日 INTEGER I,JINTEGER I,J COMMON ICOMMON I CALL XCALL X GOTO 10GOTO 1010 CONTINUE10 CONTINUE END ENDSUBROUTINE X SUBROUTINE X INTEGER K,JINTEGER K,JCOMMON ICOMMON IK=5K=5I=6I=6J=I+KJ=I+KRETURNRETURNENDEND以下面的FORTRAN程序说明静态分配主程序主程序子程序子程序调用子过程调用子过程X X空语句空语句
26、返回语句返回语句程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用电子科技大学计算机科学与工程学院2022年12月28日 经过词法及语法分析生成如下描述符经过词法及语法分析生成如下描述符(表格表格)(MAIN,0)INTJ(COMMON,0)INTI地址类型名字主程序主程序MAINMAIN的符号表的符号表C(MAIN,3)10地址标号标号表标号表(X,0)X(MAIN,
27、0)MAIN地址名字单元名表单元名表(X,2)INTJ(COMMON,0)INTI(X,1)INTK地址类型名字子程序子程序X X的符号表的符号表(COMMON,0)INTI地址类型名字公用区公用区COMMONCOMMON的符号表的符号表(i,j)表示程序单元i的活动记录中偏移为j的位置;公用区和主程序从0开始分配,子程序从1开始分配MAIN的第三条指令程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消
28、费者购买商品的价款或接受服务的费用电子科技大学计算机科学与工程学院活动记录活动记录程序的目标模块程序的目标模块J JI IJ JK K返回地址返回地址MAINMAINMAINMAIN的活动记录的活动记录的活动记录的活动记录X X X X的活动记录的活动记录的活动记录的活动记录COMMONCOMMONCOMMONCOMMON的活动记录的活动记录的活动记录的活动记录0 00 00 01 12 24 43 32 21 10 0halthaltnoopnoopip:=&C(MAIN,3)ip:=&C(MAIN,3)ip:=&C(x,0)ip:=&C(x,0)D(X,0):=ip+2D(X,0):=ip
29、+2MAINMAINMAINMAIN的代码段的代码段的代码段的代码段4 43 32 21 10 0halthaltip:=D(X,0)ip:=D(X,0)D(X,2):=D(COMMON,0)+D(X,1)D(X,2):=D(COMMON,0)+D(X,1)D(COMMON,0):=6D(COMMON,0):=6D(X,1):=5D(X,1):=5X X X X的代码段的代码段的代码段的代码段填返回地址CALL XGOTO 10CONTINUEK=5I=6J=I+KRETURN程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者
30、购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用电子科技大学计算机科学与工程学院连接后的程序代码和活记录连接后的程序代码和活记录9 98 87 76 65 54 43 32 21 10 0halthaltip:=D2ip:=D2D4:=D0+D3D4:=D0+D3 D0:=6D0:=6D3:=5D3:=5halthaltnoopnoopip:=3ip:=3ip:=5ip:=5D2:=ip+2D2:=ip+24 43 32 21 10 0J JK K返回地址返回地址J JI I连接后的
31、代码段连接后的代码段连接后的代码段连接后的代码段连接后的活动记录连接后的活动记录连接后的活动记录连接后的活动记录主程序MAIN的代码子程序X的代码COMMON区的活动记录主程序MAIN的活动记录子程序X的活动记录程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用第三节第三节 栈式分配栈式分配语言特点:语言特点:允许递归允许动态数组允许过程嵌套定义程序设计语言与编译经营者
32、提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用一、只含半静态变量的栈式分配一、只含半静态变量的栈式分配仅允许递归调用仅允许递归调用变量及活动记录长度可静态确定变量及活动记录长度可静态确定一一个个单单元元可可多多次次激激活活而而有有多多个个实实例例,每每个个活活动动记记录录是是在在单单元元每每次次激激活活时时动动态态建建立立并并与与代代码码段段建建立立绑绑定定关系的关系的1.1.特点特点程序
33、设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用2.2.处理方法处理方法(1 1)current:current:表示当前活动记录的开始位置表示当前活动记录的开始位置(2 2)free:free:表示数据存储器下一个可用单元表示数据存储器下一个可用单元(3 3)变量绑定于它在活动记录中的常数位移)变量绑定于它在活动记录中的常数位移I I 变量通过变量通过currentcu
34、rrent变址访问变址访问(4 4)A A调用调用B B时:在时:在A A活动记录的栈顶之上建立起绑定活动记录的栈顶之上建立起绑定 于于B B的当前实例的活动记录的当前实例的活动记录(5 5)从)从B B返回时,释放其活动记录返回时,释放其活动记录程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用3.3.动态连接和动态链动态连接和动态链动态连接动态连接:A调用B时,B的
35、活动记录中保存的A的活动记录地址动态链动态链:由动态连接组成的一个调用链程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用F FG GF FE EA AA call E;E call F;F call G;G call F;A call E;E call F;F call G;G call F;.程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求
36、增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用4.CALL P 4.CALL P 的处理的处理返回地址动态连接返回地址动态连接A的活动记录即将建立的P的活动记录currentfreeACALL p程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费
37、者购买商品的价款或接受服务的费用(1)(1)保存返回地址保存返回地址D free :=D free :=?(2)(2)保存主调过程的保存主调过程的currentcurrentDfree+1:=currentDfree+1:=current(3)(3)建立建立P P的的currentcurrentcurrent:=freecurrent:=free(4)(4)调整调整freefreefree:=free+Lfree:=free+L(5)(5)转子转子ip:=Pip:=P的代码段首地址的代码段首地址CALL P CALL P 程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要
38、求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用返回地址动态链返回地址动态链A的活动记录P的活动记录currentfree进入过程进入过程P P以后以后程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用5.RETU
39、RN5.RETURN语句的处理语句的处理(1)恢复free free:=current(2)恢复主调过程的current current:=Dcurrent+1(3)返回 ip:=D free程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用二、半动态变量的栈式分配二、半动态变量的栈式分配1.1.活动记录内容活动记录内容临时变量量返回指返回指针动态链接接静静态链接接现场
40、保保护参数个数参数个数形式形式单元元局部局部变量量数数组存存储区区允许动态数组允许动态数组程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用2.2.动态数组空间的分配动态数组空间的分配(1)编译时编译时,分配内情向量表区,并产生在运行时动态建立内情向量和分配数组空间的指令。(2)一个单元激活后激活后(进入该单元),遇到动态数组说明时,调用上述指令(填内情向量,分配数组空
41、间),并调整free:=free+L程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用非局部环境的引用必须考虑变量的作用域1.静态作用域规则最近嵌套规则 最外层单元为0层,若P是Q的直接外层,则Q的层次=P的层次 1(1)嵌套的层次三、允许过程嵌套定义的栈式分配三、允许过程嵌套定义的栈式分配非局部环境引用规则非局部环境引用规则程序设计语言与编译经营者提供商品或者服务有欺
42、诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用unit A;y:int;unit B;end B;y:int;unit C;end D;end C;.unit D;.end E;z:int;unit F;end G;unit G;x,y:int;.unit E;z:=x+y;end F;.end A;x:int;A AB BC CD DE EF FG G程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应
43、当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用(2)最近嵌套规则(I)变量x在单元U1中被说明,则x的作用 域局部于U1,或称x在U1中是可见的(II)变量x在U1中没有被说明,则x的作用域 是包围U1的说明了x的最小外层单元 程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费
44、者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用2.动态作用域规则最近活动规则对非局部变量的引用:最近外层中说明的动态作用域的最近外层:指的是动态调用外层如A-E-F-G-F的调用序列:当前F的调用外层为G程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用对非局部环境的引用对非局部环境的引用1.静态作用域规则对非局部变量,引用的应是最近
45、的“嵌套外层”中说明的变量静态连接:静态连接:指向嵌套直接外层的最新活动记录的指针,它处于活动记录位移为2的存储单元中静态链:静态链:各嵌套程序单元的活动记录中,静态连接的序列构成一个静态链(1 1)静态连接和静态莲)静态连接和静态莲程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用返回地址动态链currentfree静态链CALL P CALL P 程序设计语言与编译
46、经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用内容回顾1.1.静态分配静态分配2.2.栈式分配栈式分配3.3.堆分配堆分配变量与存储区域的绑定关系在编译时便可建立,并完成存储分配当一个程序单元被激活时,在栈顶分配其活动记录;当程序单元退出时,在栈顶将其活动记录撤销动态变量的首地址、长度、类型等在编译时无法确定,在执行过程中也可能改变程序设计语言与编译经营者提供商品或者服务有欺诈行为的
47、,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用内容回顾1.1.静态分配静态分配2.2.栈式分配栈式分配3.3.堆分配堆分配分配方式分配方式递归调用动态数组过程嵌套定义只含半静态变量的栈式分配只含半静态变量的栈式分配返回地址currentfree 动态链接。CALL P CALL P D free :=IP+5D free :=IP+5Dfree+1:=currentDfree+1:=currentcurrent:=f
48、reecurrent:=freefree:=free+Lfree:=free+Lip:=Pip:=P的代码段首地址的代码段首地址free:=currentcurrent:=Dcurrent+1ip:=D freereturnreturn程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用内容回顾允许过程嵌套定义的栈式分配允许过程嵌套定义的栈式分配静态作用域规则动态作用域规
49、则返回地址动态链接currentfree静态链接程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用D free :=ip+5D free :=ip+5Dfree+1:=currentDfree+1:=currentfree:=free+Lfree:=free+Lip:=Pip:=P的代码段首地址的代码段首地址CALL P CALL P current:=freecurr
50、ent:=free保存静态链接:保存静态链接:Dfree+2:=Dfree+2:=?程序设计语言与编译经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用(2)(2)非局部变量非局部变量x x的地址的求法的地址的求法假设单元p中引用了单元t中的变量x,且p,t的深度分别为np,nt,记:d=nd=np p n nt t Dt为t的最新活动记录的首地址程序设计语言与编译经营者提供商品或者服务