作为从被人类理解的文本,到被计算机理解的文本的第一步,词法分析可通过扫描程序将源程序读入,并进行理解和分割为若干记号。由于扫描程序是格式匹配的一种特殊情况,所以需要研究在扫描过程中的格式说明和识别方法,其中最主要的就是正则表达式和有穷自动机。
词法分析的通常做法是:
1. 写出各类记号的正则表达式。
2. 根据正则表达式构造NFA。
3. 将NFA转为DFA。
4. 根据DFA就可以实现词法分析器。
下面根据C-Minus的词法来构造一个词法分析器。
以ID|NUM为例
首先写出ID和NUM的正则表达式
ID = letter letter*
NUM = digit digit*
letter = [a-zA-Z]
digit = [0-9]
然后利用Thompson结构将正则表达式ID|NUM转换为NFA。
首先构造letter和digit构建机器
接着构造ID和NUM的构建机器
最后构造ID|NUM的NFA
接着再利用子集构造将生成的NFA转换为DFA
最后根据DFA写出程序
利用子集构造模拟NFA
最小化DFA的状态数量
来源:http://www.cnblogs.com/cwblaze/archive/2010/01/28/1658109.html