在词法分析器中使用怎么样的算法和数据结构是我们的主要研究内容。
词法分析器的实现方法
- 手工编码实现法
- 相对复杂,且容易出错
- 当能够对各个部分进行相当好的控制,效率高
- 是目前非常流行的实现方法
- GCC, LLVM,...
- 是目前非常流行的实现方法
- 词法分析器的生成器
- 可快速原型、代码量少
- 但较难控制细节
如下是手工编码分析常用的转移图:
其中双圆圈表示接收/识别状态,一个单词的识别已经结束。
下面给出一个转移图算法的例子:
token
token
识别关键字
(以 if 为例),有如下两种方法:
对于 标识符 和 关键字 其实是有很大的交集的:
- 从语法分析的角度看,关键字是标识符的一部分
- 以C语言为例:
- 标识符:以字母或下划线开头,后面跟零个或者多个字母、下划线、或数字。
- 关键字:if, while, else, ....
关键字表算法
- 对给定语言中所有的关键字,构架关键字构成的哈希表H
- 对所有的标识符和关键字,先统一按标识符的转移图进行识别
- 识别完成后,进一步查表H看是否是关键字
- 通过合理的构造哈希表H(完美哈希),可以O(1)时间完成
原文链接:
- 编译原理 - 网易云课堂