是否有符号 table 用于存储在堆栈帧中的局部变量?
Is there a symbol table for local variables stored within a stack frame?
从逻辑上讲,我认为必须存在。如果我是正确的,我还假设它与全局符号 table 分开,并且它由编译器在到达函数调用时创建并在编译器到达被调用函数的末尾时删除。我还假设在符号 table 内,变量位置将存储为堆栈基指针的相对偏移量。出于好奇并参考所有符号 tables,是存储在符号 table 条目中的变量的显式长度,还是存储的变量类型(可以从中推断长度),或者两者兼而有之?
虽然,每个项目的编译器,可能与另一个不同,包括调试器和符号table操作,一种可能的解决方案,它是使用AST树作为分层符号table。
每个树节点存储一个符号,在某些情况下,比如一个函数,存储下属符号作为局部参数,和局部变量。
每个树节点,可以存储每个符号的附加信息,如源代码文件、声明位置、行号和行号、变量或常量的文本以及当前内存位置。
许多调试器更像一个解释器,即使你正在制作一个编译器。
从逻辑上讲,我认为必须存在。如果我是正确的,我还假设它与全局符号 table 分开,并且它由编译器在到达函数调用时创建并在编译器到达被调用函数的末尾时删除。我还假设在符号 table 内,变量位置将存储为堆栈基指针的相对偏移量。出于好奇并参考所有符号 tables,是存储在符号 table 条目中的变量的显式长度,还是存储的变量类型(可以从中推断长度),或者两者兼而有之?
虽然,每个项目的编译器,可能与另一个不同,包括调试器和符号table操作,一种可能的解决方案,它是使用AST树作为分层符号table。
每个树节点存储一个符号,在某些情况下,比如一个函数,存储下属符号作为局部参数,和局部变量。
每个树节点,可以存储每个符号的附加信息,如源代码文件、声明位置、行号和行号、变量或常量的文本以及当前内存位置。
许多调试器更像一个解释器,即使你正在制作一个编译器。