收藏 分享(赏)

有限状态自动机的确定化.doc

上传人:HR专家 文档编号:7295990 上传时间:2019-05-14 格式:DOC 页数:10 大小:76KB
下载 相关 举报
有限状态自动机的确定化.doc_第1页
第1页 / 共10页
有限状态自动机的确定化.doc_第2页
第2页 / 共10页
有限状态自动机的确定化.doc_第3页
第3页 / 共10页
有限状态自动机的确定化.doc_第4页
第4页 / 共10页
有限状态自动机的确定化.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、有限状态自动机的确定化姓名:翟彦清 学号:E10914127一、实验目的设计并实现将 NFA 确定化为 DFA 的子集构造算法,从而更好地理解有限自动机之间的等价性,掌握词法分析器自动产生器的构造技术。该算法也是构造 LR 分析器的基础。输入: 非确定有限(穷)状态自动机。输出: 确定化的有限(穷)状态自动机二、实验原理一个确定的有限自动机(DFA)M 可以定义为一个五元组,M(K,F,S,Z) ,其中:(1) K 是一个有穷非空集,集合中的每个元素称为一个状态;(2) 是一个有穷字母表,中的每个元素称为一个输入符号;(3) F 是一个从 KK 的单值转换函数,即 F(R,a)Q, (R,QK

2、)表示当前状态为 R,如果输入字符 a,则转到状态 Q,状态 Q 称为状态 R 的后继状态;(4) SK,是惟一的初态;(5) Z K,是一个终态集。由定义可见,确定有限自动机只有惟一的一个初态,但可以有多个终态,每个状态对字母表中的任一输入符号,最多只有一个后继状态。对于 DFA M,若存在一条从某个初态结点到某一个终态结点的通路,则称这条通路上的所有弧的标记符连接形成的字符串可为 DFA M 所接受。若 M 的初态结点同时又是终态结点,则称 可为 M 所接受(或识别) ,DFA M 所能接受的全部字符串(字)组成的集合记作 L(M) 。一个不确定有限自动机(NFA)M 可以定义为一个五元组

3、,M(K,F,S,Z) ,其中:(1) k 是一个有穷非空集,集合中的每个元素称为一个状态;(2) 是一个有穷字母表,中的每个元素称为一个输入符号;(3) F 是一个从 KK 的子集的转换函数;(4) S K,是一个非空的初态集;(5) Z K,是一个终态集。由定义可见,不确定有限自动机 NFA 与确定有限自动机 DFA 的主要区别是:(1)NFA 的初始状态 S 为一个状态集,即允许有多个初始状态;(2)NFA 中允许状态在某输出边上有相同的符号,即对同一个输入符号可以有多个后继状态。即 DFA 中的 F 是单值函数,而 NFA 中的 F 是多值函数。因此,可以将确定有限自动机 DFA 看作

4、是不确定有限自动机 NFA 的特例。和 DFA 一样,NFA 也可以用矩阵和状态转换图来表示。对于 NFA M,若存在一条从某个初态结点到某一个终态结点的通路,则称这条通路上的所有弧的标记( 除外)连接形成的字符串可为 M 所接受。NFA M 所能接受的全部字符串(字)组成的集合记作 L(M) 。由于 DFA 是 NFA 的特例,所以能被 DFA 所接受的符号串必能被 NFA 所接受。设 M1和 M2是同一个字母集上的有限自动机,若 L(M 1)L(M 2) ,则称有限自动机 M1和 M2等价。由以上定义可知,若两个自动机能够接受相同的语言,则称这两个自动机等价。DFA 是 NFA 的特例,因

5、此对于每一个 NFA M1总存在一个 DFA M2,使得L(M 1)L(M 2) 。即一个不确定有限自动机能接受的语言总可以找到一个等价的确定有限自动机来接受该语言。NFA 确定化为 DFA同一个字符串 可以由多条通路产生,而在实际应用中,作为描述控制过程的自动机,通常都是确定有限自动机 DFA,因此这就需要将不确定有限自动机转换成等价的确定有限自动机,这个过程称为不确定有限自动机的确定化,即 NFA 确定化为 DFA。下面介绍一种 NFA 的确定化算法,这种算法称为子集法:(1) 若 NFA 的全部初态为 S1,S 2,S n,则令 DFA 的初态为:SS 1,S 2,S n,其中方括号用来

6、表示若干个状态构成的某一状态。(2) 设 DFA 的状态集 K 中有一状态为S i,S i+1,S j,若对某符号 a,在 NFA中有 F( S i,S i+1,S j ,a)= S i,S i+1,S k 则令 F( Si,S i+1,S j ,a)= Si,S i+1,S k 为 DFA 的一个转换函数。若 S i,S i+1,S k 不在 K 中,则将其作为新的状态加入到 K 中。(3) 重复第 2 步,直到 K 中不再有新的状态加入为止。(4) 上面得到的所有状态构成 DFA 的状态集 K,转换函数构成 DFA 的 F,DFA 的字母表仍然是 NFA 的字母表。(5) DFA 中凡是含

7、有 NFA 终态的状态都是 DFA 的终态。对于上述 NFA 确定化算法子集法,还可以采用另一种操作性更强的描述方式,下面我们给出其详细描述。首先给出两个相关定义。假 设 I 是 NFA M 状 态 集 K 的 一 个 子 集 ( 即 I K) , 则 定 义 -closure( I)为 :(1) 若 QI,则 Q-closure(I) ;(2) 若 QI,则从 Q 出发经过任意条 弧而能到达的任何状态 Q,则 Q-closure(I) 。状态集 -closure(I)称为状态 I 的 闭包。假设 NFA M(K,F,S,Z) ,若 IK,a,则定义 Ia-closure(J) ,其中 J 是

8、所有从 -closure(I)出发,经过一条 a 弧而到达的状态集。NFA 确定化的实质是以原有状态集上的子集作为 DFA 上的一个状态,将原状态间的转换为该子集间的转换,从而把不确定有限自动机确定化。经过确定化后,状态数可能增加,而且可能出现一些等价状态,这时就需要简化。三、源程序#include#include#define MAXS 100using namespace std;string NODE; /结点集合string CHANGE; /终结符集合int N; /NFA 边数struct edgestring first;string change;string last;str

9、uct chanstring ltab;string jiheMAXS;void kong(int a)int i;for(i=0;iNODE.find(ai+1)b=ai;ai=ai+1;ai+1=b; void eclouse(char c,string for(k=0;khe.length()he+=bk.last;eclouse(bk.last0,he,b);void move(chan k=he.ltab.length();l=he.jihem.length();for(i=0;ihe.jihem.length()he.jihem+=bj.last0; for(i=0;ihe.jih

10、em.length()he.jihem+=bj.last0;/输出void outputfa(int len,int h,chan *t)int i,j,m;coutbi.first;if(bi.first=“#“) break;cinbi.changebi.last;N=i;/*for(j=0;jNODE.length()NODE+=bi.first;if(NODE.find(bi.last)NODE.length()NODE+=bi.last;if(CHANGE.find(bi.change)CHANGE.length()len=CHANGE.length();coutendnode;fo

11、r(i=0;iNODE.length()cout“;move(ti,k,b); /求 move(I,a)/coutednode.length()d0+=NODEi;endnode=ednode;coutendl“DFA 如下:“endl;outputfa(len,h,t); /输出 DFAcout“其中终态为:“endnodeendl;m=2;sta.erase();flag=0; for(i=0;im;i+)/cout“d“i“=“diendl;for(k=0;klen;k+)/cout“I“CHANGEkendl;y=m;for(j=0;jdi.length();j+)for(n=0;ny

12、;n+)if(dn.find(tNODE.find(dij).jihek)dn.length()|tNODE.find(dij).jihek.length()=0)if(tNODE.find(dij).jihek.length()=0) x=m;else x=n;if(!sta.length() sta+=x+48;elseif(sta0!=x+48)dm+=dij;flag=1;di.erase(j,1);/coutdiendl;j-; break; /跳出 n/n/jif(flag)m+;flag=0; /cout“sta=“staendl;sta.erase();/k/icoutendl

13、“集合划分:“;for(i=0;im;i+)cout“di“ “;coutendl;/状态重新命名chan *md=new chanm; NODE.erase();coutendl“重命名:“endl;for(i=0;im;i+) mdi.ltab=A+i; NODE+=mdi.ltab;cout“di“=“mdi.ltabendl;for(i=0;im;i+)for(k=0;klen;k+)for(j=0;jh;j+)if(di0=tj.ltab0)for(n=0;nm;n+)if(!tj.jihek.length()break;elseif(dn.find(tj.jihek)dn.length()mdi.jihek=mdn.ltab;break; break;ednode.erase();for(i=0;im;i+)for(j=0;jendnode.length();j+)if(di.find(endnodej)di.length()endnode=ednode;coutendl“最小化 DFA 如下:“endl;outputfa(len,m,md); cout“其中终态为:“endnodeendl;四、运行截图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报