网站大量收购闲置独家精品文档,联系QQ:2885784924

09第9章语义分析和代码生成.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 语义分析和代码生成 第9章 语义分析和代码生成 9.2 中间代码 9.2.1波兰后缀表示 9.2.1波兰后缀表示 9.2.2 N-元表示 9.2.2 N-元表示 9.2.2 N-元表示 9.2.2 N-元表示 9.2.2 N-元表示 9.2.3 栈式抽象机及其汇编指令 9.2.3 栈式抽象机及其汇编指令 9.2 栈式抽象机及其汇编指令 9.3 声明的处理 9.3 声明的处理 9.3.1 符号常量 9.3.1 符号常量 9.3.2 简单变量 9.3.2 简单变量 9.3.2 简单变量 9.3.2 简单变量 9.3.2 简单变量 9.3.3 数组 9.3.3 数组 9.3.3 数组 9.3.3 数组 9.3.3 数组 9.3.4 过程声明 9.4 表达式语句 9.4 表达式语句 9.4 表达式语句 9.5 if 语句 9.5 if 语句 9.6 while语句 9.7 for循环语句 9.7 for循环语句 9.8 write_语句 9.9 read_语句 9.10 过程调用和返回 9.10.1 参数的基本传递形式 9.10.1 参数的基本传递形式 9.10.2 过程调用 9.10.2 过程调用 9.10.3 过程定义的处理 9.10.3 过程定义的处理 9.10.4 返回语句和过程终止 9.11 语义分析及代码生成实现 9.12 错误处理 习题 多数语言的IF语句文法为: IF语句::=if 表达式 THEN 语句 [ else 语句 ] 而TEST的IF语句文法为: if_stat::= if (expression ) statement [else statement ] IF语句的处理思路是处理表达式所生成的目标代码是计算该表达式的值(真或假),并将结果置于操作数栈栈顶。如果表达式的值是假,则抽象机指令“BRF labA”将控制转到labA;否则控制传给所生成的抽象机指令序列中的下一条指令。BR指令是抽象机的无条件转移指令。 TEST的IF语句属性翻译文法为: if_stat::=if (expression )@BRF↑label1 statement @BR↑label2 @SETlabel↓label1 [ else statement ] @SETlabel↓label2 @BRF↑label1 :输出 BRF label1 @BR↑label2:输出 BR label2 @SETlabel↓label1:设置标号label1 @SETlabel↓label2:设置标号label2 IF语句的处理程序 例如,有TEST程序语句: If (a5) a=1; else a=2; 按照IF语句翻译文法,设LABELP=0,则应产生下列目标代码: LOAD 0 //表达式a5的代码 LOADI 5 GT BRF LABEL0 //执行动作符号@BRF↑label1所产生的 LOADI 1 // a=1;的代码 STO 0 BR LABEL1 //执行动作符号@BR↑label2所产生的 LABEL0: //执行动作符@SETlabel↓label1设置标号label1 LOADI 2 STO 0 LABEL1: //执行动作符@SETlabel↓label2设置标号label2 TEST的WHILE文法为: while_stat::= while (expression ) statement 当表达式成立时,执行语句。其属性翻译文法为: while_stat::= while @SETlabel↑label1 (expr ) @BRF↑label2 statement @BR↓label1 @SETlabel↓label2 动作解释如下: @SETlabel↓label1:设置标号label1 @BRF↑label2 :输出 BRF label2 @BR↑label1:输出 BR label1 @SETlabel↓label2:设置标号label2 while语句的处理程序 例如,有TEST语句: While (a3)a=a+2; 假设目前的标号记数的当前值为:labelp=2,则属性翻译文法应产生代码: Label2: //label1 LOAD 0 LOADI 3 LE BRF label3 //label2 LOAD 0 LOADI 2 ADD STO 0 BR label2 Labe

文档评论(0)

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

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

1亿VIP精品文档

相关文档