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)但这背后的逻辑是什么?
您具体问题的答案是:prev链接意味着,当您的代码具有指向其中一个节点的指针时,它可以跟随指向链中前一个链接的链接.符号表可能有这样的列表的一个原因是处理嵌套范围:
{
int x;
{
int x;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,符号节点可能希望在列表中排列的原因还有很多其他原因.编译器需要访问所有节点的任何原因都是原因.