【问题标题】:How to build symbol tables for different lexical levels?如何为不同的词汇级别构建符号表?
【发布时间】:2011-01-30 12:51:52
【问题描述】:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

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

例如:

int i,j,k;

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

   ...
}

在解析此内容时,您首先要定义 i jk,然后添加它们。然后你会点击 while 语句,并“推送”q rs 的定义。当 while 语句范围退出时,您将“弹出”q rs 等。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 2016-04-13
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多