Compiler construction 堆栈框架中是否有存储局部变量的符号表?

Compiler construction 堆栈框架中是否有存储局部变量的符号表?,compiler-construction,symbol-table,stack-frame,Compiler Construction,Symbol Table,Stack Frame,从逻辑上讲,我认为一定会有。如果我是正确的,我还假设它与全局符号表分离,并且它是在函数调用到达时由编译器创建的,在编译器到达被调用函数的末尾时被删除。我还假设在符号表中,变量位置将存储为相对于堆栈基指针的相对偏移量。出于好奇并参考所有符号表,是存储在符号表条目中的变量的显式长度,还是存储的变量类型(从中可以推断长度),或者两者都是?尽管每个项编译器的工作方式可能不同,包括调试器和符号表操作,一种可能的解决方案是使用AST树作为分层符号表 每个树节点存储一个符号,在某些情况下,例如函数,将从属符号

从逻辑上讲,我认为一定会有。如果我是正确的,我还假设它与全局符号表分离,并且它是在函数调用到达时由编译器创建的,在编译器到达被调用函数的末尾时被删除。我还假设在符号表中,变量位置将存储为相对于堆栈基指针的相对偏移量。出于好奇并参考所有符号表,是存储在符号表条目中的变量的显式长度,还是存储的变量类型(从中可以推断长度),或者两者都是?

尽管每个项编译器的工作方式可能不同,包括调试器和符号表操作,一种可能的解决方案是使用AST树作为分层符号表

每个树节点存储一个符号,在某些情况下,例如函数,将从属符号存储为局部参数和局部变量

每个树节点可以存储每个符号的附加信息,如声明符号的源代码文件、行号和行号、变量或常量的文本以及当前内存位置


许多debbuger的工作方式更像一个解释器,即使你正在制作一个编译器。

这些都是特定编译器的实现细节,因此没有一个简单的答案。你有很多问题,也许你应该改进。我认为更好的问题可能是这样一个符号表是否可以传递给调试器。我在调试器中的一个更进一步的目标是。@同样的答案也适用于不同的调试器,不同的调试器中,除错器与符号表的交互方式各不相同1。所有变量都在符号表中。2.它不一定是分开的。3.是,将存储偏移量。4.取决于编译器,但它是我的,我只存储类型,不重复长度信息。