编译原理第七章复习.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理第七章复习

第7章 1.过程的活动 过程的一次执行称为过程的一次活动 2.活动记录 过程的活动需要可执行代码和存放所需信息的存储空间,后者称为活动记录 3.影响存储分配策略的语言特征 过程能否递归 当控制从过程的活动返回时,局部变量的值是否要保留 过程能否访问非局部变量 过程调用的参数传递方式 过程能否作为参数被传递 过程能否作为结果值传递 存储块能否在程序控制下动态地分配 存储块是否必须显式地释放 4.名字的作用域 一个声明起作用的程序部分称为该声明的作用域。 即使一个名字在程序中只声明一次,该名字在程序运行时也可能表示不同的数据对象。 5.从名字到值的两步映射。 环境把名字映射到左值,而状态把左值映射到右值。 赋值改变状态,但不改变环境。 如果环境将名字x映射到存储单元s,我们就说x被绑定到s。 6.静态概念和动态概念的对应 静 态 概 念 动 态 对 应 过程的定义 过程的活动 名字的声明 名字的绑定 声明的作用域 绑定的生存期 7.活动记录的主要内容 包括返回值、返回地址、形参单元、控制链(动态链)、访问链(静态链)、机器状态区、局部数据区、临时数据区等等。 8.局部数据的安排 字节是可编址内存的最小单位。 变量所需的存储空间可以根据其类型而静态确定。 一个过程所声明的局部变量,按这些变量声明时出现的次序,在局部数据域中依次分配空间。 局部数据的地址可以用相对于某个位置的地址来表示。 数据对象的存储安排还有一个对齐问题。 9.程序块(分程序) 本身含有局部变量声明的语句 可以嵌套 最近的嵌套作用域规则 并列程序块不会同时活跃 并列程序块的变量可以重叠分配 10.三种存储分配策略 静态分配策略 栈式分配策略 堆式分配策略 11.存储静态分配 名字在程序被编译时绑定到存储单元,不需要运行时的任何支持。 绑定的生存期是程序的整个运行时间。 控制再次进入该过程时,局部变量的值和控制上一次离开时的一样。 每个活动记录的大小是固定的。 过程调用时保存信息的地址在编译时也是已知的。 12.静态分配给语言带来限制 递归过程不被允许 数据对象的长度和它在内存中位置的限制,必须是在编译时可以知道的 数据结构不能动态建立 13.存储栈式分配 14.活动树 用树来描绘控制进入和离开活动的方式 15.活动树的特点 每个结点代表某过程的一个活动 根结点代表主程序的活动 结点a是结点b的父结点,当且仅当控制流从a的活动进入b的活动 结点a处于结点b的左边,当且仅当a的生存期先于b的生存期 当前活跃着的过程活动可以保存在一个栈中 16.过程的调用和返回 过程调用和过程返回都需要执行一些代码来管理活动记录栈,保存或恢复机器状态等 过程调用序列 过程调用时执行的分配活动记录,把信息填入它的域中的代码 过程返回序列 过程返回时执行的恢复机器状态,释放活动记录,使调用过程能够继续执行的代码 调用序列和返回序列常常都分成两部分,分处于调用过程和被调用过程中 17.调用者和被调用者之间的任务划分 18.过程p调用过程q的调用序列 p在栈上留出放返回值的空间,并计算实参,依次放入栈顶,同时改变top_sp的值 p把返回地址和当前base_sp的值存入q的活动记录中,建立q的访问链,增加base_sp的值 q保存寄存器的值和其它机器状态信息 q根据局部数据域和临时数据域的大小增加top_sp的值,初始化它的局部数据,并开始执行过程体 19.过程p调用过程q的返回序列 q把返回值置入邻近p的活动记录的地方 q对应调用序列的步骤(4),减小top_sp的值 q恢复寄存器(包括base_sp)和机器状态,返回p p根据参数个数与类型和返回值类型调整top_sp,然后取出返回值 20.堆式分配 栈式分配策略在下列情况下行不通: 过程活动停止后,局部名字的值还必须维持 被调用者的活动比调用者的活动活得更长,此时活动树不能正确描绘程序的控制流 21.非局部名字的访问 22.无过程嵌套的静态作用域 过程体中的非局部引用可以直接使用静态确定的地址 局部变量在栈顶的活动记录中,可以通过base_sp指针来访问 无须深入栈中取数据,无须访问链 过程可以作为参数来传递,也可以作为结果来返回 23.变量的嵌套深度 它的声明所在过程的嵌套深度作为该名字的嵌套深度 24.非局部名字的访问 假定过程p的嵌套深度为np,它引用嵌套深度为na的变量a,na np。如何访问a的存储单元? 从栈顶的活动记录开始,追踪访问链np na次。 到达a的声明所在过程的活动记录。 访问链的追踪用间接操作就可完成。 过程p对变量a访问时,a的地址由下面的二元组表示: (np na,a在活动记录中的位移) 25.建立访问链 假定嵌套深度为np的过程p调用嵌套深度为nx的过程

文档评论(0)

wuailuo + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档