编译原理(10.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理(10

读入整数并排序的Pascal程序 Program sort (input,output); var a:array[0..10] of integer; Procedure readarray; Var i:integer; Begin For i:=1 to 9 do read(a[i]) End; Function partition(y,z:integer):integer; var i,j,x,v:integer; Begin …… End; Procedure quicksort(m,n:integer); Var i:integer; Begin If(nm) then begin i:=partition(m,n); Quicksort(m,i-1); Quicksort(i+1,n); end; End; Begin a[0]:=-9999; a[10]:=9999; readarray; quicksort(1,9) End. 关于源程序的一些问题 我们编写的这些源程序实际上是静态的程序文本; 它们的目的是要在计算机上正确的运行; 在运行过程中,这些静态程序文本必须于程序运行时的活动状态联系在一起,才能实现程序的目的; 那么,程序运行时,源程序文本中的标示符对应运行时的不同数据对象; 数据对象的空间分配和释放需要管理策略,这些策略由运行的支撑程序包运行管理。 这就是编译程序要完成的运行环境和存贮管理。 关于源程序的一些问题 源程序可以由不同的过程组成; 在执行过程中,过程的每次执行称为过程的一个活动。 如果这个过程设计为递归调用过程,那么,则会在某一个时刻可能有它的几个活动都活跃着; 过程的每一次调用,都会引起一个活动,这个活动就会调用编译软件的存贮管理的软件包给活动的数据对象分配相应的数据空间; 关于源程序的一些问题 过程 过程定义是一个声明,它的最简单形式是把一个标识符和一个语句联系起来; 标识符是过程名; 语句是过程体; 过程调用表现为过程名出现在执行语句中; 如果过程调用出现在表达式中,则这个过程就是函数,这个调用就是函数调用; 函数是特殊的过程,它是具有一个返回值的过程; 其实一个完整的程序就是一个过程; 过程参数 形式参数:过程定义中表明的标识符; 实在参数:过程调用中表明的标识符; 在过程调用中,实在参数要取代形式参数; 这需要编译程序的运行环境存贮空间管理; 关于源程序的一些问题 活动树 每次过程的调用都会产生一个活动; 过程的调用可能会嵌套或者递归,这时可能会有多个活动同时活跃,活动树产生了! 控制流 程序执行时过程的调用是按照一定的步骤和顺序实施的,这就是所谓的控制流; 控制流是连续的。程序的执行由一些连续的步骤组成的,在任何一步,控制都处于程序中的某点; 过程的每次执行都从过程体的起点开始,最后控制返回到直接跟随本次调用点的位置; 过程间控制流的特点为活动树产生和应用提供了条件; 活动的生存期:是过程执行的第一步和最后一步之间的步序列,包括消耗在执行被这个过程所调用的其他过程所用的时间,以及再由那些被调用过程又调用别的过程所用的时间,以此类推。 不同过程的活动生存期可能重叠,这时就出现了所谓的递归和嵌套等。 关于源程序的一些问题 递归 如果一个过程的前一个活动结束前,它的一个新的活动又开始,则这样的过程是递归的; 递归过程不必直接调用自己,过程p可以调用另一个过程q,然后q通过一系列过程调用之后再调用了p,这也是递归调用; 活动树 描述控制进入和离开活动的方式可以用一棵的方式,这就是活动树; 活动树的每一个结点代表了过程的一个活动; 根结点代表主程序的活动; 结点a是结点b的父结点,当且仅当控制流从a的活动进入b; a结点处于b结点的左边,当且仅当a的生存期先于b的生存期; 结点和活动是一一对应的,所以控制结点就是控制活动。 关于源程序的一些问题 * ( ) * 第十章 目标程序运行时的存贮组织 s r q(1,9) q(5,9) p(1,9) q(1,3) q(2,3) P(1,3) q(1,0) q(3,3) P(2,3) q(2,1) q(7,9) p(5,9) q(5,5) q(9,9) q(7,7) p(7,9) 活动树 * 10.0概述 在代码生成前,编译程序必须进行目标程序运行环境的设计和数据空间的分配。 编译程序需要一定的存贮空间以使目标程序在其上运行,该存贮空间需容纳生成的目标代码和目标代码运行时的数据空间。 数据空间包括:用户定义的各种类型的数据对象(变量和常量)所需的存贮空间;作为保留中间结果和传递参数的临时工作单元;调用过程时所需的连接单元;组织输入/输出所需的缓冲区。 编译过程中,有些数据对象所占用的空间可以确定,有些数据对象具有可变体积和待编译性质,无法在编译

文档评论(0)

quechui388620 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档