符号表中存储了哪些数据用于数字lexeme?

时间:2014-02-12 07:10:56

标签: compiler-construction token tokenize lexical-analysis

我正在读龙书。我只是一个初学者试图理解基本的东西。我可以看到以下声明(带下划线)

enter image description here

根据我的理解,符号表存储变量名称和类型,范围等一些细节。因此,Lexical分析器找到字符0,它匹配数字的模式,因此它使用 tokenname number,因此令牌变为<number,attrb>。 根据我上面提到的片段,我不明白数字的符号表中存储了什么数据,是符号表中存储的数字的值?

修改

enter image description here

在上面的剪辑中,令牌编号被赋予一个整数属性。你可以看到它提到 存储 ,如果没有在符号表中,那么它究竟存储在哪里?它是否将字符串存储在某处并使用符号表中的属性条目指向它?如果那么存储了字符串在哪里?

1 个答案:

答案 0 :(得分:2)

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

在您的示例3.2中,变量E,M和C存储在符号表中,因为它们是您稍后可能引用的变量。 E将例如存储在符号表中,其变量类型。数字“2”仅在该特定表达式中使用,因此无需将其存储在符号表中。

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

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

变量i将存储在符号表中,其中包含条目符号名称,类型和范围,包含“i”,“int”和“for-loop语句”的值。包含数字“0”,“;”,“&lt;”的标记然而,“10”不需要在以后引用,因此您不会将其存储在符号表中。