词法分析器
前言:
- 词法分析是编译的第一阶段。它的含义是当程序进入编译器的时候首先是词法分析去分析它。也就可以得出词法分析器的主要任务。
词法分析器的主要任务:
- 读入源程序的输入字符(比如说C语言程序的
#
)、将它们组成词素, 生成并输出一个词法单元序列, 每个词法单元对应于一个词素。下一步就是进行语法分析(这不是本文章讨论的内容了), 这个词法单元序列被输出到语法分析器进行语法分析。
词法分析器的其他任务:
- 过滤掉源程序中的注释和空白(例如: 空格、换行符、制表符以及在输入中用于分隔词法单元的其他字符);
- 编译器生成的错误消息与源程序的位置联系起来。
- 词法分析器可以负责记录遇到的换行符的个数,以便给每个出错消息一个行号。在某些编译器中,词法分析器会建立源程序的一个拷贝,并将出错信息插入到适当位置。如果源程序使用了一个宏预处理器,则宏的扩展也可以由词法分析器完成。
词法分析器的处理阶段:
-
有的时候,词法分析器可以分成两个级联的处理阶段:
- 扫描阶段主要负责完成一些不需要生成词法单元的简单处理,比如删除注释和将多个连续的空白字符压缩成一个字符。
- 词法分析阶段是较为复杂的部分,它处理扫描阶段的输出并生成词法单元。
词法单元、模式和词素:
词法单元:
- 词法单元由一个词法单元名和一个可选的属性值组成。词法单元名是一个表示某种词法单位的抽象符号,比如一个特定的关键字,或者代表一个标识符的输入字符序列。词法单元名字是由语法分析器处理的输入符号。
- 模式描述了一个词法单元的词素可能具有的形式。当词法单元是一个关键字时,它的模式就是组成这个关键字的字符序列。对于标识和其他词法单元,模式是一个更加复杂的结构,它可以和很多符号串匹配。
- 词素是源程序中的一个字符序列,它和某个词法单元的模式匹配,并被词法分析器识别为该词法单元的一个实例。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。