第五章符号表 在编译程序的工作过程中,经常需要收集和记录源程序 中的一些信息,这些信息往往保存在称为符号表的表中,根据 不同的需要可建立如常数表,标识符表各种用途的符号表等 由于每使用一个标识符就需要査表,在整个编译过程中编译 程序对这些表格的操作是很频繁的。因此,如何提高填査表 的效率直接影响到编译程序的工作效率。 编译程序使用的数据结构从使用的目的来看,可分为査 找型数据结构和分配型数据结构。査找型数据结构在编译程 序中用于构造不同的信息表,保存源程序中不同实体的属性 信息。这种结构的特点是每个实体的项只创建一次,但可以 查询多次。因此,査询效率很重要。分配型数据结构主要用 于处理嵌套结构的程序。其特点是分配给实体的内存地址对 实体用户是可知的。因此,不会对其进行查询操作,但分配 和回收的速度及内存的使用效率却是十分重要的。这里结合 查找型数据结构重点讨论符号表
第五章 符号表 在编译程序的工作过程中,经常需要收集和记录源程序 中的一些信息,这些信息往往保存在称为符号表的表中,根据 不同的需要可建立如常数表,标识符表各种用途的符号表等。 由于每使用一个标识符就需要查表,在整个编译过程中编译 程序对这些表格的操作是很频繁的。因此,如何提高填查表 的效率直接影响到编译程序的工作效率。 编译程序使用的数据结构从使用的目的来看,可分为查 找型数据结构和分配型数据结构。查找型数据结构在编译程 序中用于构造不同的信息表,保存源程序中不同实体的属性 信息。这种结构的特点是每个实体的项只创建一次,但可以 查询多次。因此,查询效率很重要。分配型数据结构主要用 于处理嵌套结构的程序。其特点是分配给实体的内存地址对 实体用户是可知的。因此,不会对其进行查询操作,但分配 和回收的速度及内存的使用效率却是十分重要的。这里结合 查找型数据结构重点讨论符号表
51分配型数据结构 5.1.1栈 栈是一种先进后出,后进先出的数据结构;访问栈一般访 问的是栈顶元素。栈在编译程序中也起着重要的作用,如递 归过程(或函数)中说明的动态的局部变量(非静态变量), 每进入一次如递归过程(或函数)就需分配相应的一块存储 单元,而这种存储单元的分配却符合栈这种先进后出,后进 先出特性
5.1 分配型数据结构 5.1.1 栈 栈是一种先进后出,后进先出的数据结构;访问栈一般访 问的是栈顶元素。栈在编译程序中也起着重要的作用,如递 归过程(或函数)中说明的动态的局部变量(非静态变量), 每进入一次如递归过程(或函数)就需分配相应的一块存储 单元,而这种存储单元的分配却符合栈这种先进后出,后进 先出特性
例:设有 PASCAL程序 program calco var a, b, sum: integer; procedure add(var x, y: integer) begin sum =X+y end begin add(3,5) write(sum) end
例:设有PASCAL程序 program calc(); var a,b,sum:integer; procedure add(var x,y:integer); begin sum:=x+y; …… end; begin add(3,5); write(sum); end
则编译语句sum:=X+y时过程add的符号和主程序calc 的符号都在符号表中,当过程add编译后其符号没有意义, 可以从符号表中退去,如图显示。 TOP add RB sulIn a calc SB
则编译语句 sum:=x+y 时过程add的符号和主程序calc 的符号都在符号表中,当过程add编译后其符号没有意义, 可以从符号表中退去,如图显示
为了方便地入栈和退栈,把原来的栈顶元素的地址也放入 符号表。如图: TOP一 y add RB一 sun calc SB一
为了方便地入栈和退栈,把原来的栈顶元素的地址也放入 符号表。如图: