《编译原理-刘善梅》第8章 符号表2.ppt

《编译原理-刘善梅》第8章 符号表2.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
允许同一个标识符在不同的过程中代表不同的名字。 名字作用域规则--最近嵌套原则 一个在子程序B1中说明的名字X只在B1中有效(局部于B1); 如果B2是B1的一个内层子程序且B2中对标识符X没有新的说明,则原来的名字X在B2中仍然有效。如果B2对X重新作了说明,那么,B2对X的任何引用都是指重新说明过的这个X。 program main var A, B : real; … procedure P1 var B:boolean; … begin … end procedure P2 var A:integer; … begin … end begin … end A(real) B(real) B(bool) A(integr) 两种做法: 引入过程编号属性。查找时,先查找本过程编号的名字,查不到则查找外层过程编号的名字,…,等等. 按栈式思想组织符号表。查找时,从后往前查找,碰到的第一个名字就是所需查找的名字. 名字作用域分析(嵌套结构语言) 对每个过程指定一个唯一的编号(层次),即过程的顺序号,以便跟踪过程里的局部名字。 在符号表中,表示局部名字用一个二元组: 名字,过程编号 对一个名字查找符号表的原则: 只有当表项中的名字的字符逐个匹配,并且该记录相关的编号和当前所处理的过程的编号匹配时,才能确定查找成功. 引入过程编号属性 (1) 将符号表设计为栈符号表,新名字出现总是从栈顶填入。为了保证从内层向外层查,查找操作从符号表的栈顶往底部查找。 (2)过程的嵌套层次表(display),是引入的一个显示层次关系表。其作用是为了描述过程的嵌套层次,指出当前正在活动着的各嵌套的过程(或函数)相应的子符号表在栈符号表中的起始位置(相对地址)。 Display表也是一个栈,栈顶为level,用来指示层次,即指向当前的最内层过程的子符号表在栈符号表中的起始位置。 (3)在符号表的信息栏中引入一个指针域(previous),用来链接它在同一个过程内的下一名字在表中的下标(相对位置)。每一层最后一个域名字,指针域之值为0。这样每当需要查找个新名字时,就能通过display表找出当前正在处理的最内层的过程及所有外层的子符号表在栈符号表中的位置。然后通过指针域可以找到同一个过程内的所有被说明的名字。 按栈式思想组织符号表 例: procedure…//B1 var a,b:real; procedure…//B2 var c,d:real; procedure…//B3 var e,f:real; begin … end; begin … end; begin… end; … … … … … … … … Previous Information Name 11 10 9 8 7 6 5 4 3 2 1 栈符号表 DISPLAY a b top sp 1 level level 2 0 B2 c d top sp 4 level 3 0 5 0 B3 e f top sp 7 level 6 0 8 0 procedure…//B1 var a,b:real; procedure…//B2 var c,d:real;

文档评论(0)

小苏老师 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档