次意的 编译程序工作的过程中,需要不断收集、 记录和使用源程序中一些语法符号的类 型和特征等相关信息 这些信息一般以表格形式存储于系统中 如常教表、变量名表、组名表、过程 名表、标号表等等,统称为号。 的号感组织、构造和管理方法的好坏会 直接影响编舜系统的运行效率
第六章 符号表 编译程序工作的过程中, 需要不断收集、 记录和使用源程序中一些语法符号的类 型和特征等相关信息. 这些信息一般以表格形式存储于系统中. 如常数表、变量名表、数组名表、过程 名表、标号表等等,统称为符号表。 符号表组织、构造和管理方法的好坏会 直接影响编译系统的运行效率
6.1符号表的组织 对符号表的访问常见操作有: (1)定一给定的名字是否在表中; (2在表中填入一个新名字; (3动问与给定名字相灵的信息; (4为给定的名字填入或更新其某些信戛 (5从表中删除一个或一组名字 在很多程序设计语言中.对名字的作用域有相应的规定, 即同一名字的标识符,在不同的作用城里标识了不同的 对象,且占用了不同的存储空间 因此,在组织符号表时,应能反映各个标识符的作用域
6.1 符号表的组织 对符号表的访问常见操作有: (1)判定一给定的名字是否在表中; (2)在表中填入一个新名字; (3)访问与给定名字相关的信息; (4)为给定的名字填入或更新其某些信息; (5)从表中删除一个或一组名字 在很多程序设计语言中,对名字的作用域有相应的规定, 即同一名字的标识符,在不同的作用域里标识了不同的 对象,且占用了不同的存储空间. 因此,在组织符号表时,应能反映各个标识符的作用域
6.2分程结的符号表的建妥 分程序结构语言用其所写的程序单元( program unit) 中,可以再包含嵌套的程序单元且其中每个程序单元均 可定义属于自己的一组局部变量如 PASCAL中的过程 说明C中花用括{}号括起来的分程序或复合语句等 程序草元的嵌套导致了变量作用域的嵌套故把允许名 字作用域嵌套的语言称为具有分序枃言的语ˉ PASCAL是典型的分程序靠构语言之一 对于嵌套的作用域同名变量在不同处代表了不同的实 体,因此需采用分层建立和处理符号表的方式
6.2 分程序结构语言符号表的建立 分程序结构语言 用其所写的程序单元(program unit) 中,可以再包含嵌套的程序单元,且其中每个程序单元均 可定义属于自己的一组局部变量.如PASCAL中的过程 说明,C中花用括{}号括起来的分程序或复合语句等. 程序单元的嵌套导致了变量作用域的嵌套,故把允许名 字作用域嵌套的语言称为具有分程序结构语言的语言. PASCAL是典型的分程序结构语言之一. 对于嵌套的作用域,同名变量在不同处代表了不同的实 体,因此,需采用分层建立和处理符号表的方式
宣填表方案 若一标识符在某分程序首部已作说明,则它在整个 分程序内均有定义除非它在某内层分程序被再次 定义即它的作用减是整个分程海,是本层分程序及 内层分程序的全局量; 1.当在一分程序首部某说明中扫描到一个标识符时,以此标识 符查相应于本层分程序的符号表,若表中已有此项,则它被 重复说明,出错;否则,在表中新登记一项,将该符号及其相 关信息填入 2.在分程序执行语句中遇一标识符时,首先查本层表,若找不 到,则查直接外层的符号表,如此等等,若在某层查到,则可 使用相关信息;若遍查所有外层均未找到,则无定义,出错
查填表方案 若一标识符在某分程序首部已作说明,则它在整个 分程序内均有定义,除非它在某内层分程序被再次 定义.即它的作用域是整个分程序,是本层分程序及 内层分程序的全局量; 1. 当在一分程序首部某说明中扫描到一个标识符时,以此标识 符查相应于本层分程序的符号表,若表中已有此项,则它被 重复说明,出错;否则,在表中新登记一项,将该符号及其相 关信息填入. 2. 在分程序执行语句中遇一标识符时,首先查本层表,若找不 到,则查直接外层的符号表,如此等等,若在某层查到,则可 使用相关信息;若遍查所有外层均未找到,则无定义,出错
程序6-1一个嵌套的分程序结构 名字信息栏 PROCEDURE… IF VAR A, B. C, D: REAL+ 2E PROCEDURE OUTERN ECOUNT POINTER 3L1 LABEL L. VAR E,F: REAL 4341 5H 6 G BEGIN 31 7L3 10L2 3 11D END: 12c PROCEDURE 分程序表 13B LABEL L2, L3 符号表 VAR G, H: REAL: FUNCTION 图6-3按分程序的自然顺序建立的分程序表和符号表 VAR A: INTEGER: BEGIN 各分程序的符号表登记项按B2B4B3B1的顺 END 序连续存放, BEGIN ① OUTERN指明分程序直接外层分程序的编号; (ECOUNT记录分程序在符号表登记项个数 END: ⑦ POINTER指向分程序在符号表中的起始位置 BEGIN END
各分程序的符号表登记项按B2,B4,B3,B1的顺 序连续存放, ①OUTERN指明分程序直接外层分程序的编号; ②ECOUNT记录分程序在符号表登记项个数; ③POINTER指向分程序在符号表中的起始位置;