什么是表示作用域信息?
表示作用域信息是一个概念,其中每个变量名的作用域都保存在符号表中,以便我们可以在不同的块和不同的位置使用相同的名称。
表示作用域信息包括
- 变量在特定块中的生命周期。
- 在符号表中表示名称,以及它出现的块的指示符。
- 假设我们在块 A 中有一个变量名“a”,在块 B 中有相同的变量。假设我们在符号表中存储“a”而没有块信息。在这种情况下,它只会保留它遇到的第一个“a”实例,因此为了克服此问题,名称以 (变量名,块名) 的形式存储,以便可以在不同的块和过程中使用相同的名称。
- 作用域表示反映了变量名在源程序中的可见性。
在 FORTRAN 中表示作用域信息
- FORTRAN 程序由主程序、子程序和函数组成。
- 每个名称的作用域都包含一个例程,即变量的作用域限制在例程的末尾。
- 它可以在到达例程末尾时为每个例程生成目标代码,因此需要消除存储在符号表中属于该特定例程的变量的名称。
- 因此,我们需要在符号表中仅存储对例程外部和公共块的名称。
考虑如下所示的哈希方案:
在每个链中,对当前例程外部的名称将首先出现。
它可以将新的内部名称追加到末尾,并将新的外部名称追加到开头。
从上图可以清楚地看出,哈希值选择了名称 2,因此 2 是当前例程的一部分,而名称 1 对其外部,因此名称 1 写在开头,名称 2 追加到末尾。
当我们到达例程的末尾并为其生成目标代码时,我们将指针重置为可重用表中的可用存储,而不是永久存储。
从永久表到可重用表的所有指针都设置为 null,并且哈希表将直接指向可重用表。
我们还可以通过以下方式重用用于名称的存储空间。我们将使用名称链接存储区中的位置来表示名称,并且由于该区域被重用,因此这样的位置可以描述不同的例程。
广告