【问题标题】:Is there a symbol table for local variables stored within a stack frame?是否有存储在堆栈帧中的局部变量的符号表?
【发布时间】:2019-06-07 15:19:14
【问题描述】:

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

【问题讨论】:

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

标签: compiler-construction symbol-table stack-frame


【解决方案1】:

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

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

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

许多调试器更像是解释器,即使您正在制作编译器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2022-12-20
    • 1970-01-01
    • 2017-11-05
    • 2015-04-18
    相关资源
    最近更新 更多