词法分析器的输入是源程序字符串,源程序由程序设计语言的单词构成,单词是程序设计语言不可分割的最小单位。因此,词法分析程序的基本功能是从左至右逐个字符地对源程序进行扫描,按照语言的定义规则,将字符拼接成单词。每当识别出一个单词,就产生其种别码,把由字符串构成的源程序改造成单词符号串的中间形式,提交给语法分析程序使用。
此外,词法分析器还要对源程序进行预处理工作,包括过滤掉源程序中的无用成分,如注释、空格、换行等不影响程序语法、语义的结构。这些部分只是有助于源程序的阅读,对生成目标代码无用。另外,在词法分析阶段还要对源程序中出现的非法符号及违反构词规则的单词进行检查。所谓非法符号是指程序设计语言中不允许出现的符号,就像自然语言中的错字。有些编译程序在词法分析阶段就建立符号表,用于记录源程序中的标识符和常数的信息,包括名称、各种属性等。对符号表的操作主要是填表、查询和更新。每当词法分析器识别出一个标识符的时候,第一项工作就是查符号表,若不在符号中则将其填入符号表。
在编译程序中,词法分析器主要有两种实现模式:
词法分析器输入输出
(1)完全独立模式。词法分析器作为编译程序的子系统独立地运行一遍,扫描整个源程序,把识别出的单词使用统一的记号序列输出到中间文件,作为语法分析程序的输入。这样做的好处是,使得编译程序结构清晰、条理化,而且便于高效地实现,增强了编译程序的可移植性。(www.xing528.com)
(2)相对独立模式。词法分析程序作为语法分析程序的子程序,每当语法分析程序需要一个单词时,就调用该子程序。词法分析程序每得到一次调用,就从源程序文件中读入若干个字符,返回一个单词符号给语法分析程序。这种方法使词法分析和语法分析在同一遍中执行,避免了中间文件,省去了存取符号文件的工作,有利于提高编译程序的效率。
本书实现的L语言的词法分析程序采用第一种实现方式,作为独立的一遍来处理。
词法分析器的两种工作模式
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。