第6章语法制导翻译和中间代码生成题材.ppt

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 语法制导翻译和中间代码生成;主要内容;目标程序;语义分析基础;语义分析基础-语义分析的内容(续);语义分析基础;6.1属性文法(Attribute Grammar);6.1 属性文法(续);6.1 属性文法(续);6.1 属性文法(续);6.1 属性文法(续);6.1 属性文法(续);6.2 语法制导翻译概论;例 简单算术表达式求值的属性文法 E→E1+T { E.val :=E1.val +T.val } E→T { E.val :=T.val } T→T1*digit { T.val :=T1.val * digit.lexval } T→digit { T.val :=digit.lexval }?;6.3 中间代码的形式;6.3.1 逆波兰表示法(后缀式);;逆波兰表示法的扩充 逆波兰表示法很容易扩充到表达式以外的范围 例如:;6.3.2 三元式;6.3.3 树形表示;6.3.4 四元式;6.3.4 四元式(续);6.3.4 四元式(续);6.3.5 间接三元式;举例:;举例:;6.4 语法制导翻译;6.4.1简单赋值语句到四元式的翻译;6.4.1简单赋值语句到四元式的翻译;使用上述变量和过程,对文法6.1所定义的赋值语??的翻译算法可由下述语义动作予以描述;输入串;3、类型转换;3、类型转换(续);T:=NEWTEMP; IF E1.MODE=int AND E2.MODE=int THEN BEGIN GEN(opi , E1.PLACE, E2.PLACE,T); E.MODE:=int END ELSE IF E1.MODE=r AND E2.MODE=r THEN BEGIN GEN(opr , E1.PLACE, E2.PLACE,T); E.MODE:=r END ELSE IF E1.MODE=int /*AND E2.MODE=r */ THEN BEGIN U:=NEWTEMP; GEN(itr, E1.PLACE,-,U); GEN(opr , U,E2.PLACE,T); E.MODE:=r END ELSE /* E1.MODE=r AND E2.MODE=int */ BEGIN U:=NEWTEMP; GEN(itr, E2.PLACE,-,U); GEN(opr , E2.PLACE, U, T); E.MODE:=r END E.PLACE:=T;布尔表达式的两个作用: 用于逻辑运算,计算逻辑值 作为控制语句(如if-then,while)的条件表达式 布尔表达式由布尔算符(not,and,or)作用于布尔变量(或常数)或关系表达式而形成的。 关系表达式的形式:E1 rop E2,rop是关系算符(如=, ,=,≠, , =);为简单起见,只考虑如下形式的布尔表达式的翻译,文法(6.2) E→E or E | E and E | not E | (E ) | id rop id |id 布尔算符的优先顺序(从高到低)为:not,and,or,且and和or都服从左结合,not服从右结合 关系算符的优先级都相同,而且高于任何布尔算符,低于任何算术算符;1.布尔表达式的计算方法:;2、直接计算的语法制导翻译;3.作为条件控制的布尔式翻译;把布尔表达式E翻译成下述形式的条件转移和无条件转移的四元式序列: ( jnz , A , - , p ) 若A为真,则转向四元式p ( jrop , A , B , p ) 若A rop B为真,则转向四元式p ( j , - , - , p ) 无条件转向四元式p;(1) ( jnz , A , - , 5 ) A的真出口为5 (2) ( j , - , - , 3 ) A的假出口为3 (3) ( j , B , D , 5 ) BD的真出口为5 (4) ( j , - , - , p+1 ) BD的假出口为(p+1) (5) (关于S1的四元式序列) (p) ( j , - , - , q ) 跳过S2的代码段 (p+1) (关于S2的四元式序列) (q);具体说明如下:;对于E为 E1 or E2的形式,生成代码结构如下:;E1.的代码;例:E 为 ab or cd and ef ,翻译为四元式序列: (1)??? ( j, a, b, E.true) (2)??? ( j, - , - , (3)) (3)??? ( j, c , d , (5)) (4)??? ( j, - , - , E.false) (5)??? ( j, e , f , E.true) (6)???

文档评论(0)

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

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

1亿VIP精品文档

相关文档