📜  范围信息

📅  最后修改于: 2020-12-06 07:36:47             🧑  作者: Mango

表示范围信息

在源程序中,每个名称都具有一个有效区域,称为该名称的范围。

块结构语言中的规则如下:

  • 如果在块B中声明了名称,则该名称仅在B中有效。
  • 如果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;
}

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