编译方法、技术与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.1 词法分析

词法分析是编译的第一个步骤。词法分析器读入源程序的字符信息,将它们按照一定规则组成词素,并检查每一个词素是否符合词法规则。若所有词素均符合词法规则,词法分析器生成并输出词法单元流

程序设计语言通常只包含几种有限的词法单元类型,用于表示程序内部的变量、数据结构、运算符、控制流和表达式等。例如,对于我们使用的C--语言,源代码中有如下的赋值语句:

赋值语句中包含如下的词素:

int是一个词素,表示变量的类型,映射为词法单元TYPE

i是一个词素,表示一个变量,映射为词法单元ID

=是一个赋值运算符,表示赋值关系,映射为词法单元ASSIGNOP

123是一个词素,表示一个整数,映射为词法单元INT

是一个词素,表示一条语句的结束,映射为词法单元SEMI

于是,赋值语句所对应的词素可以组成如下的词法单元流:

每个词法单元都有对应的词法规则,如C--词法规则中,能够表示为词法单元INT的词素只包含一连串的数字,不能出现其他符号。词法分析器是一个有限状态机,当一个词素不满足当前程序设计语言的所有词法规则时,将输出词法错误报告。

同时,如果一个词素是一个变量,词法分析器会收集变量的符号属性(类型信息等),记录到一个符号表中,符号表中的条目可用于语义分析和中间代码生成。

在第2章中,我们将讨论以下内容:

●使用正则表达式描述词素模式,正则表达式能够精准高效地描述词法规则。

●使用有限状态自动机进行词法规则匹配。

●从NFA(非确定性有限状态自动机)到DFA(确定性有限状态自动机)的转换算法。

●状态最小化算法,最终设计构造一个简洁且高效的词法分析器。