- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第10讲编译原理西北农林科技大学本科教程主讲教师:赵建邦
语义分析概述属性文法几种常见的中间语言表达式及赋值语句的翻译控制语句的翻译数组元素的翻译过程或函数调用语句的翻译说明语句的翻译递归下降语法制导翻译方法简介第四章语义分析和中间代码生成
4.4表达式及赋值语句的翻译简单算术表达式和赋值语句的翻译布尔表达式的翻译(难点)第四章《语义分析和中间代码生成》01算术表达式语义子程序布尔表达式的真假出口布尔表达式的语义子程序根据翻译图得到布尔表达式的四元式重点掌握02本讲目标
4.4.1简单算术表达式和赋值语句的翻译简单变量:普通变量和常数,不包括数组、结构体成员等复合型数据结构。简单算术表达式:仅含简单变量的算术表达式。简单算术表达式与四元式简单算术表达式的计值顺序与四元式出现的顺序相同,因此很容易将其翻译成四元式形式。4.4表达式及赋值语句的翻译
回顾:表达式及赋值语句的翻译
4.4表达式及赋值语句的翻译考虑以下文法G[A]:?
A→i?=?E
?? E→E+E|E*E|?E|(E)|i显然,文法G[A]是一个二义文法,但通过确定运算符的结合性及规定运算符的优先级就可避免二义性的发生。用该文法作为示例的目的:为了更简要地说明语义子程序的设计过程以及赋值语句的语法制导翻译过程。如,对于赋值语句x=-b*(c+d),已经预先规定运算顺序非终结符A代表“赋值句”非终结符E代表“表达式”
4.4表达式及赋值语句的翻译(1)?A→i=E{p=lookup(i.name);
if(p==NULL)error(?);
elseemit(=,E.place,_,p);}例如,赋值语句x=b刚开始读入到符号栈中,显示为i=i,使用E→i规约,得到:i=E(符号栈)__b(语义栈)(a)对非终结符E定义语义变量E.place,即用E.place表示存放E值的变量名在符号表中的入口地址或临时变量名的整数码所以,E.Place中必须保存b在符号表中的入口地址;x=b翻译为(=,b,_,x)
4.4表达式及赋值语句的翻译1.设计6个产生式的语义子程序i=E{p=lookup(i.name);
if(p==NULL)error(?);
elseemit(=,E.place,_,p);}定义语义函数lookup(i.name),其功能是审查终结符i.name是否出现在符号表中,是则返回i.name在符号表的入口指针,否则返回NULL。定义语义函数emit(op,arg1,arg2,result),emit的功能是产生一个四元式并填入四元式表中。
4.4表达式及赋值语句的翻译(2)?E→E(1)+E(2){E.place=newtemp(?);
emit(+,E(1).place,E(2).place,E.place);}
(d)定义语义函数newtemp(?),即每次调用newtemp(?)时都将回送一个代表新临时变量的整数码;临时变量名按产生的顺序可设为T1、T2……
(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);}
(E(1)){E.place=E(1).place;}i{p=lookup(i.name);
if(p!=NULL)E.place=p;
elseerror(?);}4.4表达式及赋值语句的翻译
例4.2试分析赋值语句X=-B*(C+D)的语法制导翻译过程。
[解答]赋值语句X=-B*(C+D)的语法制导翻译过程如表4.2所示(加工分析过程参考表4.1)。01其实,利用带注释的语法树进行规约的同时,就可以完成相应的语义分析(一起看黑板)。02
表4.2(1)赋值语句X=?B*(C+D)的翻译过程
表4.2(2)赋值语句X=?B*(C+D)的翻译过程
4.4表达式及赋值语句的翻译
4.4表达式及赋值语句的翻译
了
文档评论(0)