从正规式到NFA
正规式是对模式的形式化描述,DFA负责高效、优雅地识别这种模式。从正规式到最优DFA要走三步:构建NFA、NFA确定化、DFA最小化。
本节关注从正规式构造NFA的算法:Thompson。
在学习之前我们有必要把正规式和NFA两者的本质和关系理清。
正规式的作用:描述一个字符串模式。
NFA的作用:识别一个字符串模式。
两者关系:正规式负责生产,NFA负责验收。
1.正规式如何生产?
重点不是正规式如何生产,而是模式如何生产(正规式就是对模式的形式化描述嘛)。回想起形形色色的字符串,我们会发现这些字符串模式都有如下几个基本特征:基本成分为字符、下一个字符可以有多个选择、字符之间有连接。从这三个共有的基本特征我们可以提炼出:模式生产就是这三个基本特征的实体任意组合的过程。
那么换到正规式之后,我们也可以这样说:正规式生产就是基本正规式任意组合的过程(这是从非形式化到形式化的映射)。与基本特征对应的基本正规式包括:基本字符a(a代指任意字符)、字符或’|‘(做选择)、字符与’.’(连接)。
2.NFA如何验收?
验收是根据生产过程而来的,这可不是先有鸡还是先有蛋的问题,逻辑很清晰。既然这样,我们自然而然想到,可以先求出基本正规式的NFA——基本NFA,然后剩下的所有工作就是对基本NFA的组合了。基本NFA将在算法讲解部分介绍,注意我们还会介绍两个特殊的NFA:空字符E基本NFA(作状态的连接)、