《编译原理蒋宗礼课件第9章.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章?运行时的存储组织 9.1 与存储组织有关的源语言概念与特征 9.2 存储组织 9.3 静态存储分配 9.4 栈式存储分配 9.5 栈中非局部数据的访问 9.6 堆管理 9.7 本章小结 9.1 与存储组织有关的源语言 概念与特征 编译程序必须准确地实现包含在源程序中的各种抽象概念,如名字、作用域、数据类型、操作符、过程、参数和控制流结构等,这些概念反映了源语言所具有的一些特征,对它们的支持往往会影响运行时的存储组织和分配策略 给定一个源程序,编译程序必须根据源语言的特征(规定)为源程序中的许多问题做出决策,包括何时、怎样为名字分配内存地址。 静态策略:在编译时即可做出决定的策略 动态策略:直到程序执行时才能做出决定的策略 9.1.1 名字及其绑定 “名字”、“变量”和“标识符” 的区别与联系 名字和变量分别表示编译时的名字和运行时该名字所代表的内存位置。 标识符则是一个字符串,用于指示数据对象、过程、类或对象的入口。 所有标识符都是名字,但并不是所有的名字都是标识符,名字还可以是表达式。例如,名字x.y可能表示x所代表结构的域y。 同一标识符可以被声明多次,但每个声明都引入一个新的变量。即使每个标识符只被声明一次,局部于某个递归过程的标识符在不同的运行时刻也将指向不同的内存位置。 名字的绑定 从名字到值的两步映射 环境把名字映射到左值,而状态把左值映射到右值 赋值改变状态,但不改变环境。 如果环境将名字x映射到存储单元s,我们就说x被绑定到s 9.1.2 声明的作用域 x的声明的作用域是程序中的这样一段区域,在该区域中,x的引用均指向x的这一声明。对于某种程序设计语言,如果只通过考察其程序就可以确定某个声明的作用域,则称该语言使用静态作用域;否则称该语言使用动态作用域。 C++、Java和C#等还提供了对作用域的显式控制,其方法是使用public、private和protected这样的关键字。 声明的作用域是通过符号表进行管理的,详见8.4节的讨论。 1. 静态作用域 在具有程序块结构的语言中,变量声明的静态作用域规则如下 : 如果名字x的声明D属于程序块B,则D的作用域是B的所有语句,只有满足如下条件的程序块B‘除外:B’嵌套在B中(可以是任意的嵌套深度),且B‘中具有同一名字x的一个新的声明。 令B1, B2, …, Bk是包围x的本次引用的所有程序块,Bk-1是Bk的直接外层程序块,Bk-2是Bk-1的直接外层程序块,如此类推。找到使x的某个声明属于Bi的最大i,则x的本次引用指向Bi中的这个声明。换句话说,x的本次引用处在Bi中的这个声明的作用域中。 2. 显式访问控制 类和结构为其成员引入了一种新的作用域 如果p是某个带有域(成员)x的类的对象,则p.x中x的引用将指向该类定义中的域x。与程序块结构类似的是,类D中成员x的声明的作用域将会扩展到D的任何子类D,除非D中具有同一名字x的一个局部声明。 2. 显式访问控制 通过使用像public、private和protected这样的关键字,C++或Java类的面向对象语言提供了一种对超类中成员名字的显式访问控制。这些关键字通过限制访问来支持封装。因此,私有名的作用域只包含与该类及其友类相关联的方法声明和定义,保护名只对其子类是可访问的,而公用名从类的外部也是可以访问的。 3. 动态作用域 动态作用域规则相对于时间而静态作用域规则相对于空间 静态作用域规则要求我们找出某个引用所指向的声明,条件是该声明处在包围该引用的“空间上最近的”单元(程序块)中。 动态作用域也是要求我们找出某个引用所指向的声明,但条件是该声明处在包围该引用的“时间上最近的”单元(过程活动)中。 9.1.3 过程及其活动 将“过程、函数和方法”统称为“过程” 过程定义是一个声明,它的最简单形式是把一个标识符和一个语句联系起来。该标识符是过程名,而这个语句是过程体。 当过程名出现在可执行语句中时,称相应的过程在该点被调用。过程调用就是执行被调用过程的过程体。注意,过程调用也可以出现在表达式中。 9.1.3 过程及其活动 出现在过程定义中的某些标识符具有特殊的意义,称为该过程的形式参数,简称为形参。调用过程时,表达式作为实在参数(或实参)传递给被调用的过程,以替换出现在过程体中的对应形式参数。9.1.4节将讨论实参和形参的结合方法。 过程体的每次执行叫做该过程的一个活动。过程p的一个活动的生存期是从过程体执行的第一步到最后一步,包括执行被p调用的过程的时间,以及再由这样的过程调用其它过程所花的时间,等等。 9.1.3 过程及其活动 如果a和b是过程的活动,那么它们的生存期或者不交迭,或者嵌套。也就是说,如果在a结束之前b就开始了,那么b必须在a结束之前

文档评论(0)

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

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

1亿VIP精品文档

相关文档