之前我们说词法分析器的自动生成器能够将声明式的规范(在这里我们用的是正则表达式)转化为自动机(DFA, NFA), 所以现在我们来看看在生成器的内部到底是如何工作的.这是对于该过程的概述 :

 

Thompson算法 : 从re到NFA

这个算法总结起来就两点 :

1. 对于基本的正则表达式直接构造

2. 对于复合的正则表达式递归构造

具体来看是这样的 (可以感受一下):

 

我们可以看到最后由(e1 e2)构造出来的自动机有4个状态, 那么为什么不用下面那个只有三个状态的的自动机呢(就是省略掉从e1接受状态到e2其实状态的空字符状态转移效果上其实是一致的), 但据说代码实现上上面的递归工整,而且更发符合图论算法...所以下面这个例子看起来可能会有点奇怪...(感觉很多多余的转换状态啊...)

 

 

最后是一道思考题 :

这个论断是否成立:由Thompson算法构造出来的任何一个NFA,均只可能包括唯一的起始状态和唯一的接受状态。

若成立,请给出证明;若不成立,请给出一个反例。

 

可以用数学归纳法证明...

 

posted on 2016-05-06 16:43  内脏坏了  阅读(212)  评论(0编辑  收藏  举报