表示范围信息

在源程序中, 每个名称都具有一个有效区域, 称为该名称的范围。
【表示范围信息】块结构语言中的规则如下:

  1. 如果在块B中声明了名称, 则该名称仅在B中有效。
  2. 如果B1块嵌套在B2内, 则对块B2有效的名称对B1也有效, 除非在B1中重新声明了名称的标识符。
  • 与名称和属性之间的关联列表相比, 这些作用域规则需要更复杂的符号表组织。
  • 表被组织成堆栈, 每个表包含名称及其相关属性的列表。
  • 每当输入新块时, 就会在堆栈中输入新表。新表包含此块声明为本地的名称。
  • 编译声明时, 将在表中搜索名称。
  • 如果在表中找不到该名称, 则会插入新名称。
  • 翻译名称的引用后, 将从堆栈中的每个表开始搜索每个表。
例如
int x; void f(int m) {float x, y; {int i, j; int u, v; }}int g (int n){bool t; }

表示范围信息

文章图片
图:符合静态范围信息规则的符号表组织

    推荐阅读