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

第八章符号表(精品).ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 符号表 内容线索 符号表的组织与作用 名字的作用范围 符号表的内容 符号表的作用 收集信息 源程序中的各种名字及其属性、特征等。 提供使用 上下文语义的合法检查的依据; 目标代码生成阶段地址分配的依据等。 符号表的组织与使用 符号表的操作 填入: 填入新名字、信息. 查找: 给出名字,确定它是否在表中. 访问: 给出名字,访问有关的信息. 更新: 给出名字,更新有关信息. 删除: 删除一个或一组记录. 符号表的组织方式 直接方式:各栏长度固定, 内容直接填入 优点:易于组织、填写和查找 缺点:浪费空间 间接方式:内容填入其他数据结构中,符号表栏中仅放置指示器,指向该位置. 名字栏的间接组织方式 指针(指示器):标识符的起始位置 整数:标识符的长度 信息栏的间接组织方式 信息栏也可用间接组织方式,如数组标识符的内情向量表 符号表的存储 连续存储 把每一项置于连续K存储单元中,构成一张K*N的表 符号表的存储 子表存放 把整个符号表分成m个子表,如T1,T2,…Tm,每个子表含有N项. 第i项的全部内容是T1[i]…Tm[i]的并 符号表的种属 按名字的不同种属建立多张符号表,如常数表、变量名表、过程名表、… 内容线索 符号表的组织与作用 名字的作用范围 符号表的内容 名字的作用范围 在许多程序语言中,名字都有一个确定的作用范围. 两种程序体结构 单层(并列)结构,如FORTRAN 一个FORTRAN程序由一个主程序段和若干个辅程序段组成 多层(嵌套)结构,如PASCAL,ADA 过程可以嵌套和递归 作用域 作用域:一个名字能被使用的区域范围称作这个名字的作用域。 允许同一个标识符在不同的过程中代表不同的名字。 名字作用域规则—“最近嵌套原则” 一个在子程序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 作用域的实现 两种做法: 引入“过程编号”属性: 〈名字,过程编号〉 查找时,先查找本过程编号的名字,查不到则查找外层过程编号的名字,…,等等. 按栈式思想组织符号表。查找时,从后往前查找,碰到的第一个名字就是所需查找的名字. FORTRAN的符号表组织 变量、数组和语句函数名的作用范围就是他们所处的程序段 把局部名和全局名分别存在不同的地方 一遍扫描时,当一段程序处理完后,其局部名不需再保留. Pascal的符号表组织 符号表设计为栈符号表,新的名字出现总是从栈顶填入 top:栈顶指针 信息栏指针域previous:指明同一层中前一名字的位置 显示层次关系表(嵌套层次表,display表),存放各嵌套过程子表在主表起始位置 内容线索 符号表的组织与作用 名字的作用范围 符号表的内容 符号表的内容 符号表的信息栏中登记了每个名字的有关性质 类型:整、实或布尔等 种属:简单变量、数组、过程等 大小:长度,即所需的存储单元字数 相对数:指分配给该名字的存储单元的相对地址 附:PL 语言编译程序的符号表 1) 名字表(nametab) 名字表nametab:登记程序中出现的各种名字及其属性 (2) 程序体表btab和层次显示表display 作业 P236 1 3 层次显示表display:描述正在处理的各嵌套层,对程序体表进行管理 btab (3)数组信息表atab 数组的下标类型 数组元素类型 当元素为数组时,它指向该元素数组信息在atab表中的位置,其他情况为0 数组下限 数组上限 数组元素的体积 数组本身的体积 type a=array[1..10, 1..10] of integer; nametab atab * * NAME INFORMATION SAMPLE WEIGHT . . . . . . . . . 主栏(关键字) 名字栏 信息栏 项 NAME INFORMATION , 6 , 6 S A M P L E W E I G H T . . . . . . 字符串数组: array A [ l1 :u1 , l2: u2 , . . . , ln:

文档评论(0)

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

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

1亿VIP精品文档

相关文档