符号表的作用:用来体现作用域与可见性
作用域在程序中某一处可以作如下分类:
- 开作用域:当前作用域和包含当前作用域的作用域
- 闭作用域:其他作用域
可见性规则:
- 任何一点只可访问开作用域中声明的名字
- 若一个名字在多个开作用域中被声明,则把(在作用域栈中)最近的一个声明作为引用的解释
- 新的声明只能出现在当前作用域
使用作用域栈维护作用域及每个作用域的符号信息
单符号表组织:使用一个全局Hash表存储符号信息,同名符号根据作用域顺序形成链表;对闭作用域,直接删除其中符号
多符号表组织:构建作用域栈,每个作用域一个符号表;对闭作用域,将其弹出作用域栈,但不删除