网站大量收购闲置独家精品文档,联系QQ:2885784924

《7编译原理之运行时刻环境.ppt

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
访问链 引入访问链的目的:访问非局部数据 如果过程p在声明时嵌套在过程q的声明中,那么p的活动记录中的访问链指向最上层(必威体育精装版)的q的活动记录。 从栈顶活动记录开始,访问链形成了一个链路,嵌套深度逐一递减。 设深度为np的过程p访问变量x,而变量x在深度为nq的过程中声明,那么 从当前活动记录出发,沿访问链前进np-nq次找到活动记录(其中的x就是要找的变量位置) x相对于该活动记录的偏移量在编译时刻已知 np和-nq在编译时刻已知; Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd. 访问链的例子P270 图7-11 用来查找非局部数据的访问链 sort 活动 记录 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd. 访问链的处理 (明确调用过程与声明嵌套深度的关系) 当过程q调用过程p时,P访问链如何设置?把p的声明嵌套深度np与nq的关系分为大于,等于,小于三种情况考虑 p的声明嵌套深度大于q,p必然在q中直接定义,否则不满足作用域规则,那么p的访问链指向当前活动记录(即父亲直接调用孩子) 递归调用:p=q 。p的活动记录的访问链等于q当前记录的访问链(即自身等于自身) p的声明嵌套深度小于q的深度:此时必然有过程r,p直接在r中定义,而q嵌套在r中。此时应让p的访问链指向r的活动记录。(即q是p的侄子系的,r是p的父亲) r p q ... Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd. 7.3.6 过程型参数的访问链 有些语言允许过程作为参数,如:c语言 例:tiny编译器中语义分析程序analyze.c的transverse函数声明如下: static void traverse( TreeNode * t, void (* preProc) (TreeNode *), void (* postProc) (TreeNode *) ) 构建符号表前序遍历语法树traverse(syntaxTree,insertNode,nullProc); 类型检查时后序遍历语法树traverse(syntaxTree,nullProc,checkNode); Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd. 7.3.6 过程型参数的访问链 当一个过程p作为参数传递给另一个过程q,并且q随后调用了这个参数,有可能q并不知道p在程序中出现的上下文 后果:不知道如何设置p的访问链 解决办法: 在传递过程指针参数时,过程型参数中不仅包含过程的代码指针(IP),还包括正确的访问链(AL)。 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd. 7.3.6 过程型参数的访问链 图7-12 使用函数参数的ML程序的概要 f是一个函数参数 对f的引用 d被用作函数参数 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd. 7.3.6 过程型参数的访问链 因为d在c中定义 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile . Copyright 2004-2011 Aspose Pty Ltd. 7.3.8 显示表(display) 用访问链访问数据时,如果嵌套深度大,则访问的效率差。 显示表:使用数组d为每个嵌套深度保留一个指针 指针d[i]指向栈中最高的对应于嵌套深度为i的的活动记录。 如果程序p中访问嵌套深度为i的过程q中变量x,那么d[i]直接指向相应的q活动记录; 显示表的维护 调用过程p时,

文档评论(0)

you9391 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档