- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课程内容 第一章 概论 第二章 词法分析 第三章上下文无关文法及分析 第四章自上而下的语法分析 第五章自下而上的语法分析 第六章语义分析 第七章运行时环境 第八章代码生成 当源程序的目标代码被运行时,在内存中不仅有目标代码,而且还要保存各种信息,如必须为源程序中所出现的一些量(常量、变量及某些数组等)分配运行时的存储空间。即编译器要从操作系统得到一块存储区,用于被编译过的目标程序的运行。 存储分配是在运行阶段进行的,但编译程序在编译阶段要为其设计好存储组织形式,并将这种组织形式通过生成的目标代码体现出来。(举例说明:函数调用分析.txt) 目标代码运行时,存储空间的组织称为目标代码的运行时环境。 运行时环境有三个类型:完全静态环境(fully static environment)、基于栈的环境(stack-based environment),以及完全动态环境(fully dynamic environment)。这3种类型的混合形式也是可能的。 代码区域:目标代码的存储区域,由于代码区在执行之前是固定的,所以在编译时所有目标代码的地址都是可计算的; 全程/静态区域:静态数据区用来存放那些具有绝对地址的数据和变量(如静态变量和全程变量);编译器可以确定其所占用存储空间的大小; 栈区:在运行时分配存储空间的数据就分配在栈区;编译器知道存在栈中的具体数据大小和存活时间; 堆区:供用户动态申请存储空间,编译器不需要知道究竟得从heap中分配多少空间,也不需要知道从heap上分配的空间究竟需要存在多久。 由于栈区和堆区的长度会随着目标代码的运行而变化,因此把它们分配在数据区的两端。一般情况下,栈向下长,堆向上长,可以使栈和堆共用一空白存储空间。 在PASCAL,C语言中,通常采用以过程为单位的动态存储分配方案: 当一过程(函数)被调用时,就在栈顶为该过程分配所需的数据空间(过程活动记录),当一个过程工作完毕返回时,它在栈顶的数据空间(过程活动记录)也即释放。 过程的活动记录(activation record,AR)是一段连续的存储区,用于存放过程的一次执行所需要的信息,当调用或激活过程或函数时,必须为被调用过程的活动记录分配空间。 活动记录存放的信息至少应包括以下几个部分: 在完全静态环境中,不仅全局变量,所有的变量都是静态分配,即整个程序所需数据空间的总量在编译时是完全确定的,从而每个数据名的地址就可静态地进行分配,适于静态分配的语言,要求满足的条件是: 每个数据名所需的存储空间的大小都是常量 不允许采用动态的数据结构,即在程序运行过程中申请或释放的数据结构 过程不可递归调用 程序所需的数据空间在程序运行前就可确定,称为_______管理技术。 静态存储 动态存储 栈式存储 堆式存储 静态存储分配允许程序出现_______。 递归过程 可变体积的数据项目 静态变量 待定性质的名字 在一个所有过程都是全局的、过程定义不允许嵌套,但允许过程的递归调用的程序设计语言(例如C语言)中,基于栈的动态运行时环境有两个指针: sp:栈顶部(top of stack)指针;对于x86系统来说,它采用sp或esp寄存器存储栈顶部的地址; fp(frame point)指向当前活动记录的控制链的指针,对于x86系统,它采用bp或ebp寄存器存储当前活动记录的控制链的地址,其作用如下: 1.通过该指针可以访问当前执行函数的局部变量; 2.通过该指针可以访问主调程序的活动记录; 3.允许在当前的被调函数执行完毕时,用它来恢复主调函数的活动记录。 目标代码的生成必须支持变量和临时变量的实际定位,并增加支持运行时环境所必需的代码。 对名字的访问 如何处理可变长度的问题 局部临时变量 嵌套声明 在没有局部过程的基于栈的运行时环境中,所有的非局部的名字都是全局的,因此也就是静态的,都具有一个固定的静态地址,可以被直接访问。 对函数参数和局部变量而言,在大多数的语言中,每个局部声明的偏移量仍是可有编译程序静态地计算出来,因为过程的声明在编译时是固定的,而且为每个声明分配的存储器大小也根据其数据类型而固定。 目标代码的生成必须支持变量和临时变量的实际定位,并增加支持运行时环境所必需的代码。 对名字的访问 如何处理可变长度的问题 局部临时变量 嵌套声明 目标代码的生成必须支持变量和临时变量的实际定位,并增加支持运行时环境所必需的代码。 对名字的访问 如何处理可变长度的问题 局部临时变量 嵌套声明 考虑C表达式: x[i]=(i+j)*(i/k+f(j)) 在这个表达式从左到右的求值计算中,在对f的调用过程中需要保存中间结果: x[i]的地址、i+j的和、i/k的商。 这些中间值可计算到寄存器中,根据寄存器进行保存和恢复;或者可将它们作为临时变量存储
您可能关注的文档
- 电路仿真与工具软件应用4.ppt
- 液压系统AMESim.ppt
- 编译原理第2章编译基础.ppt
- 第16讲标准访问控制列表配置.ppt
- 第20章迭代器模式.ppt
- 第4章深入类和对象.ppt
- 第3讲流体输送单元的仿真设计(一).ppt
- 第6章数组字符串和实用类.ppt
- 第7章组建中小型局域网.ppt
- 第6章1类与对象的扩展.ppt
- 2026年中国煤质活性炭市场深度调查与行业前景预测报告.docx
- 2026-2031中国移动PC行业发展现状与投资战略规划可行性报告.docx
- 2026年中国马达行业市场分析与发展前景分析报告(定制版).docx
- 2026-2031中国麻将机未来趋势预测分析及投资规划研究建议.docx
- 2026-2031中国轧机产业市场发展及前景预测研究报告.docx
- 2026-2031中国餐饮市场深度研究与发展趋势研究报告(定制版).docx
- 2026-2031中国高端机械设备行业市场专项调研及投资前景可行性预测报告.docx
- 2026年中国美甲工具套装市场深度调研与行业前景预测报告.docx
- 2025广西河池市金城江区人民检察院选调检察工作人员6人备考题库最新.docx
- 2025黑龙江伊春市汤旺县招聘社区工作者8人备考题库推荐.docx
最近下载
- 工程施工保密方案及措施(3篇).docx VIP
- Powmax国迈技术交流伺服驱动器POWSD-EQ系列用户手册.pdf
- 2025年互联网营销师移动端营销工具链构建专题试卷及解析.docx VIP
- 基于多尺度可视化的神经网络架构搜索中结构决策机制研究.pdf VIP
- 2025年特许金融分析师CFA协会会员责任与义务专题试卷及解析.pdf VIP
- 《长寿村认定规范》.docx VIP
- 2025年互联网营销师O2O短视频与直播带货引流到店专题试卷及解析.pdf VIP
- 2025年盘锦职业技术学院面向社会公开招聘教师3人笔试模拟试题及答案解析.docx VIP
- 常用口语8000句.doc VIP
- 2025年无人机驾驶员执照夜间与低能见度导航技术专题试卷及解析.pdf VIP
原创力文档


文档评论(0)