zhouqijie

词法分析器的作用

词法分析器的主要任务是读入源程序的输入字符,将它们组成词素,生成并输出一个词法单元序列,每个词法单元对应一个词素。

词法分析器通常还要和符号表进行交互。当词法分析器发现一个标识符的词素时,它要将这个词素添加到符号表中。

词法分析器可以分成两个级联的处理阶段:扫描阶段词法分析阶段

为什么要分词法分析和语法分析

  1. 最重要的考虑是简化编译器的设计。(例如如果语法分析器要将空白符和注释当作语法单元处理将会复杂得多)
  2. 提高编译器效率。
  3. 增强可移植性。(CRE:解耦合)

词法单元、模式、词素

词法单元:由一个词法单元名和一个可选属性值组成。
模式:描述了一个词法单元可能具有的形式。当词法单元是一个关键字时,它的模式就是组成这个关键字的字符序列。
词素:源程序中的一个字符序列,它和某个词法单元的模式匹配,并被词法分析器识别为该词法单元的一个实例。

词法单元 词素示例
if if
else else
comparison <=
id pi
number 3.14159
literal "core dumped"

词法单元类别:

  1. 每个关键字都有个词法单元。一个关键字的模式就是它本身。
  2. 表示运算符的词法单元。
  3. 一个表示所有标识符的词法单元。
  4. 一个或多个表示常量的词法单元。(数字和字面值字符串)
  5. 每个标点符号有一个词法单元。

词法单元的属性

词法分析器不仅向语法分析器返回一个词法单元名字,还会返回一个描述该词法单元的词素的属性值。

重要的例子是词法单元id,我们通常会将很多信息和它关联,这些都保存在符号表中。因此一个标识符的属性值是一个指向符号表条目的指针。

(END)