我正在为类似C的语言构建编译器。我已经完成了词法分析器和解析器。现在,我正在尝试进行语义分析并试图建立符号表。
现在,根据规范,在相同的词汇级别上不允许重复声明。这需要为每个词汇级别构建不同的符号表,对吗?我该怎么做呢?
到目前为止,我拥有的一个符号表是一棵二叉树的形式,其中每个节点如下所示:
struct tree_el
{
char *identifier;
char *type;
struct tree_el *right, *left;
}
如何将特定节点指向另一棵树的“根”节点?
任何帮助都会很棒!非常感谢。
最佳答案
通常,这是通过类似堆栈的结构完成的:启动时,每个“词汇级别”都会在堆栈上打开,并在遇到其他级别时将其推入。
例如:
int i,j,k;
while (i) {
int q, r, s;
...
}
解析时,首先定义
i
j
和k
,然后添加它们。然后,您将点击while语句,并为q
r
和s
定义“推送”。当while语句范围退出时,您可以“弹出” q
r
和s
等。关于c - 如何建立不同词汇水平的符号表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4842972/