从逻辑上讲,我认为必须存在。如果不是正确的话,我还假定它与全局符号表是分开的,并且它是由编译器在到达函数调用时创建的,并在编译器到达被调用函数的末尾时删除的。我还要假设在符号表中,变量位置将被存储为相对于堆栈基指针的相对偏移量。出于好奇并参考所有符号表,是在符号表条目中存储变量的显式长度,还是存储变量类型(可以从中推断出长度),或者两者都存储?
答案 0 :(得分:0)
尽管每个项目编译器的工作方式可能都不相同,包括调试器和符号表操作,这是一种可能的解决方案,但它是将AST树用作分层符号表。
在某些情况下,每个树节点都存储一个符号,例如函数,将下级符号存储为局部参数和局部变量。
每个树节点可能会存储每个符号的附加信息,例如声明它的源代码文件,行和行号,变量或常量的文本以及当前的存储位置。
即使您正在编写编译器,许多调试器的工作也更像解释器。