- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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. 根据布尔运算的特点实施某种优化
您可能关注的文档
- 4.13三极管输入输出特性曲线的测试(new).ppt
- 16秋22班 践行中职生学生公约,做文明中职生主题班会ppt.ppt
- 4.1函数课件ppt.ppt
- 4-插值法.ppt
- 4.1CSS基础.ppt
- 16秋学期《经济法》在线作业.docx
- 16春新生网上学习培训.ppt
- 16第08章:开发中后期油藏描述.ppt
- 4.1.函数优质课.ppt
- 4.2.2指数函数的性质与应用.ppt
- 2013年中考一次函数.doc
- 2013年中考二次函数.doc
- 2013年中考特殊平行四边1.doc
- 2013年中考整式题目练习.doc
- 2014年中考整式乘除与因式分解.doc
- 消防设施检测维保人员测试题及答案.doc
- 2025年团市委领导班子、校副校长对照“四个带头”方面检视剖析材料(含反典型案例剖析)2篇文.docx
- 2025年市邮政管理局党支部书记、市行政审批和政务信息管理局领导班子对照“四个带头”方面生活会对照检视剖析材料(含反典型案例剖析)2篇文.docx
- 市委组织部常务副部长、市总工会领导班子2025年对照“四个带头”方面含违纪行为为典型案例的剖析与反思检视剖析材料{2篇文}.docx
- 局党组书记、市检察院副检察长2025年民主生活会“四个带头”对照检查材料【含典型案例剖析】2篇文.docx
文档评论(0)