Chapt9_语义分析和代码生成.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chapt9_语义分析和代码生成

9.4 表达式语句 TEST语言的表达式语句文法为: expression_stat::= expression ;|; 从文法可看出,所谓表达式语句就是在表达式后面加上了分号。表达式在大多数程序设计语言中是用得最多的语法成分。 分析表达式的主要任务是生成能正确计算表达式值的目标代码。实现这个目标的基本思路是: 1) 首先将表达式的操作数装载到操作数栈栈顶或某个寄存器中; 2) 然后执行表达式所指定的操作。 3) 将结果保留在操作数栈或寄存器中。 TEST语言表达式的属性翻译文法如下 : expression::=ID↑n@LOOK↓n↑d@ASSIGN=bool_expr @STO↓d |bool_expr bool_expr::=additive_expr |additive_expradditive_expr@GT |additive_expradditive_expr@LES |additive_expr=additive_expr@GE |additive_expr=additive_expr@LE |additive_expr==additive_expr@EQ |additive_expr!=additive_expr@NOTEQ additive_expr::=term{(+term@ADD|-项@SUB)} term::=factor{(*factor@MULT | /factor@DIV)} factor ::=( expression )| ID↑n@LOOK↓n↑d@LOAD↓d |NUM↑i@LOADI↓i 表达式 布尔表达式 算术表达式 项 因子 a=a+10; 翻译为: LOAD 0 LOADI 10 ADD STO 0 上述文法中的动作符号解释如下: @LOOK↓n↑d:查符号表n,给出变量地址d; 没有,变量没定义。 @ASSIGN:超前读一个符号,如果是‘=’,则表示进入赋值表达式,如果不是‘=’,则选择布尔表达式,然后还要将超前读的这个符号退回。 @STO↓d:输出指令代码STO d @LOADI↓i:输出指令代码LOADI i @LOAD↓d :输出指令代码LOAD d @GT、@ADD等:分别输出指令代码GT和ADD等。 9.4 表达式语句 多数程序设计语言的表达式都不含有赋值运算符,也没有表达式语句,但有赋值语句。 9.4 表达式语句 一般赋值语句的文法为: 赋值语句::=标识符↑n@LOOK↓n↑d=布尔表达式 STO↓d TEST语言表达式的处理程序 例:赋值语句 a=5; 翻译为: LOADI 5 STO 0 9.5 if 语句 多数语言的if语句文法为: if语句::=if 表达式 then 语句1 [else 语句2 ] if语句的处理思路: 计算该表达式的值(真或假),并将结果置于操作数栈栈顶。 如果表达式的值是假,则抽象机指令“BRF labA”将控制转到labA;否则控制传给所生成的抽象机指令序列中的下一条指令。BR指令是抽象机的无条件转移指令。 false true 跳出if语句 9.5 if 语句 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 例: 有TEST程序语句: if (a5) a=1; else a=2; 设目前的标号记数的当前值为0,即labelp=0 ,由if语句翻译文法,则应产生下列目标代码: LOAD 0

文档评论(0)

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

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

1亿VIP精品文档

相关文档