在编程语言中分为支持嵌套过程(如Pascal)和不支持嵌套过程(如C)
支持过程嵌套声明的语言:一个过程除了使用自身定义的局部数据和全局定义的数据以外,还可以使用外围过程中声明的对象
不支持嵌套声明的语言:过程中要么是使用局部数据,要么是使用全局数据
符号表特别是对于“使用外围过程中声明的对象”有很大的帮助的。
全局变量被分配在静态存储区,使用静态确定的地址可以访问他们
其他变量是局部变量,通过栈顶指针指针访问
静态作用域规则:只要过程a的声明嵌套在过程a的声明中,过程b就可以放额外你过程a中声明的对象
可以在相互嵌套的过程的活动记录间建立一种称为访问链指针,使其可访问(外层可直接访问内层,内层访问外层用访问链)
访问链一般在控制链上面
符号表
为每个作用域(程序块)建立一个独立的符号表,符号表与编译时是对应的,一个过程的非局部名字的信息可以通过扫描过程的符号表而得到(找非局部变量)
即
标识符。当在某一层的声明语句中识别出一个标识符(id的定义性出现)时,以此标识符相应于本层的符号表,如果查到,则报错“id重复”
当在执行语句的时候扫视到标识符,本层差不多就通过符号表去外层找