什么是表示作用域信息?


表示作用域信息是一个概念,其中每个变量名的作用域都保存在符号表中,以便我们可以在不同的块和不同的位置使用相同的名称。

表示作用域信息包括

  • 变量在特定块中的生命周期。
  • 在符号表中表示名称,以及它出现的块的指示符。
  • 假设我们在块 A 中有一个变量名“a”,在块 B 中有相同的变量。假设我们在符号表中存储“a”而没有块信息。在这种情况下,它只会保留它遇到的第一个“a”实例,因此为了克服此问题,名称以 (变量名,块名) 的形式存储,以便可以在不同的块和过程中使用相同的名称。
  • 作用域表示反映了变量名在源程序中的可见性。


在 FORTRAN 中表示作用域信息

  • FORTRAN 程序由主程序、子程序和函数组成。
  • 每个名称的作用域都包含一个例程,即变量的作用域限制在例程的末尾。
  • 它可以在到达例程末尾时为每个例程生成目标代码,因此需要消除存储在符号表中属于该特定例程的变量的名称。
  • 因此,我们需要在符号表中仅存储对例程外部和公共块的名称。


考虑如下所示的哈希方案:

在每个链中,对当前例程外部的名称将首先出现。

它可以将新的内部名称追加到末尾,并将新的外部名称追加到开头。

从上图可以清楚地看出,哈希值选择了名称 2,因此 2 是当前例程的一部分,而名称 1 对其外部,因此名称 1 写在开头,名称 2 追加到末尾。

当我们到达例程的末尾并为其生成目标代码时,我们将指针重置为可重用表中的可用存储,而不是永久存储。

从永久表到可重用表的所有指针都设置为 null,并且哈希表将直接指向可重用表。

我们还可以通过以下方式重用用于名称的存储空间。我们将使用名称链接存储区中的位置来表示名称,并且由于该区域被重用,因此这样的位置可以描述不同的例程。


更新于: 2021-11-08

2K+ 次查看

启动你的 职业生涯

通过完成课程获得认证

开始
广告