- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
编译原理与技术*9.5转向语句的翻译为了处理循环嵌套,我们建立一个称为循环描述符的符号表(类似于嵌套过程的符号表),记录必要的信息,包括:指向包含该循环的外层循环描述符,每个循环的名字(标号)、本循环第一条语句的地址等。对于所有正在分析的循序,循环描述符可以使用栈结构存储,如图9.11所示。这样,可以向查找非局部变量一样,找到要转移的目标,然后产生转移代码。当前循环循环语句的基址。。。指向外层的指针循环语句的名字循环test的描述符循环描述符......编译原理与技术*9.5转向语句的翻译开关语句的翻译我们考虑的开关语句的形式如下:switchEof caseC1: S1; caseC2; S2; ... caseCn-1: Sn-1 default: Snend;其中E是一个称为选择因子、判断条件的表达式,类型是整型、字符型、布尔型或者枚举型。开关语句的语义是:计算开关表达式E的值,测试分支,若E的值等于Ci(从1到n-1),则执行相应的语句Si,否则执行缺省语句Sn。编译原理与技术*9.5转向语句的翻译关语句有种种不同的实现方式。最简单、直接的方式就是用一连串的条件转移语句,代码结构如下: t:=E.code;L1: ift?C1gotoL2 S1.code; gotonext;L2: ift?C2gotoL3 S2.code; gotonext; ...Ln-1: ift?Cn-1gotoLn S1.code; gotonext;Ln-1: ift?Cn-1gotoLn Sn-1.code; gotonext;Ln: Sn.code;next:编译原理与技术*9.5转向语句的翻译这个方法适合于分支数小于10个的时候,它的缺点是,很难对分支测试的代码进行优化处理。另外一个策略是建立一张包含n项的开关表:每项的第一个域存放表达式Ci的值,第2个子域存放指向对应语句Si的地址。但是,最后一项的第一个子域要特殊处理,表示其它项的条件都不满足时,都可以执行该项的语句。通过一个循环将表达式的值与表中的第一个域相比,若存在匹配就执行学院的语句,否在自动执行最后一项的语句。一种常见的表的组织是使用杂凑表,会提高代码的运行效率。如果E的值的变化范围不大,比如说是从0到120,而在这个区间内只有少数几个值不被Ci选中。在这种情况下,我们可以建立一个用比特数组,加快运行速度。具体实现方式是,建立一个含128个元素的数组B[0..127],每个元素B[Ci]中存放着语句Si的地址;其它不是Ci的索引J的元素B[J]存放缺省语句Sn的地址。编译原理与技术*9.5转向语句的翻译下面的翻译结果把测试都集中在执行语句的后面,便于语法制导实现也便于产生高质量的代码。例如,可以对同一个开关值t实现多次测试的转移指令序列。 t:=E.code; gototestL1: S1.code; gotonext;L2: S2.code; gotonext; ...Ln-1: Sn-1.code; gotonext;Ln: Sn.code; gotonext;test: ift=C1gotoL1 ift=C2gotoL2 ... ift=Cn-1gotoLn-1 gotoLnnext:编译原理与技术*9.5转向语句的翻译过程调用的翻译过程是程序语言中的最常用的一种形成模块化的结构,过程调用的实质是把程序控制转移到被调用的过程。过程调用的实现,包括存储空间的组织、参数的传递、过程调用序列和返回序列。过程调用的翻译与这些具体的实现密切关联,比如说,不同的参数出的传递机制就要求翻译的代码有不同的寻找实参地址的方式。为了简单起见,我们只讨论最简单、最常用的传地址的参数传递机制。若实参是一个变量或数组,就把地址直接传递给被调用的过程。若参数是其它表达式或常量,如i*b和5,则首先需要计算表达式,把值存入某个临时变量单元t,然后再传递t的地址。所有实参的地址都放在被调用过程可以访问的地方。当通过转子指令进入过程后,调用序列把这些地址存入被调用过程的活动记录中相应的形式单元内。这样,过程中任何对形参的引用都是对形式单元的间接访问。编译原理与技术*9.5转向语句的翻译过程调用的翻译下面我们讨论如何把下面形式的过程调用S?callid(Elist)Elist?Elist,EElist?E翻
您可能关注的文档
- 《自动计算》课件_ch06-从数据管理到Web和信息通信.pptx
- 《NOSQL数据库技术》课件_2020-第6章-键值类数据库技术.pptx
- 中国国家标准 GB/Z 18978.810-2025人-系统交互工效学 第810部分:机器人、智能和自主系统.pdf
- 中国国家标准 GB/T 3933.1-2025升降台铣床检验条件 精度检验 第1部分:卧式铣床.pdf
- 《GB/Z 18978.810-2025人-系统交互工效学 第810部分:机器人、智能和自主系统》.pdf
- 《GB/T 3933.1-2025升降台铣床检验条件 精度检验 第1部分:卧式铣床》.pdf
- 中国国家标准 GB/T 4937.33-2025半导体器件 机械和气候试验方法 第33部分:加速耐湿 无偏置高压蒸煮.pdf
- GB/T 4937.33-2025半导体器件 机械和气候试验方法 第33部分:加速耐湿 无偏置高压蒸煮.pdf
- 《GB/T 4937.33-2025半导体器件 机械和气候试验方法 第33部分:加速耐湿 无偏置高压蒸煮》.pdf
- GB/Z 18978.810-2025人-系统交互工效学 第810部分:机器人、智能和自主系统.pdf
- 《GB/T 46692.2-2025工作场所环境用气体探测器 第2部分:有毒气体探测器的选型、安装、使用和维护》.pdf
- GB/T 19352-2025热喷涂 热喷涂涂层制造商质量要求.pdf
- 《GB/T 7251.5-2025低压成套开关设备和控制设备 第5部分:公用电网电力配电成套设备》.pdf
- GB/T 7251.5-2025低压成套开关设备和控制设备 第5部分:公用电网电力配电成套设备.pdf
- 《GB/T 19352-2025热喷涂 热喷涂涂层制造商质量要求》.pdf
- GB/T 16425-2025可燃性粉尘爆炸风险评估及特性参数测定方法.pdf
- 中国国家标准 GB/T 16425-2025可燃性粉尘爆炸风险评估及特性参数测定方法.pdf
- 《GB/T 16425-2025可燃性粉尘爆炸风险评估及特性参数测定方法》.pdf
- GB/T 46692.2-2025工作场所环境用气体探测器 第2部分:有毒气体探测器的选型、安装、使用和维护.pdf
- GB/T 4937.36-2025半导体器件 机械和气候试验方法 第36部分:稳态加速度.pdf
原创力文档


文档评论(0)