6 记录1 属性 记录2 ...RFDI M PL E Q U 图9.1(b)名字存储在分开的数组中 第9章符号表
第9章 符号表 16 … 6 属性 … … R F D I M P L E Q U … 图9.1(b) 名字存储在分开的数组中 记录1 记录2
1,当一个名字的最大长度不太长时,如FORTRAN:为 8字符,用2个字存储,其余补空; 2,ALGOL名字不限,PL/131个(8个字),则采 用间接方式,专门字符数组,这样使表的名字域大小 不变; 对于其他的域也可以这样办理,(技术性工作), ?如果向量表维数可变怎么办? 第9章符号表
第9章 符号表 17 1,当一个名字的最大长度不太长时,如FORTRAN为 8字符, 用2个字存储,其余补空; 2,ALGOL 名字不限, PL/1 31个(8个字), 则采 用间接方式,专门字符数组,这样使表的名字域大小 不变; 对于其他的域也可以这样办理,(技术性工作). ?如果向量表维数可变怎么办?
把整个符号表分成若干子表 SAMPLE 4N字 40-1): 例子:分两个子表的符号表安排 的属性 INFORMATION:0: 2N字 LE 20-1): SAMPLE NAME:0: 第9章符号表 18
第9章 符号表 18 把整个符号表分成若干子表 SAMPLE 的属性 LE SAMPLE 4N 字 2N 字 NAME:0: 2(i-1): 4(i-1): INFORMATION:0: 例 子 : 分 两 个 子 表 的 符 号 表 安 排
9.1.6符号表空间的重新使用 符号表占用空间很大,且信息更新,故有重新使用 空间的问题,那些空间不可用呢? 程序员用来表示名字的标识符,必须一直保存在符 号表中,直到不再引用为止,以便该标识符只能代 表同一个名字,这是必要的,它使标识符的所有使 用与符号表登记项相结合(表中有的内容在以后不 再使用了),从而是同一个名字。 但是,如果用来存放标识符的空间在下一次能重新 使用,那么用少量空间就能解决问题。 第9章符号
第9章 符号表 19 •9.1.6 符号表空间的重新使用 符号表占用空间很大,且信息更新,故有重新使用 空间的问题,那些空间不可用呢? 程序员用来表示名字的标识符,必须一直保存在符 号表中,直到不再引用为止,以便该标识符只能代 表同一个名字,这是必要的,它使标识符的所有使 用与符号表登记项相结合(表中有的内容在以后不 再使用了),从而是同一个名字。 但是,如果用来存放标识符的空间在下一次能重新 使用,那么用少量空间就能解决问题
例如,在以后几遍中,放名字的数组可以释放,所以设法回收用来存 储标识符的空间,(事实上,图9.1b第一字也能回收) 方法:用两个而不是一个数组来存放记录 IDENTIFTERS: INFORMATTON: 5i-4 2i-1 DIMP DIMP LE属性 如不查表,可释放 51 2i LE 两个数组的符号表方案(9.1a一分为二) 谁意:DIMPLE的外部表示不再是符号表的指针,而是整数下标1,此时,用i来存取另一数组 第9章符号表 20
第9章 符号表 20 例如,在以后几遍中,放名字的数组可以释放,所以设法回收用来存 储标识符的空间,(事实上,图9.1b 第一字也能回收) 方法:用两个而不是一个数组来存放记录 … DIMP LE … … DIMP LE属性 … 如不查表,可释放 2i-1 2i IDENTIFIERS: INFORMATION: 两个数组的符号表方案(9.1a 一分为二) 5i-4 5i 注意:DIMPLE的外部表示不再是符号表的指针,而是整数下标i,此时,用i来存取另一数组