编译原理学习笔记(二)词法分析

词法分析的任务

词法分析是编译器中第一个模块,接收用户的输入(高级语言的源代码),生成一种内部的数据结构(记号流),交给下一个模块语法分析进行处理。

源代码被看成是字符流,词法分析分析这些字符,产生记号流,记号流是编译器内部定义的一种数据结构。

词法分析的实现方式

分为手工编码和自动生成方式。
手工编码即为整个分析器都自己手动编写,由于细节很多,实现起来较为复杂。
自动生成方式为通过词法分析器的生成器来自动生成词法分析的代码。代码量比手工编码小,但不容易控制细节。

自动生成

在自动生成的方式下,只需要输入一些声明式的规范,然后经过自动生成器,就可以产生词法分析器的代码。

声明式的规范使用正则表达式来描述。

词法分析器的代码使用有限状态自动机。分为确定有限状态自动机(DFA)和不确定有限状态自动机(NFA)。

整个流程是从正则表达式转化为NFA,NFA转化为DFA,DFA最小化,最后生成词法分析器的代码。

  • 正则表达式–>NFA:Thompson算法
  • NFA–>DFA:子集构造算法
  • DFA最小化:Hopcroft算法
  • DFA–>词法分析器代码:转移表、哈希表、跳转表
分享到