第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)