抽象语法树问题

Hel*_*nar 4 c compiler-construction abstract-syntax-tree

我目前正在研究C下的编译器,我在构建AST数据结构的部分丢失了,特别是对于构建ID结构的部分,它被称为"符号表条目"

我看到网上的结构如:

struct ste {
  struct id   *name;  /* pointer into hash table for assoc. id */
  struct decl *decl;  /* pointer into symbol table for its decl */
  struct ste  *prev;  /* pointer to previous entry in symbol table */
}; 
Run Code Online (Sandbox Code Playgroud)

它看起来像一个链表,因为它包含一个指向前一个条目的指针(*prev)但这背后的逻辑是什么?

bma*_*ies 8

您具体问题的答案是:prev链接意味着,当您的代码具有指向其中一个节点的指针时,它可以跟随指向链中前一个链接的链接.符号表可能有这样的列表的一个原因是处理嵌套范围:

{
int x;
  {
   int x;
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,符号节点可能希望在列表中排列的原因还有很多其他原因.编译器需要访问所有节点的任何原因都是原因.