- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 符号表
在编译程序工作的过程中,需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息.
这些住处一般以表格形式存储于系统中.如常数表、变量名表、数组名表、过程名表、标号表等等,统称为符号表。
对于符号表组织、构造和管理方法的好坏会直接影响编译系统的运行效率。
6.1 符号表的组织
符号表的组织涉及数据结构方面知识(略)
对符号表的访问常见操作有:
(1)判定一给定的名字是否在表中;
(2)在表中填入一个新名字;
(3)访问与给定名字相关的信息;
(4)为给定的名字填入或更新其某些信息;
(5)从表中删除一个或一组名字
须指出,在很多程序设计语言中,对名字的作用域有相应的规定,即同一名字的标识符,在不同的作用域里标识了不同的对象,且占用了不同的存储空间.
因此,在组织符号表时,应能反映各个标识符的作用域.
6.2 分程序结构语言符号表的建立
分程序结构语言 用其所写的程序单元(program unit)中,可以再包含嵌套的程序单元,且其中每个程序单元均可定义属于自己的一组局部变量.如PASCAL中的过程说明,C中花用括{}号括起来的分程序或复合语句等.
程序单元的嵌套导致了变量作用域的嵌套,故把允许名字作用域嵌套的语言称为具有~的语言. PASCAL是典型的~之一.
虽然C不是~的语言,但其函数定义中的函数体可以是一个嵌套的分程序,因而也涉及到各个局部变量的作用域.
对于嵌套的作用域,同名变量在不同处代表了不同的实体,因此,需采用分层建立和处理符号表的方式.
第七章 运行时的存储组织与分配
编译程序必须为源程序中所出现的量(常量,变量及数组等等)分配运行时的存储空间.
分配方案选择的是否得当将关系到资源的合理使用,从而会影响到程序的运行效率.
存储分配的策略有静态分配与动态分配两类.
静态分配适合于无动态申请内存,无可变体积数组,无递归调用的程序.如FORTRAN,BASIC等.
动态存储分配适用面广是目前最常用的分配方案
动态分配又有栈式分配与堆式分配两种.
7.1 存储组织
7.1.1 运行时内存的划分
运行时,系统为目标程序分配的存储空间按用途可划分为下面几个部分:
1.目标程序区 存放目标程序;
2.静态数据区 编译时可确定的占用存 储空间大小的数据;
3.运行栈区 运行时才能分配存储空 间的数据区;
4.堆区 用于用户动态申请存储 空间
动态数据区
存储分配策略
因目标代码的长度在编译时就可确定,可放在静态区内;
对于在编译时已知大小的数据对象(如常量,全局变量,静态变量等等), 也可放在静态区内;
为提高运行效率,应尽可能多地分配静态数据空间. FORTRAN,BASIC的分配一般可全部放在静态区内.
像PASCAL,C这类语言的实现,由于子程序允许递归地调用,因此应用一数据栈来动态地管理内存分配.
另外PASCAL和C还允许动态地申请的内存,这种数据的空间可由堆式分配实现.
7.1.2 活动记录
一个过程的一次执行所需信息的管理,是通过称为活动记录的连续存储块来实现的。
活动记录的内容见右图。
在PASCAL,C语言中,通常采用以过程为单位的动态存储分配方案:
当一过程被调用时,就把其活动记录压入运行时存储栈顶,返回时弹出之。
活动记录的组成
临时变量域 存放目标程序临时变量的值;
局部数据域 存放本次执行中的局部数据、简变、数组内情向量等;
机器状态域 保存在调用该过程前有关机器状态的信息,包括各种寄存器的当前值及返回地址等;
任选的存取链 为访问其它活动记录中所存放的非局部数据提供链地址(PASCAL中用到);
任选的控制链 用于指向主调过程的活动记录;
实在参数 存放主调过程为被调过程提供的实参信息;
返回值域 被调过程用来为主调过程存放返回值的域;
活动记录的组成(续)
每个活动记录都可分为定长部分和可变部分.
定长部分 用于存放在编译时就能确定其体积的量,如简单变量、常界数组等;
可变部分 适用于存放只有在运行时才能确定其体积的量,如可变数组等.
虽然可变数组的体积在动态运行时才能确定,但其地址的访问却在编译时就可确定,即通过活动记录的首地址+偏移量来访问.因为与它的体积有关的信息(如内情向量)是在定长部分存放的.
7.2 运行时的分配策略
7.1节所示的数据区的组织,各自使用了不同的存储分配策略:
静态分配;
栈式分配(亦称栈式动态分配);
堆式分配(亦称堆式动态分配).
7.2.1 静态分配
若在编译阶段就能确定源程序中各个数据实体的存储空间大小,则可以采用较简单的静态存储管理
适合静态管理的语言应具备下述条件:
数组上下界是常数;
过程调用不允许递归;
不允许动态建立数据实体。
满足上述条件的语言有FORTRAN、BASIC等。
由于过程调用无
您可能关注的文档
- 如何利用QC手法提升品质OFFICE.doc
- 长安福特新品开发指南.ppt
- 室内排水管道及配件安装工程检验批质量验收记录表2.doc
- 第1章 信息技术及发展.ppt
- 小学5-6年级记叙文读写训练导引(利川教研室 徐光华).docx
- 消防喷淋及消火栓系统试压方案.doc
- 多边行及其内角和说课 稿.pptx
- 2017年中医助理医师实践部分真题.docx
- 关键字匹配选项(第五课程).ppt
- 地下一层防雷引下线接地安装2008年11月22.doc
- 期末复习课件++专题7+阿基米德原理++2023-2024学年人教版八年级物理下册.pptx
- 4-1电磁振荡(教学课件)高中物理人教版选择性必修第二册.pptx
- 本包含页空白页.pdf
- 【会计实操经验】财务操纵的知识框架.pdf
- 英国b2c电商网站ocado市场前景及投资研究报告-培训课件外文版2024.6,拼多多,阿里巴巴,1688,temu,tiktok.pdf
- 印尼在线约会行业市场前景及投资研究报告-培训课件外文版2024.6,微信,tiktok.pdf
- 印尼物联网IOT行业市场前景及投资研究报告-培训课件外文版2024.5.pdf
- 印尼斋月消费情况分析报告-培训课件外文版2024.6.pdf
- 英国GDP分析报告-培训课件外文版2024.6.pdf
- 印尼铁路行业市场前景及投资研究报告-培训课件外文版2024.6,援建高铁.pdf
最近下载
- 金氏五行升降中医方集.docx
- The Economics of Money- Banking- and Financial Markets- 9e货币银行和金融市场的经济学.doc
- DBJ50T 086-2016 重庆市城市桥梁工程施工质量验收规范.docx
- 通信行业“泽字节”时代投资报告系列一:硅光,“超越摩尔”新路径,厚积薄发大未来.pdf
- T_CNAS11─2020PICC尖端心腔内电图定位技术.pdf VIP
- 如何提高小学语文识字写字教学有效性的实施策略研究.docx VIP
- 隧道式PICC专家共识.pptx VIP
- 商业用中央空调溴化锂直燃机、电制冷机型能耗比较.xls VIP
- 食品工程原理教案.pdf
- 2023五四制人教版六年级全一册道德与法治练习--期末素养综合测试.docx VIP
文档评论(0)