com0405-07西安电子科技大学编译原理课件.ppt

com0405-07西安电子科技大学编译原理课件.ppt

ID:56527434

大小:424.00 KB

页数:43页

时间:2020-06-27

com0405-07西安电子科技大学编译原理课件.ppt_第1页
com0405-07西安电子科技大学编译原理课件.ppt_第2页
com0405-07西安电子科技大学编译原理课件.ppt_第3页
com0405-07西安电子科技大学编译原理课件.ppt_第4页
com0405-07西安电子科技大学编译原理课件.ppt_第5页
资源描述:

《com0405-07西安电子科技大学编译原理课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、上次课程内容回顾语法制导翻译生成符号表用栈保留各符号表节点信息,栈顶节点是正处理的过程进入一个过程声明D之前为D构造符号表,分析D时填写符号表,退出D后将此过程名填写进外层过程的符号表中简单算术表达式与赋值句的语法制导翻译简单是指变量是简单变量算术表达式内部类型转换:规定转换规则,按规则转换数组元素的引用多维数组到一维存储空间的转换:以行为主,以列为主数组元素地址的两个要素:首地址和偏移量地址计算公式(三个假设条件下):addr(A[i1,i2,...,in)]=a-c+vv1=i1vj=vj-1*dj+ij(j=2,3,...,n)(4.4)c1=

2、1cj=cj-1*dj+1(j=2,3,...,n)(4.3)v=vn*wc=cn*w14.6.2数组元素引用的语法制导翻译数组元素的寻址:CONSPART[VARPART],或者T1[T]取值的三地址码:X:=T1[T]赋值的三地址码:T1[T]:=X<1>引入数组元素后的赋值句文法A→V:=EV→id

3、id[EL](G4.4)EL→E

4、EL,EE→E+E

5、(E)

6、V修改文法以适应递推公式的同步计算:A→V:=E(1)V→id(2)

7、EL](3)EL→id[E(4)

8、EL,E(5)E→E+E(6)

9、(E)(7)

10、V(8)--得到数组名和第一维下标和

11、v1--递归计算第i维的vi--完成数组元素的分析和对v的计算2<2>属性和函数属性.array:数组名在符号表中的入口和数组首地址a。属性.dim:数组维数计数器,记录当前分析到的维数。属性.place:下标列表EL:存放vj=vj-1*dj+ij(j=2,3,...,n)的临时变量,简单变量id:仍然表示简单变量的地址,数组元素id[EL]:存放不变部分,一般可以是一个临时变量。属性.offset:保存数组元素的可变部分,简单变量的offset为空,可记为null。函数limit(array,k):计算并返回数组array中第k维成员个数dk。3

12、<3>语义规则(4)EL→id[E{EL.place:=E.place;EL.dim:=1;EL.array:=entry(id.name);}(5)EL→EL1,E{T:=newtemp;k:=EL1.dim+1;dk:=limit(EL1.array,k);emit(T':='EL1.place'*'dk);--Vk-1*dkemit(T':='T'+'E.place);--T:=Vk-1*dk+ikEL.array:=EL1.array;EL.place:=T;EL.dim:=k;}(3)V→EL]{V.place:=newtemp;emit(

13、V.place':='EL.array'-'c);V.offset:=newtemp;emit(V.offset':='EL.place'*'w);}(2)V→id{V.place:=entry(id.name);V.offset:=null;}(1)A→V:=E{ifV.offset=nullthenemit(V.place':='E.place);elseemit(V.place'['V.offset']'':='E.place);endif;}4<3>语义规则(续1)(6)E→E1+E2{T:=newtemp;emit(T':='E1.plac

14、e'+'E2.place);E.place:=T;}(7)E→(E1){E.place:=E1.place;}(8)E→V{ifV.offset=null;thenE.place:=V.place;elseT:=newtemp;emit(T':='V.place'['V.offset']');E.place:=T;endif;}5<4>分析举例例4.18:对于数组:arr:array[10,20]ofint赋值句arr[i+x,j+y]:=m+n的语法制导翻译(令w=4)。解:c=(c1*d2+1)*w=(1*20+1)*4=84。分析树:6数组元素

15、引用语法制导翻译的产生式A→V:=E{ifV.offset=nullthenemit(V.place':='E.place);elseemit(V.place'['V.offset']'':='E.place);endif;}(2)V→id{V.place:=entry(id.name);V.offset:=null;}(3)V→EL]{V.place:=newtemp;emit(V.place':='EL.array'-'c);V.offset:=newtemp;emit(V.offset':='EL.place'*'w);}(4)EL→id[E{

16、EL.place:=E.place;EL.dim:=1;EL.array:=entry(id.name);}

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

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

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