【问题标题】:What data is stored in the symbol table for a number lexeme?数字词位的符号表中存储了哪些数据?
【发布时间】:2014-02-12 07:10:55
【问题描述】:

我正在阅读龙书。我只是一个试图理解基本知识的初学者。在第 113 页我可以看到以下语句(下划线)

据我了解,符号表存储变量名称和一些细节,如类型、范围等。所以词法分析器找到了一个字符 0,它与数字的模式匹配,所以它使用 tokenname 编号,因此 token 变为 <number,attrb> 。 根据我上面提到的sn-p,我不明白数字的符号表中存储了哪些数据,符号表中存储的数字的值是什么?

编辑:

在上面的截图中,令牌编号被赋予了一个整数属性。您可以看到它提到 stored ,如果不在符号表中,它究竟存储在哪里?它是否将字符串存储在某个地方并使用符号表中的属性条目来指向它?如果那么字符串存储在哪里?

【问题讨论】:

  • 谁说它将任何东西存储在符号表中,具体来说?
  • 根据您的理解,词法分析器将返回类似 (number, 0) 的值。它是一个“数字”.. 它的“值”为 0。相反,对于关键字,它可能返回 (if) 和标识符 (ident,"a")。在这个 lexing 阶段,通常/希望 - 没有“符号表”。继续阅读:)
  • @Damien_The_Unbeliever 查看编辑
  • @user2864740 请看编辑
  • 从您的编辑中,您会注意到<id,... 的标记都涉及符号表条目,但数字的标记没有。

标签: compiler-construction token tokenize lexical-analysis


【解决方案1】:

令牌不需要存储在符号表中。您通常只会存储稍后需要引用的令牌。

在您的示例 3.2 中,变量 E、M 和 C 存储在符号表中,因为它们是您以后可能会引用的变量。 E将例如与其变量类型一起存储在符号表中。数字“2”仅在该特定表达式中使用,因此没有必要将其存储在符号表中。

因此,“数字词位”的符号表条目将取决于它在源中的出现。考虑这个for循环:

for (int i = 0;  i < 10;  i++) { }

变量 i 将与条目符号名称、类型和范围一起存储在符号表中,其中包含“i”、“int”和“for-loop statement”的值。但是,包含数字“0”、“;”、“

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 2011-02-09
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多