编译原理:构造最小化DFA M
DFA,全称是Deterministic Finite Automaton,即确定有穷自动机;还有一种叫NFA,全称Nondeterministic Finite Automata,即非确定有限自动机。
如何由正则表达式转换成DFA呢?—>转换系统:一个具有唯一开始状态S和唯一最终状态Z的一个NFA—>再转化成DFA
下面是一些正规表达式对应的转化系统
化简确定的有穷自动机步骤
1.将DFA M的状态集Q分成两个子集:终态集F和非终态集﹣F,形成初始分划∏。
2.对∏使用如下方法建立新分划∏NEW:
对∏的每个状态子集G:
(1)把G分划成新的子集,使得G的两个状态s和t属于同一子集,当且仅当对任何输入符号a,状态s和t转换到的状态都属于∏的同一子集。 (2)用G分划出的所有新子集替换G,形成新的分划∏NEW;
3.如果∏NEW=∏,则执行第四步;否则令∏=∏NEW,重复第二步。
4.分划结束后,对分划中的每个状态子集,选出一个状态作代表,而删去其它一切等价的状态,并把射向其它状态的箭弧改为射向这个作为代表的状态。
下面通过一道例题讲述如何构造最小化DFA M
题:设字母表∑={a,b},给出∑的正规式R=b*ab(b|ab)*
1.试构造状态最小化DFA M,使得L(M)=L®
2.求右线性文法使得L(G)=L(M)
(1)解:
1)首先根据正规式,和正规式对应的转化系统构造出NFA
2)NFA—>DFA
I | Ia | Ib | |
---|---|---|---|
1 | {S,3,1} | {4} | {3,1} |
2 | {4} | Ø | {2,5,Z} |
3 | {3,1} | {4} | {3,1} |
4 | {2,5,Z} | {6} | {5,Z} |
5 | {6} | Ø | {5,Z} |
6 | {5,Z} | {6} | {5,Z} |
Ia,Ib判断,第一次经过路径必须是a(b)其次是全为ε的路径,然后再对里面的每个字符依次进行判断
I的判断,从开始符号一直经过ε的路径
通过表格构建出DFA图(对应)
(终结状态判断是该子集I中含有终结字符,本题中4,6的子集I中含有终结字符Z,所以是终结状态)
3)DFA最小化
∏={{1,2,3,5},{4,6}}
{1,2,3,5}a={2,Ø,2,Ø} #Ø不属于上一个∏的任何一个子集中所有可以将{2,5}重新划分子集构建∏NEW
∏={{1,3},{2,5},{4,6}}
{1,3}a={2} {1,3}b={3} {2,5}a=Ø {2,5}b={4,6} #{4,6}属于同一子集不需要划分新子集)
{4,6}a={5} {4,6}b={6}
画出图表(表中将子集简化将{1,3}写成1,以此类推)
(2)解:
由于初始状态只有箭弧引出、无箭弧引入,终止状态只有箭弧引入、没有箭弧引出,所有对于上述4我们需要稍微改进一下,引入另一个终结符号Z为终止状态,并且通过ε链接C*(为方便书写此处将1,2,4替换成A,B,C)*和Z因此该题的右线性文法为
定义:
A—>bA|aB
B—>bC
C—>aB|bC|ε
推导:
A—>bA|aB
B—>bC
C—>aB|bC|b