之前我们说词法分析器的自动生成器能够将声明式的规范(在这里我们用的是正则表达式)转化为自动机(DFA, NFA), 所以现在我们来看看在生成器的内部到底是如何工作的.这是对于该过程的概述 :
Thompson算法 : 从re到NFA
这个算法总结起来就两点 :
1. 对于基本的正则表达式直接构造
2. 对于复合的正则表达式递归构造
具体来看是这样的 (可以感受一下):
我们可以看到最后由(e1 e2)构造出来的自动机有4个状态, 那么为什么不用下面那个只有三个状态的的自动机呢(就是省略掉从e1接受状态到e2其实状态的空字符状态转移效果上其实是一致的), 但据说代码实现上上面的递归工整,而且更发符合图论算法...所以下面这个例子看起来可能会有点奇怪...(感觉很多多余的转换状态啊...)
最后是一道思考题 :
这个论断是否成立:由Thompson算法构造出来的任何一个NFA,均只可能包括唯一的起始状态和唯一的接受状态。
若成立,请给出证明;若不成立,请给出一个反例。
可以用数学归纳法证明...