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

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


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

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

最佳答案

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

例如:

int i,j,k;

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

   ...
}


解析时,首先定义i jk,然后添加它们。然后,您将点击while语句,并为q rs定义“推送”。当while语句范围退出时,您可以“弹出” q rs等。

关于c - 如何建立不同词汇水平的符号表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4842972/

10-11 22:10
查看更多