编译原理-西安交通大学8 运行时空间组织2.0.ppt

编译原理-西安交通大学8 运行时空间组织2.0.ppt

第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * * 7.4.4 参数子程序 ALGOL 的换名形式参数对应的实参的处理方法:子程序,俗称 thunk 处理办法: 1,若实参是简单变量或者下标变量,thunk 直接计算该变量的地址; 2,若实参是一个其他表达式, thunk 的任务是计算此表达式的值并把它存放在某个确定的工作单元中,然后回送此单元的地址。 * 例子 过程 P 中的某个分程序 B 内通过语句 Q ( E ) 调用了过程 Q ,此处实参 E 是一个表达式。过程 Q 中的某一个分程序 B1 对 Q 的形式参数 Z 的引用意味着对 E 的 thunk 调用 Proc P B: Q ( E ) Proc Q ( Z ) B1: Z * 注意: 1,B1 对 Q 的形式参数 Z 的引用意味着对 E 的 thunk 的调用,这个 thunk 必须工作在 P 的环境中; 2,如果参数表达式 E 中含有函数调用,会改写栈中 B.TOP 所指位置以上的部分,所以必须预先把 B 的 TOP 值暂时改称指向栈的最高位置(B1.TOP),以保护他们(实际上就是 Q 的数据区)不被破坏 。(具体解释见后面的图示) * 4,JSR Z /* 间接转子,进入 thunk */ 1,2 [X] := 返回地址; 进入 thunk 后的执行 2,3 [X] := B.TOP ( thunk 所在的 B ); 3,B.TOP := X +3 ; /*指向现行栈顶的最高位置 */ 4,进行 thunk 的工作; 5,X := B.TOP - 3 ; 6,SP := 1 [X] ; /* 恢复 SP*/ 7,B.TOP := 3 [X] ; /* 恢复 B.TOP */ 8,X := 2 [X] ; 9,UJ 0 [X] ; /* 返回 Q */ 在栈顶 之上的 动作 具体的动作 (Z 中含有thunk 的入口地址) 1,X := B1.TOP; /* 现行栈顶地址送变址器 X */ 2,1 [X] := SP; /* 保护 SP */ 3,SP := 1 [SP] /* 把 SP 变成指向调用段 P 的活动纪录 */ 在栈顶之上的动作 栈的活动情况 B1.TOP SPP Q.TOP SP=SPQ SP=SPP . P.TOP 返回地址 B.TOP X SPQ B.TOP X := 返回地址 解释一下: 现行 SP 是 Q 的 SP = SPQ, SPQ + 1 中的内容 1 [SPQ] 是 P 的活动记录地址(老 SP),把它送 SP, 得到SPP 参考文献 1,Kenneth C.Louden,冯博琴译,《编译原理与实践》,机械工业出版社,P267-P296; 2,严尉敏,《数据结构与算法》,清华大学出版社,动态存储管理 部分。 3,Randell 和 Russell[1964],Algol60基于栈的环境; 4,Johnson 和 Ritchie[1981], C 编译器活动记录组织和调用序列; 5,Fraser 和 Hanson[1995],编译时堆结构设计; 6,Wilson[1992],Cohen[1981],垃圾回收。 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 第6章 符号表 * 四元式 地址 临时变量名 ( 1 ) * A B T1 T1 a ( 2 )

文档评论(0)

1亿VIP精品文档

相关文档