编译7语义分析和中间代码产生2(zss)-副本

编译7语义分析和中间代码产生2(zss)-副本

ID:46514427

大小:519.50 KB

页数:33页

时间:2019-11-24

编译7语义分析和中间代码产生2(zss)-副本_第1页
编译7语义分析和中间代码产生2(zss)-副本_第2页
编译7语义分析和中间代码产生2(zss)-副本_第3页
编译7语义分析和中间代码产生2(zss)-副本_第4页
编译7语义分析和中间代码产生2(zss)-副本_第5页
资源描述:

《编译7语义分析和中间代码产生2(zss)-副本》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理(第三版)陈火旺等编著(2012年9月-12月)主讲:朱世松计算机学院三地址语句的种类x:=yopzx:=opyx:=ygotoLifxrelopygotoL或ifagotoLparamx和callp,n,以及返回语句returnyx:=y[i]及x[i]:=y的索引赋值x:=&y,x:=*y和*x:=y的地址和指针赋值7/23/20212生成三地址代码时,临时变量的名字对应抽象语法树的内部结点id:=E对表达式E求值并置于变量T中值id.place:=T7/23/20213从赋值语句生

2、成三地址代码的S-属性文法非终结符号S有综合属性S.code,它代表赋值语句S的三地址代码。非终结符号E有如下两个属性:E.place表示存放E值的名字。E.code表示对E求值的三地址语句序列。函数newtemp的功能是,每次调用它时,将返回一个不同临时变量名字,如T1,T2,…。7/23/20214为赋值语句生成三地址代码的S-属性文法定义产生式语义规则S→id:=ES.code:=E.code

3、

4、gen(id.place‘:=’E.place)E→E1+E2E.place:=newtemp

5、;E.code:=E1.code

6、

7、E2.code

8、

9、gen(E.place‘:=’E1.place‘+’E2.place)E→E1*E2E.place:=newtemp;E.code:=E1.code

10、

11、E2.code

12、

13、gen(E.place‘:=’E1.place‘*’E2.place)E→-E1E.place:=newtemp;E.code:=E1.code

14、

15、gen(E.place‘:=’‘uminus’E1.place)E→(E1)E.place:=E1.place;E.code:=

16、E1.codeE→idE.place:=id.place;E.code=‘’7/23/20215三地址语句四元式一个带有四个域的记录结构,这四个域分别称为op,arg1,arg2及resultoparg1arg2result(0)uminuscT1(1)*bT1T2(2)uminuscT3(3)*bT3T4(4)+T2T4T5(5):=T5a7/23/20216三地址语句三元式通过计算临时变量值的语句的位置来引用这个临时变量三个域:op、arg1和arg2oparg1arg2(0)uminusc

17、(1)*b(0)(2)uminusc(3)*b(2)(4)+(1)(3)(5)assigna(4)7/23/20217三地址语句x[i]:=yoparg1arg2(0)[]=xi(1)yx:=y[i]oparg1arg2(0)=[]yi(1)assignx(0)7/23/20218三地址语句间接三元式为了便于优化,用三元式表+间接码表表示中间代码间接码表:一张指示器表,按运算的先后次序列出有关三元式在三元式表中的位置。优点:方便优化,节省空间7/23/20219例如,语句X:=(A+B)*C;Y

18、:=D↑(A+B)的间接三元式表示如下表所示。7/23/202110例:a=A+(-B)*C的三元式:(1)(@,B,-)(2)(*,(1),C)(3)(+,A,(2))7/23/2021117.2说明语句略7/23/2021127.3赋值语句的翻译7.3.1简单算术表达式及赋值语句7/23/202113为赋值语句生成三地址代码的S-属性文法定义产生式语义规则S→id:=ES.code:=E.code

19、

20、gen(id.place‘:=’E.place)E→E1+E2E.place:=newtem

21、p;E.code:=E1.code

22、

23、E2.code

24、

25、gen(E.place‘:=’E1.place‘+’E2.place)E→E1*E2E.place:=newtemp;E.code:=E1.code

26、

27、E2.code

28、

29、gen(E.place‘:=’E1.place‘*’E2.place)E→-E1E.place:=newtemp;E.code:=E1.code

30、

31、gen(E.place‘:=’‘uminus’E1.place)E→(E1)E.place:=E1.place;E.code:

32、=E1.codeE→idE.place:=id.place;E.code=‘’7/23/202114产生赋值语句三地址代码的翻译模式S→id:=E{p:=lookup(id.name);ifpnilthenemit(p‘:=’E.place)elseerror}E→E1+E2{E.place:=newtemp;emit(E.place‘:=’E1.place‘+’E2.place)}E→E1*E2{E.place:=newtemp;emit(E.place‘:=’E1.place‘*’E2.p

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

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

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