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

4.4 表达式及赋值语句的翻译.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.4 表达式及赋值语句的翻译 4.4.1 简单算术表达式和赋值语句的翻译 4.4.2 布尔表达式的翻译 4.4.1 简单算术表达式和赋值语句的翻译 简单变量:指普通变量和常数,但不含数组元素及结构引用等复合型数据结构; 简单算术表达式:一种仅含简单变量的算术表达式。 简单算术表达式的计值顺序与四元式出现的顺序相同,因此容易将其翻译成四元式形式,这些翻译方法稍加修改也可用于产生三元式或间接三元式。 考虑以下文法G[A]: A→i=E E→E+E∣E*E∣?E∣(E)∣i 在此,非终结符A代表“赋值语句”。 文法G[A]虽然是一个二义文法,但通过确定运算符的结合性及规定运算符的优先级就可避免二义性的发生。 为了实现由表达式到四元式的翻译,需要给文法加上语义子程序,以便在进行归约的同时执行对应的语义子程序。 语义子程序所涉及的语义变量、语义过程及函数说明: (1) 语义变量E.place:即用E.place表示存放E值的变量名在符号表中的入口地址或临时变量名的整数码。 (2) 语义函数newtemp( ):即每次调用newtemp(?)时都将回送一个代表新临时变量的整数码;临时变量名按产生的顺序可设为T1、T2、……。 (3) 语义过程emit(op,arg1,arg2,result):emit的功能是产生一个四元式并填入四元式表中。 (4) 语义函数lookup(i.name):其功能是审查i.name是否出现在符号表中,是则返回i.name在符号表的入口指针,否则返回NULL。 文法G[A]中的每一个产生式的语义子程序: (1) ?A→i=E {p = lookup(i.name); if(p==NULL) error(?); else emit(=, E.place, _, P); } (2) ?E→E(1)+E(2) {E.place=newtemp(?); emit(+, E(1) .place, E(2).place, E.place);} (3) ?E→E(1)*E(2) {E.place=newtemp(?); emit(*, E(1) .place, E(2).place, E.place);} (4) ?E→?E(1) {E.place=newtemp(?); emit(uminus, E(1).place, _, E.place);} (5) ?E→(E(1)) ?{ E.place= E(1) .place ; } (6)?E→i { p=lookup(i.name); if (p!=NULL) E.place = p; /*另一种表示为E.place= entry(i)*/ else error(?);} P101 例4.1试分析赋值语句X= ?B*(C+D)的语法制导翻译过程。 4.4.2 布尔表达式的翻译 程序设计语言中的布尔表达式有两个作用,一是计算逻辑值,更多的情况是二,用作改变控制语句中的条件表达式,如在if-then,if-then-else或while-do语句中。 表达式:由运算符与运算对象组成。 布尔表达式: 布尔运算符: ┐、∧、∨,或为not、and和or (注:C语言中为!、 和 ||)。 运算对象:布尔变量、常量或关系表达式。 布尔运算符的运算顺序一般为┐、∧、∨,且∧和∨服从左结合,布尔算符的运算优先级低于任何关系运算符。 关系表达式: 关系运算符: 、=、==、!=、=、等 运算对象:算术表达式 关系运算符的优先级相同但不得结合,其运算优先级高于布尔运算符,低于任何算术运算符。 算术表达式: 算术运算符: +、-、*、/、^等 运算对象:操作数 算术运算符的运算顺序一般为^、 *、/、 +、-,且满足左结合,其运算优先级高于布尔运算符,且高于任何关系运算符。 为简单起见,我们遵循以上运算约定讨论下述文法G[E]生成的布尔表达式: G[E]:E→E∧E∣E∨E∣┐E∣(E)∣i∣i rop i 注意:rop代表六个关系运算符,即、=、==、!=、=、等。 计算布尔表达式通常有两种方法: 1. 仿照计算算术表达式的文法,按布尔表达式的运算顺序一步步地计算出真假值,如1 ∨ (┐0∧0) ∨0。 2. 根据布尔运算的特点实施某种优化

文档评论(0)

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

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

1亿VIP精品文档

相关文档