本节书摘来自华章出版社《编译与反编译技术》一书中的第2章,第2.4节正规式和有穷自动机的等价性,作者庞建民,陶红伟,刘晓楠,岳峰,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2.4 正规式和有穷自动机的等价性
正规式和有穷自动机的等价性可以从下面两个方面来说明:
1)对∑上任何NFA M,都存在∑上一个正规式r,使得L(r)=L(M)。
2)对∑上任何正规式r,都存在∑上一个NFA M,使得L(M)=L(r)。
首先介绍如何将∑上的NFA M,转为∑上一个等价的正规式r。在未给出具体的转化算法之前先对状态转换图概念进行拓广,令每条弧可用一个正规式作标记。由有穷自动机构造等价的正规式的算法见算法2.7。
算法2.7 由有穷自动机构造等价的正规式
输入:一个NFA M=(Q,∑,δ,q0,F)
输出:与NFA M等价的∑上一个正规式r
步骤:
1.在M的转换图上加进两个新状态X和Y,从X用ε弧连接到M的初态结点,从M的所有终态结点用ε弧连接到Y,从而形成一个新的NFA,记为M',它只有一个初态X和一个终态Y,显然L(M)=L(M')。
2.反复使用如图2-18所示的合并规则,逐步消去M'的所有结点,直到只剩下X和Y为止。
3.最后,X到Y的弧上标记的正规式即为所构造的正规式r。
例2.26 已知一个NFA M所对应的状态转换图如图2-19所示,试利用算法2.7构造与该自动机等价的正规式。
解:由算法2.7的第1步,在M的转换图上加进两个新状态X和Y,并分别用ε弧将X与M的初态结点,将M的所有终态结点与Y连接,从而形成一个新的NFA,其状态转化图如图2-20所示。
图2-19 例2.26中有穷自动机 图2-20 利用算法2.7第1步计算后的结果
所对应的状态转换图
利用算法2.7第2步中的第2条合并规则对图2-20中的转换图进行合并,可以得到如图2-21所示结果。
再反复利用算法2.7第2步中的第1条合并规则对图2-21中的转换图进行合并,可以得到如图2-22所示结果。
图2-21 利用算法2.7第2步中的 图2-22 利用算法2.7第2步的
第2条合并规则后的结果 第1条合并规则后的结果
由算法2.7的第3步可知,(letter|_)(letter|_|digit)*即为最终所求的正规式。
下面介绍将正规式转换为等价的有限自动机的算法,具体见算法2.8。
算法2.8 由正规式构造等价的有穷自动机
输入:∑上的一个正规式r
输出:与r等价的NFA M
步骤:
1.首先,将正规式r表示成如图2-23所示的拓广转换图。
2.按照图2-24所示的分裂规则对正规式r进行分裂。
3.重复步骤2直到每条弧只标记为∑上的一个字符或ε,此时得到转换图所对应的
NFA M即为所求。
例2.27 设有正规表达式(letter|_)(letter|_|digit)*,试利用算法2.8构造与之等价的NFA。
解:由算法2.8的第1步,为正规式(letter|_)(letter|_|digit)*构造拓广转换图,如图2-25所示。
利用算法2.8第2步中的第1条分裂规则对图2-25中的转换图进行分裂,可以得到如
图2-26所示结果。
利用算法2.8第2步中的第2条和第3条分裂规则对图2-26中的转换图进行分裂,可以得到如图2-27所示结果。
再利用算法2.8第2步中的第2条分裂规则对图2-27中的转换图进行分裂,可以得到如图2-28所示结果。由算法2.8的第3步可知,图2-28所对应的NFA即为所求。
图2-24 分裂规则
图2-25 (letter|_)(letter|_|digit)*的拓广转换图 图2-26 利用算法2.8第2步
的第1条分裂规则后的结果
图2-27 利用算法2.8第2步的第2条和 图2-28 与(letter|_)(letter|_|digit)*
第3条分裂规则后的结果 等价的NFA所对应的状态图