




已阅读5页,还剩57页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章 符号表,数计学院 宋彩芳,9 符号表,符号表的作用和地位 符号的主要属性及作用 符号表的组织 符号表的管理,符号表的作用和地位,符号表用来存放语言程序中出现的有关标识符的属性信息,这些信息集中反映了标识符的语义特征属性; 在词法分析及语法分析过程中不断积累和更新表中的信息。 在词法分析到代码生成的各个阶段,按各自需要从表中获取不同的属性信息。,符号表的作用和地位,符号表的功能有: 收集符号属性; int i35; 上下文语义的合法性检查的依据; extern float i; /类型不一致 float i42; /重定义 作为目标代码生成阶段地址分配的依据; extern 公共区 extern static 文件静态区 static 函数静态区 auto 动态区,9 符号表,符号表的作用和地位 符号的主要属性及作用 符号表的组织 符号表的管理,符号的主要属性及作用,语言符号可分为: 关键字(保留字)符号 操作符符号 标识符符号 语言中标识符可以是变量名、函数名、过程名; 过程没有返回值,如同C的void 函数则有,如同C的带返回值函数,标识符符号的属性(信息),几种通常都是需要的。 1 符号名 2 符号的类型 3 符号的存储类别 4 符号的作用域及可视性 5 符号变量的存储分配信息 6 符号的其它属性 数组内情向量 记录结构型的成员信息 函数及过程的形参,标识符符号的属性(信息),一、符号名 符号名与它在符号表中的位置一一对应; 标识符的内部代码也即标识符在符号表中的位置(通常是一个整数)可以替换符号名; 符号表运行过程中,表中的标识符名始终是唯一标志; 特殊情形: 重名标识符定义:根据标识符在程序中的作用域和可视性规则进行处理。表中标识符名始终唯一; 操作重载:通过它们的参数个数和类型,以及函数返回值类型来区别。以达到标识符的唯一;,标识符符号的属性(信息),二、符号的类型 除过程标识符之外的函数和变量标识符都具有数据类型; 函数的数据类型指该函数值的数据类型; 变量符号的类型属性决定了其存储方式和可施加的运算操作; 数据类型: 基本数据类型:整型、实型、字符型、逻辑型(布尔型)、位组型(字节型); 复合数据类型:数组、记录结构;,标识符符号的属性(信息),三、符号的存储类别 由关键字指定; 用static定义属于文件的静态存储变量或属于函数内部的静态存储变量 用regist定义使用寄存器存储的变量; 由变量在程序中位置决定; 函数外是程序的公共存储变量 函数内是内部变量; 存储类别作用: 编译过程语义处理、检查和存储分配的重要依据; 决定了符号变量的作用域、可视性和它的生命周期;,标识符符号的属性(信息),四、符号的作用域及可视性: 作用域:符号变量在程序中起作用的范围; 如C语言中声明为extern的外部变量,其作用域是整个程序; 在函数外声明的静态变量的作用域是定义该静态变变量的文件; 函数内声明的静态变量作用域是定义该变量的函数;,标识符符号的属性(信息),影响变量可视性的情况: 函数的形式参数; int a; int fun(float a, float b) a /引用float a 改变可见性作用域操作符: int a; int fun(float a, float b) a /引用float a :a /引用int a ,标识符符号的属性(信息),影响变量可视性的情况: 复合语句分程序结构; int a; char a; float a; a /引用char a ,标识符符号的属性(信息),为确立符号的作用域和可视性,符号表属性除了需要符号的存储类别之外还需要表示该符号在程序结构上被定义的层次;,标识符符号的属性(信息),五、符号变量的存储分配信息:根据符号变量的存储类别定义及它们出现的位置和次序来确定每个变量应分配的存储区及在该区的具体位置; 存储区 静态存储区:生命周期是程序运行的全过程; 公共静态区:如extern定义的外部变量; 局部静态区:如static定义的静态变量; 函数外表示文件可视性,函数内表示所在函数可视; 动态存储区:生命周期是定义该变量的局部范围;,标识符符号的属性(信息),具体位置: 按该变量在存储区类分别依出现先后的次序排列下相对该存储区表头的相对位移量来表示的; Int a; . float b; Struct cc int d; float e; c; ,标识符符号的属性(信息),符号的其他属性: 数组内情向量 数组类型、维数、各维上下界、数组首地址; 记录结构型的成员信息 全体成员确定其存储分配; 成员排列次序的属性信息; 函数及过程的形参 形参个数、形参的排列次序及每个形参的类型;,9 符号表,符号表的作用和地位 符号的主要属性及作用 符号表的组织 符号表的管理,符号表的组织,符号表的总体组织 不同种类符号,其属性信息种类不完全相同; 不同程度但有有所不同; 符号表项的排列 关键字域的组织 其他域的组织,符号表的组织,符号表的组织,第一种:按属性种类完全相同的那些符号组织在一起;,符号表的组织,第一种:按属性种类完全相同的那些符号组织在一起; 优点: 每个符号表存放符号的属性个数和结构完全相同; 表项等长,且表项每个属性栏都有效; 对单个符号表来说,管理方便一直,空间效率高; 缺点: 同时管理多个符号表,增加了总体管理的工作量和复杂度;,符号表的总体组织,把所有语言中的符号都组织在一张符号表中;,符号表的总体组织,把所有语言中的符号都组织在一张符号表中; 优点: 总体管理非常集中单一,且不同种类符号的共同属性可以一致地管理和处理; 缺点: 增加了符号表管理的复杂度; 增加无用的属性空间,从而增加了空间开销;,符号表的总体组织,根据符号属性相似程度分类组织若干张表;,符号表的总体组织,根据符号属性相似程度分类组织若干张表; 折中的组织方式在管理复杂性及时空效率方面都取得折中的效果。 对复杂性和效率的取舍可由设计者根据自己的经验和要求及目标系统的客观环境和需求进行选择和调整;,属性3栏与属性4栏冗余,可将其合并; 增加了符号表管理和运行的复杂性,但减少了空间开销;,符号表的总体组织,符号表的总体组织,总结: 为便于符号表的组织管理,每张符号表的表长通常为定长是合理的; 每张符号表可以看作是一个多元组,每个元组由若干属性组成,元组之间有相同的成员个数和一致的排列; 元组之间的区分由表项中“符号”一栏区分;,符号表的组织,符号表的总体组织 符号表项的排列 关键字域的组织 其他域的组织,符号表项的排列,符号表作为一个多元组,表中元组的排列组织是构造符号表的重要成分。 在编译程序的整个工作过程中,符号表被频繁地用来建立表项,查找表项,填充和引用表项的属性。 在编译程序中,符号表项的组织传统上采用三种构造方法。即线性法,二分法及散列法。,符号表项的排列,线性组织 符号表中表项按它的符号被扫描的先后顺序登录; 管理简单但运行效率低;, a b a d c. b.,符号表项的排列,排列组织及二分法 符号表中表项按其符号的字符代码串的值的大小排列; 排序表的空间组织和存储开销与线性表相同,但运行效率高于线性表,算法复杂性也高于线性表;, a b a d c. b.,符号表项的排列,散列组织 对符号进行某种函数操作(杂凑函数)所得的函数值确定它在符号表的位置; Vhash = fhash(符号代码值) 改进:Lhash = mod(Vhash,N), a b a d c. b.,符号表项的排列,散列组织需事项注意: 散列冲突,解决方法是多次散列方法; 散列函数的选择: 静态符号表 动态符号表 对符号代码的位操作作为杂凑函数,如符号代码的字段叠加或加权叠加以及符号代码的对折或多对折等位操作;,符号表的组织,符号表的总体组织 符号表项的排列 关键字域的组织 其他域的组织,关键字域的组织,有关符号的基础知识 保留字 操作符 标识符 外部名(前6个字符可以惟一地区分) 内部名(前31个字符可以惟一地区分) 可见,标识符的内部规则是符号表关键字组织的基础和依据;,关键字域的组织,等长关键字域(段)符号表 设置关键字段为标识符的最大长度;,关键字域的组织,不等长关键字段符号表 采用关键字池的索引结构。,符号表的组织,符号表的总体组织 符号表项的排列 关键字域的组织 其他域的组织,其他域的组织,等长属性值域组织 符号表中符号的属性值具有相同类型且等长; 不等长属性域组织 符号表中符号的属性值具有相同类型但长度不同; 下推链域的组织,等长属性值域组织,可以取相应的数据类型表达属性值 符号布尔性质的属性域 defined 1(true) 表示已定义 defined 0(false) 表示未定义 表示符号的基本数据类型 Data-type 3个bit位(整型值) Char 0 0 0 (0) short 0 0 1 (1) int 0 1 0 (2) long 0 1 1 (3) unsigned 1 0 0 (4) float 1 0 1 (5) double 1 1 0 (6),等长属性值域组织,可以取相应的数据类型表达属性值 符号变量: 存储类别数据类型一样的构造方式 存储位移整型量表示相对位移量,等长属性值域组织,可以取相应的数据类型表达属性值 符号之间关系的属性可用指针或指针链来构造; 如:函数和形参关系 func1(para1,para2,para3) func2(),等长属性值域组织,可以取相应的数据类型表达属性值 结构 struct tag1 memb1 memb2 struct tag2 memb3 memb4 memb5 memb6 memb7 stv;,不等长属性值域组织,另设空间存放属性值 数组的内情向量 array1(subscrip1,subscrip2) array2(subscrip3,subscrip4,subscrip5,subscrip6),不等长属性值域组织,另设空间存放属性值 C语言中数组特别的含义 int abc342;,不等长属性值域组织,另设空间存放属性值 结构 struct tag1 memb1 memb2 struct tag2 memb3 memb4 memb5 memb6 memb7 stv;,不等长属性值域组织,复合属性域的组织 存在若干个可用位表示的信息 该符号变量是否初始化 该符号是否是结构成员 该符号是否是标号 该符号是否是保留字,下推链域的组织,实现同名标识符的语义功能,9 符号表,符号表的作用和地位 符号的主要属性及作用 符号表的组织 符号表的管理,符号表的管理,符号表的作用反映了符号表的行为: 符号表的初始化 符号的登录 符号的查找 符号表中分程序结构层次的管理,符号表的初始化,符号表的表长是渐增变化的情况 线性组织和二分法组织 符号表的表长是确定的情况 散列组织的符号表,符号的登录,不同组织方式导致不同的登录方式 线性方法:图9.21 二分方法:图9.22 散列表:通过杂凑算法决定登录表项的位置; 登入的内容: 名字登入 名字属性:取决于编译程序获得某个符号时编译所处的程序扫描点的状态;,符号的登录,符号a的属性 func(x,y) struct tag int anm; t; ,类型属性 存储类别属性 作用域属性 存储分配属性 数组内情向量属性,符号的查找,目的:建立和确认该符号的属性; 步骤: 先在保留字表和运算符表中查找; 再在标识符表中查找; 查找算法与该符号表的组织方式密切相关; 线性表:顺序查找 二分表:折半查找 杂凑表:杂凑算法查找,符号表中分程序结构层次管理, int a; float b,d; int c; float a; int d; float c; float d; a=b+c+d; ,符号表中分程序结构层次管理,分表结构 对每个分程序建立一个独立的分表结构的符号表 动态建立和动态消亡, int a; float b,d; int c; float a; int d; float c; float d; a=b+c+d; ,符号表中分程序结构层次管理,单表结构 把分程序符号组织在一张总表结构的符号表中。 特定要求: 为了标志符号所属的分程序层次,在符号表中可设立一个属性域用来登录符号所在分程序的层次; 在编译程序扫描进入一个分程序时,表示分程序层次的状态量要增加一层,使进入分程序后定义的标识符登录符号表时,有相应的层次量作为层次属性登录; 对于具有分程序结构的源程序,在不同分程序中允许定义重名标识符,单表结构可以用下推链来组织;,单表结构, int a; float b,d; int c; float a; int d; fl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园防盗安全知识培训课件
- 新测绘法试题及答案
- 校园安防消防知识培训课件
- 防腐廉洁面试题及答案
- 编导运营面试题及答案
- 报账员考试题及答案
- 球馆分级考试题及答案
- 流管员面试题及答案
- 方程运算面试题及答案
- 2025年福建福州工会招聘工会社会工作者考试笔试试题(含答案)
- 2025至2030中国婚庆行业发展趋势分析与未来投资战略咨询研究报告
- 2025年职业病诊断医师资格考试(职业性化学中毒)历年参考题库含答案详解(5卷)
- 2025年安徽高考生物试题及答案
- 2025年高校机房管理试题及答案
- ESG基础知识培训课件
- 泌尿系统常见疾病科普讲座
- 2025年中国南海研究院招聘事业编制人员考试笔试试题
- 山东阿訇管理办法
- 2025广西公需科目真题续集(附答案)
- DL∕T 5776-2018 水平定向钻敷设电力管线技术规定
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蚀工程施工及验收规范
评论
0/150
提交评论