- 1、本文档共62页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
课程内容 第一章 概论 第二章 词法分析 第三章上下文无关文法及分析 第四章自上而下的语法分析 第五章自下而上的语法分析 第六章语义分析 第七章运行时环境 第八章代码生成 当源程序的目标代码被运行时,在内存中不仅有目标代码,而且还要保存各种信息,如必须为源程序中所出现的一些量(常量、变量及某些数组等)分配运行时的存储空间。即编译器要从操作系统得到一块存储区,用于被编译过的目标程序的运行。 存储分配是在运行阶段进行的,但编译程序在编译阶段要为其设计好存储组织形式,并将这种组织形式通过生成的目标代码体现出来。(举例说明:函数调用分析.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的商。 这些中间值可计算到寄存器中,根据寄存器进行保存和恢复;或者可将它们作为临时变量存储
您可能关注的文档
- 班组建设总结PPT模板.ppt
- 班组长素质提升系列课程.ppt
- 班组长在企业管理中的作用.ppt
- 版式设计7图版编排的构成.ppt
- 版式设计Format课件.ppt
- 版式设计八大体系.ppt
- 版式设计-版面设计概述.ppt
- 版式设计-膨胀式体系.ppt
- 版式设计-色彩.ppt
- 版式设计-随意式体系.ppt
- 人教版英语5年级下册全册教学课件.pptx
- 部编人教版2年级上册语文全册教学课件含单元及专项复习.pptx
- 人教版8年级上册英语全册教学课件(2021年8月修订).pptx
- 教科版(2017版)6年级上册科学全册课件+课时练.pptx
- 人教版PEP版6年级英语下册全册教学课件(2022年12月修订).pptx
- 部编人教版2年级下册语文全册课件(2021年春修订).pptx
- 人教版数学6年级下册全册教学课件(2023年教材).pptx
- 湘少版5年级下册英语全册教学课件(2021年春修订).pptx
- 人教PEP4年级下册英语全册教学课件 [2}.pptx
- 人教版6年级上册英语全册教学课件.pptx
最近下载
- 《人生由我》梅耶·马斯克 ppt读书笔记模板.pptx
- 2025届高考专题复习:古诗词鉴赏 课件(共136张PPT).pptx VIP
- (二模)2024~2025 学年度苏锡常镇四市高三教学情况调研(二) 地理试卷(含答案).docx
- Recycle Mike's happy days-Mike's day on the farm(课件)人教PEP版英语六年级下册.pptx
- 2025年《普通高中语文课程标准 .pdf VIP
- 2025届高考语文专题复习:古诗词鉴赏二轮复习策略 课件(共61张PPT).pptx VIP
- 七下语文同步解析与测评人教版电子版.pdf VIP
- 供水设备供货及安装施工方案.docx VIP
- 绿色设计产品评价规范 建筑结构用钢板.pdf VIP
- 高中语文(统编版)必修上册全册单元教材解读课件.pptx
文档评论(0)