**
正规集和正规式
**
也就是说程序设计语言的合法单词是 正规集,而正规式可以用来表示正规集
正规集是集合
正规式的等价可以转换为集合的等价来证明
将每一类的单词符号写成一个正规式,通过或运算将这些正规式连接起来就构整个单词表的正规式了,这样就可以讲词法描述出来了
有限自动机
一个DFA允许没有终止状态
状态转换函数,即 f(0,a) = 1,就是现在状态为0时,输入a则转换到1.
DFA也可以用来识别字符串
DFA很容易用二维数组进行表示
非确定有限自动机
DFA 之所以是确定的表现为 初态只有一个,而状态转移函数是单值的映射,但是非确定有限自动机的状态转换函数的映射是到一个集合,且初态任意
NFA弧上的字可以是正规式也可以是字,也可以是字符
接下来是一个证明(算法),证明DFA和NFA是等价的
根据定义可知道,DFA是NFA的一个特例
如果可以消去DFA和NFA在这三方面的差别,就可以将NFA变换成DFA
初态终态
如果原来的NFA有多个初态,那么X会射出多条弧到这些初态,同样,如果有多个终态,那么会射出多条弧到终态Y
弧上标记
NFA确定化
DFA化简
NFA易于人工设计,DFA易于程序实现。由于上面证明了DFA和NFA是等价的。如果DFA的状态越少,那么状态矩阵(二维数组)就越小。下面给出一个化简方法
也就是说I(i)输入字符a后可以达到的状态有一部分在m的一个子集中,另一部分在m的其他子集中。所以说,至少应该把I(i)划分为两个部分
确定有限自动机的化简
最开始划分为非终态和终态
然后针对I(1)开始检查,从I(1)里面状态(0,1,2)输入a到达1或者3状态,而1和3是在不同的子集中,所以I(1)要划分。
又,我们可以看出来 0和2识别a都到达1状态,所以0和2应该划分到一起。所以得到蓝色划分
继续上述
最终可以划分为4个子集
最后可以用3状态代替 4 5 6状态