解析器或词法分析器是否生成符号表?

Chr*_*yer 3 compiler-construction parsing lexical-analysis

我正在参加编译器课程,而且我正在重新编写介绍.它概述了编译器过程的工作原理.

不过我有点困惑.

在我的课程中,它指出:"此外,词法分析器通常会访问符号表以存储/获取有关某些源语言概念的信息".因此,这让我相信词法分析器实际上会构建一个符号表.我看到它的方式是他创建令牌并将最小值存储在一个表中并说明它是什么类型的符号.例如,像"x - > VARIABLE".

然后再次,当阅读谷歌点击时,我似乎只能找到关于解析器生成这个事实的模糊信息?但解析阶段是在词法分析阶段之后.所以我有点困惑.

符号表解析后的人口; 编译器构建 (解析器填充表的状态)

http://www.cs.dartmouth.edu/~mckeeman/cs48/mxcom/doc/Symbols.html 说"符号表是通过遍历语法树构建的." 语法树是由解析器生成的,对吧?(解析树).那么在解析器之前运行的词法分析器如何使用此符号表呢?

我理解词法分析器不能知道变量的范围以及符号tabe中包含的其他信息.因此我理解解析器会将此信息添加到表中.但是,词法分析器确实知道一个单词是变量,声明关键字等.因此它应该能够构建一个部分(?)符号表.也许它们可能是每个构建符号表的一部分?

500*_*ror 8

我认为部分混淆源于这样一个事实:"符号表"对不同的人来说意味着不同的东西,并且可能在编译过程的不同阶段.

通常认为词法分析器将输入流分成标记(有时称为词位或终端).正如您所说,这些可以分类为不同的类型,数字,关键字,标识符,标点符号等.

词法分析器可以将识别的标识符标记存储在符号表中,但由于词法分析器通常不知道标识符表示什么,并且由于相同的标识符可能意味着不同编译范围中的不同内容,因此通常是解析器 - 其具有更多上下文知识 - 负责构建符号表.

然而,在一些编译器设计中,词法分析器只是构建一个令牌列表,它被传递给解析器(或者解析器根据需要从输入流请求令牌),然后解析器生成一个解析树(或者有时候是一个抽象树)语法树)作为输出,然后只有在通过遍历解析树完成某个编译单元的解析后才构建符号表.

许多不同的设计是可能的.