2014-02-12 53 views
0

即时阅读的龙书 .IM只是一个初学者想了解基本stuff.On第113页,我可以看到下面的语句(下划线)符号表中为数字词位存储了什么数据?

enter image description here

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

编辑:

enter image description here

在上面的令牌数量剪断给出一个整数attribute.And你可以看到它提存储,到底在哪此存储如果不是在符号表?它是否将字符串存储在某处并使用符号表中的属性条目指向它?如果那么字符串存储在哪里?

+0

谁说它在*符号表*中存储*任何*,具体是? –

+0

根据你的理解,词法分析器会返回一个类似'(number,0)'的值。它是一个“数字”,它具有“值”0.相反,对于一个关键字,它可能会返回'(if)'和一个标识符'(ident,“a”)'。在这个* lexing *阶段有 - 通常/有希望 - 没有“符号表”。请继续阅读:) – user2864740

+0

@Damien_The_Unbeliever查看编辑 – techno

回答

2

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

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

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

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

我会被存储在与项目符号的名称,类型和范围符号表中的变量,保存了“我”,“诚信”和”循环语句的值“。但是,包含数字“0”,“;”,“<”和“10”的令牌不需要在稍后引用,因此您不会将其存储在符号表中。

相关问题