符号表和作用域

symbol tables and scope

对于下面的代码,我试图为每个作用域绘制符号表。作用域是全局的、f1、else 和 f2。我想知道对于 f2,x 是否会被视为该作用域的符号。另外,f1(5) 是否与任何符号表相关联?

int x = 3;
int f1(int x) {
    if (x > 4)
        f1(x-1);
    else { 
        int x = 1; f2();
    } 
}
int f2() {
    print x; 
}
f1(5);

使用关于作用域和变量声明的一些一般假设。

  1. 并非如此。符号仅在声明时添加到符号 table 中。由于您只使用 x,因此不会将其添加到任何 table。所以你的问题有点没有意义。您的编译器会遇到符号 x 的使用,并在符号 table 中查找它。它将在全局范围内被发现为 x

  2. f1(5) 并不真正与任何符号 table 相关联。由于您正在进行函数调用,因此您必须查找 f1 以确保它存在(并且参数 numbers/types 匹配)。你会在全局作用域的符号 table 中找到 f1 因为它在使用之前已经被定义了(另外,由于此时的代码只有一个作用域,全局,所以只有一个table 看看)。所以 f1(5) 只有在你会发现 f1 符号和符号 table.

  3. 中的参数信息的事实中关联