第9章 符号表 1,联系 编译程序必须收集,利用出现在源程序中的名字的信息, 这种信息被列进成为符号表的数据结构中,给一个名字收 集的信息包括: 表示名字的字符串, 名字的类型(例如,整形,实型,串等), 种属(JB,结果), 存储单元 其它依赖于语言的特性
第9章 符号表 1 第9章 符号表 1,联系 编译程序必须收集,利用出现在源程序中的名字的信息, 这种信息被列进成为符号表的数据结构中,给一个名字收 集的信息包括 : 表示名字的字符串, 名字的类型(例如,整形,实型,串等), 种属(JB,结果), 存储单元 其它依赖于语言的特性
2,填项 扫描源程序,遇到一个名字就检索表,若它是一个新的 名字,就填表,在调用词法语法分析程序时,还要把有 关的信息填入(如标号的链,定义否) 3,使用表中的信息用于编译的各个阶段 语义分析时,用它来检查名字的使用是否与它们原先的说明一致, 如GOTO L,L为标号; 代码生成时,需要了解必须给名字分配多少,以及哪一种存储: 第9章符号表
第9章 符号表 2 2,填项 3,使用表中的信息用于编译的各个阶段 扫描源程序,遇到一个名字就检索表,若它是一个新的 名字,就填表,在调用词法语法分析程序时,还要把有 关的信息填入(如标号的链,定义否) 语义分析时,用它来检查名字的使用是否与它们原先的说明一致, 如GOTO L , L 为标号; 代码生成时,需要了解必须给名字分配多少,以及哪一种存储;
为了便于查错和改错,可以记录前面是否已经打印过象"变量未 定义”这样的出错信息,以免重复。 对于多遍扫描的编译器,不同遍的表也往往不同。 本章主要讨论: ·设计表的庄要问题是登记项的格式, 表的组织和访问的方法, 访问的格式, •存放的位置(主存或者辅存)。 第9章符号表
第9章 符号表 3 为了便于查错和改错,可以记录前面是否已经打印过象“变量A未 定义”这样的出错信息,以免重复。 对于多遍扫描的编译器,不同遍的表也往往不同。 本章主要讨论 : •设计表的主要问题是登记项的格式, •表的组织和访问的方法, •访问的格式, •存放的位置(主存或者辅存)
符号表的作用和地位一语义检查的依据 目标代码生成阶段地址分配的依据 在编译程序中符号表用来存放语言程序中出现的有关 标识符的属性信息,符号表中所登记的信息在编译 的不同阶段都要用到。 在语义分析中,符号表所登记的内容将用于语义检查 (如检查一个名字的使用和原先的说明是否一致) 和产生中间代码。 在目标代码生成阶段,当对符号名进行地址分配时 符号表是地址分配的依据。对一个多遍扫描的编译 程序,不同遍所用的符号表也往往各有不同。因为 每遍所关心的信息各有差异。 第9章符号表
第9章 符号表 4 符号表的作用和地位-----语义检查的依据 目标代码生成阶段地址分配的依据 在编译程序中符号表用来存放语言程序中出现的有关 标识符的属性信息,符号表中所登记的信息在编译 的不同阶段都要用到。 在语义分析中,符号表所登记的内容将用于语义检查 (如检查一个名字的使用和原先的说明是否一致) 和产生中间代码。 在目标代码生成阶段,当对符号名进行地址分配时, 符号表是地址分配的依据。对一个多遍扫描的编译 程序,不同遍所用的符号表也往往各有不同。因为 每遍所关心的信息各有差异
9.1 符号表的内容 9.1.1符号表项的域 理论上,符号表只是一个具有名字域和信息域这2个域 的表,大致结构如下: 名字栏 信息栏 第一项(入口1) 第二项(入口2) 第n项(入口n) 第9章符号表
第9章 符号表 5 9.1 符号表的内容 •9.1.1 符号表项的域 理论上,符号表只是一个具有名字域和信息域这2个域 的表,大致结构如下: 名字栏 信息栏 … 第一项(入口1) 第二项(入口2) 第n项(入口n)
张符号表的每一项(或称入口,或称区段、字域),即 名字栏和信息栏。 信息栏包含许多子栏和标志位,用来记录相应名字和种 种不同属性,由于查填符号表一般是通过匹配名字来 寮现的,因此,名字栏也称主栏。主栏的内容称为关 键字(key word)。 第9章符号表
第9章 符号表 6 一张符号表的每一项(或称入口,或称区段、字域),即 名字栏和信息栏。 信息栏包含许多子栏和标志位,用来记录相应名字和种 种不同属性,由于查填符号表一般是通过匹配名字来 寮现的,因此,名字栏也称主栏。主栏的内容称为关 键字(key word)
符号属性信息)) 几种通常都是需要的。 1 符号名 2 符号的类型 3 符号的存储类别 4 符号的作用域及可视性 5 符号变量的存储分配信息 6 符号的其它属性 (1) 数组内情向量 (2) 记录结构型的成员信息 (3) 函数及过程的形参 第9章符号
第 9 章 符号表 7 符号属性 (信息) 几种通常都是需要的 。 1 符号名 2 符号的类型 3 符号的存储类别 4 符号的作用域及可视性 5 符号变量的存储分配信息 6 符号的其它属性 (1) 数组内情向量 (2) 记录结构型的成员信息 (3) 函数及过程的形参
我们要求它具备以下几种功能: 1,确定一个给定的名字是否在表中: 2,填入新的名字; 3,访问所给名字的有关信息; 4,对给定的名字,填写和更新它的有关息; 5,删除一个或者一组名字 第9章符号表
第9章 符号表 8 我们要求它具备以下几种功能: 1,确定一个给定的名字是否在表中; 2,填入新的名字; 3,访问所给名字的有关信息; 4,对给定的名字,填写和更新它的有关息; 5,删除一个或者一组名字
9.1.2分表 语言中,名字表各种类型的对象:变量名,过程名,常 数,域名(结构),标号等,由于各种类型的名字因用法 不同,栏目及所需的空间相差很大,因此往往独立建表, 由此带来的负面影响是:导致零头太多。如果登记项格式 可以变化,则另外一个表也可以: 如果禁止把关键字作为标识符,则应把关键字先进表,标 函也进表 第9章符号表
第9章 符号表 9 •9.1.2 分表 语言中,名字表示各种类型的对象:变量名,过程名,常 数,域名(结构),标号等,由于各种类型的名字因用法 不同,栏目及所需的空间相差很大,因此往往独立建表, 由此带来的负面影响是:导致零头太多。如果登记项格式 可以变化,则另外一个表也可以; 如果禁止把关键字作为标识符,则应把关键字先进表,标 函也进表
9.1.3符号表内容的细目 1,表示名字的字符串+编号,如果多个程序块或 过程中可以使用同一标识符,则必须指出这个名字属于哪 一个程序块或过程: 2,名字的属性(包括类型和种类)以及识别名字 用途的信息(标号,形参,数组) 3,参数(维数,下标的上下界)》 4,描述分配给名字存储单元的位置的偏移量 第9章符号表 0
第9章 符号表 10 9.1.3 符号表内容的细目 1,表示名字的字符串+编号,如果多个程序块或 过程中可以使用同一标识符,则必须指出这个名字属于哪 一个程序块或过程; 2,名字的属性(包括类型和种类)以及识别名字 用途的信息(标号,形参,数组) 3,参数(维数,下标的上下界) 4,描述分配给名字存储单元的位置的偏移量