- 1、本文档共64页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
§8.3 静态存储分配——FORTRAN语言 §8.3.2 公共语句、等价语句介绍 §8.3.3 公共语句的处理 §8.3.4 等价语句的处理 §8.3.5 地址分配 §8.3.6 临时变量的地址分配 1). 主要工作: 找出存在等价关系的等价元,将它们构成等价环; 指出各等价元的首地址关系,以便进行内存分配。 EQUIVALENCE (X,Y), (I,J,K(2)) X Y P I J P K 等价元的首地址关系 X首地址=Y首地址, I首地址=J首地址=K的首地址+1 2).实现方式:在符号表中增设两栏:EQ和OFFSET。 EQ:等价环形链,指向下一个等价元的入口; 若为null,则说明该名字不是等价元; (若等价环中只有一个等价元,则指向自身) OFFSET:相对位移量,用来指出各等价元存储 首地址之间的地址相对关系。 INTEGER I,J,K(3) REAL X,Y EQUIVALENCE (X,Y),(I,J,K(2)) 4 0 Y 5 5 0 X 4 2 -1 K 3 1 0 J 2 3 0 I 1 EQ OFFSET … NAME X Y P I J P K 引入: P:现行等价环的链首指针; Base:计算现行等价环的offset的基准; L:一个元素占用的单元数; J:足标, 简单变量 = 0, 数组元素 =“与首地址之间相差的元素数”; 等价语句处理算法 等价语句处理算法 1).初始化: 符号表中,EQ=null 2).准备处理下一个等价片, P=null,Base=0 3).取等价片中的元素X,设X在符号表的入口为N, z:=Base-J*L; 4).若X不在等价链中(EQ[N]=null),将X加入当前等价环 IF P=null then P:=N else EQ[N]:=EQ[P]; EQ[P]:=N; Offset[N]:=z; X 空链:P X 非空链: P × P:现行等价环的链首指针 L:一个元素占用的单元数 Base: 计算现行环offset 的基准 J:足标, “与首地址之间相差 的元素数” 5).若X已在某等价链中(EQ[N]≠null),则当前链与X 所在链合并 a) 调整当前链中各元素的相对数,及基准(Base) D:=OFFSET[N]-z (OFFSET[N]:X的老值,z:新值) 对链中每一元素,OFFSET[m]:=OFFSET[m]+D; Base:=Base+D ; b) 两链合并,设新链 链头P,链尾Q1, if P=null then P:=N else { EQ[Q1]:=EQ[N];EQ[N]:=P;} 6). 若现行片还有等价元,转3) 7). 若还有其他等价片,转2) X 当前链 P Q1 链尾 × N 形式化的归并算法P251 5 4 3 2 1 EQ offset … Name INTEGER I,J,K(3) COMPLEX X REAL A(3,3) EQUIVALENCE (X,A(2,3)), (I,J,A(1,2),K(2)) X P X P A I J K X A 0 4 -7 4 5 P:现行等价环的链首指针; L:一个元素占用的单元数; Base:计算现行环offset 的基准 J:足标,与首地址之间相差的元素数 等价元不在等价环中: IF P=null then P:=N else EQ[N]:=EQ[P]; EQ[P]:=N; Offset[N]:=z; -7 7 1 5 A 4 0 0 0 2 4 X null 0 z J L N name P base J=(i1-1)+(i2-1)*d1 z:=Base-J*L 4 -7 A 5 5 0 X 4 K 3 J 2 I 1 EQ offset … Name X A I P I P J 0 0 1 2 J 1 0 0 0 1 1 I null 0 z J L N name P base INTEGER I,J,K(3) COMPLEX X REAL A(3,3) EQUIVALENCE (X,A(2,3)), (I,J,A(1,2),K(2)) P:现行等价环的链首指针; L:一个元素占用的单元数; Base:计算现行环offset 的基准 J:足标,与首地址之间相差的元素数 2 0 1 0 1 归并;D
文档评论(0)