符号表的作用:用来体现作用域可见性

作用域在程序中某一处可以作如下分类:

  • 开作用域:当前作用域和包含当前作用域的作用域
  • 闭作用域:其他作用域

可见性规则:

  • 任何一点只可访问开作用域中声明的名字
  • 若一个名字在多个开作用域中被声明,则把(在作用域栈中)最近的一个声明作为引用的解释
  • 新的声明只能出现在当前作用域

使用作用域栈维护作用域及每个作用域的符号信息


单符号表组织:使用一个全局Hash表存储符号信息,同名符号根据作用域顺序形成链表;对闭作用域,直接删除其中符号

image-20250101215123893

多符号表组织:构建作用域栈,每个作用域一个符号表;对闭作用域,将其弹出作用域栈,但不删除

image-20250101215206623