编译原理(4)语义_2(表达式及赋值语句的翻译).ppt

编译原理(4)语义_2(表达式及赋值语句的翻译).ppt

ID:48751408

大小:1006.50 KB

页数:40页

时间:2020-01-21

编译原理(4)语义_2(表达式及赋值语句的翻译).ppt_第1页
编译原理(4)语义_2(表达式及赋值语句的翻译).ppt_第2页
编译原理(4)语义_2(表达式及赋值语句的翻译).ppt_第3页
编译原理(4)语义_2(表达式及赋值语句的翻译).ppt_第4页
编译原理(4)语义_2(表达式及赋值语句的翻译).ppt_第5页
资源描述:

《编译原理(4)语义_2(表达式及赋值语句的翻译).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第10讲编译原理西北农林科技大学本科教程主讲教师:赵建邦第四章语义分析和中间代码生成4.1语义分析概述4.2属性文法4.3几种常见的中间语言4.4表达式及赋值语句的翻译4.5控制语句的翻译4.6数组元素的翻译4.7过程或函数调用语句的翻译4.8说明语句的翻译4.9递归下降语法制导翻译方法简介第四章《语义分析和中间代码生成》4.4表达式及赋值语句的翻译简单算术表达式和赋值语句的翻译布尔表达式的翻译(难点)重点掌握算术表达式语义子程序布尔表达式的真假出口布尔表达式的语义子程序根据翻译图得到布尔表达式的四元式本讲目标4.4表达式及赋值语句的翻译4.4.1简单算术表达式和赋值语

2、句的翻译简单变量:普通变量和常数,不包括数组、结构体成员等复合型数据结构。简单算术表达式:仅含简单变量的算术表达式。简单算术表达式与四元式简单算术表达式的计值顺序与四元式出现的顺序相同,因此很容易将其翻译成四元式形式。1.3.3语义分析和中间代码生成(续)简单算术表达式的计值顺序与四元式出现的顺序相同:例如,计算圆柱体表面积的C语言程序:s=2*3.1416*r*(h+r);赋值语句的四元式中间代码:(1)(*,2,3.1416,T1)(2)(*,T1,r,T2)(3)(+,h,r,T3)(4)(*,T2,T3,T4)(5)(=,T4,_,s)回顾:表达式及赋值语句的翻

3、译考虑以下文法G[A]:A→i = EE→E+E

4、E*E

5、−E

6、(E)

7、i4.4表达式及赋值语句的翻译显然,文法G[A]是一个二义文法,但通过确定运算符的结合性及规定运算符的优先级就可避免二义性的发生。用该文法作为示例的目的:为了更简要地说明语义子程序的设计过程以及赋值语句的语法制导翻译过程。如,对于赋值语句x=-b*(c+d),已经预先规定运算顺序非终结符A代表“赋值句”非终结符E代表“表达式”4.4表达式及赋值语句的翻译1.设计6个产生式的语义子程序(1)A→i=E{p=lookup(i.name);if(p==NULL)error( );elseemit(=,E.

8、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个产生式的语义子程序(1)A→i=E{p=lookup(i.name);if(p==NULL)error();elseemit(=,E.place,_,p);}(b)定义语义函数lookup(i.

9、name),其功能是审查终结符i.name是否出现在符号表中,是则返回i.name在符号表的入口指针,否则返回NULL。(c)定义语义函数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(

10、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);}4.4表达式及赋值语句的翻译(5)E→(E(1)){E.place=E(1).place;}(6)E→i{p=lookup(i.name);if(p!=NULL)E.place=p;elseerror();}例4.2试分析赋值语句X=-B*(C+D)的语法制导翻译过程。[解答]赋值语句X=-B*(C+D)的语法制导

11、翻译过程如表4.2所示(加工分析过程参考表4.1)。其实,利用带注释的语法树进行规约的同时,就可以完成相应的语义分析(一起看黑板)。表4.2(1)赋值语句X=−B*(C+D)的翻译过程表4.2(2)赋值语句X=−B*(C+D)的翻译过程4.4表达式及赋值语句的翻译4.4.2布尔表达式的翻译1、布尔表达式的组成布尔表达式:由运算符与运算对象组成。定义布尔变量A、B、C、DA=bop1Bbop2Cbop3D(1)运算符:非┐(单目)、与∧(双目)、或∨(双目)注意:1、优先级:┐⋗∧⋗∨2、∧和∨分别服从左结合3、运算符的优先级:算术⋗关系⋗

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。