如何为不同的词汇级别构建符号表?

时间:2011-01-30 12:51:52

标签: c compiler-construction binary-tree compiler-theory symbol-tables

我正在为类C语言构建编译器。我对词法分析器和解析器做了一些工作。现在,我正在尝试进行语义分析,并尝试构建符号表。 现在,根据规范,不允许在相同的词法级别重复声明。这需要为每个词汇级别构建一个不同的符号表,对吧?我该怎么做呢? 截至目前,我所拥有的一个符号表是二叉树形式,其中每个节点如下所示:

struct tree_el
{
    char *identifier;
    char *type;
    struct tree_el *right, *left;
}

如何将特定节点指向另一棵树的“根”节点?

任何帮助都会很棒!非常感谢。

2 个答案:

答案 0 :(得分:1)

通常,这是通过类似堆栈的结构完成的:每个“词法级别”在启动时在堆栈上打开,并且在遇到它们时会推送其他级别。

例如:

int i,j,k;

while (i) {
   int q, r, s;

   ...
}

在解析此问题时,您首先要定义i jk,然后添加这些定义。然后,您点击了while语句,并“推送”q rs的定义。当while语句范围退出时,您将“弹出”q rs等。

答案 1 :(得分:0)

每个词法范围都需要一个单独的符号树,它只包含在该范围内直接定义的符号。查找符号时,首先查看最深的包含范围,然后查看父范围,依此类推,直到达到文件范围。