- 编译器包含两种类型的符号表:全局符号表和作用域符号表。
- 全局符号表可以由所有过程和作用域符号表访问。
名称和符号表的范围按层次结构排列, 如下所示:
int value=10;
void sum_num()
{
int num_1;
int num_2;
{
int num_3;
int num_4;
}
int num_5;
{
int_num 6;
int_num 7;
}
}
Void sum_id
{
int id_1;
int id_2;
{
int id_3;
int id_4;
}
int num_5;
}
上面的语法可以用符号表的分层数据结构表示:
全局符号表包含一个全局变量和两个过程名称。 sum_num表中提到的名称不适用于sum_id及其子表。
符号表的数据结构层次结构存储在语义分析器中。如果要在符号表中搜索名称, 则可以使用以下算法进行搜索:
- 首先, 在当前符号表中搜索符号。
- 如果找到该名称, 则搜索完成, 否则将在父代的符号表中搜索该名称, 直到,
- 找到名称或搜索全局符号。
评论前必须登录!
注册