資源簡(jiǎn)介
這是一個(gè)可以實(shí)現(xiàn)正規(guī)式到NFA的轉(zhuǎn)換,NFA 轉(zhuǎn)換為DFA,DFA的最小化的程序

代碼片段和文件信息
#include?“iostream.h“
#include?“string.h“
//////////////////////////////////////////////////////////////////////////
//////////////////???Begin?Regular==>NFA??////////////////////////////////?
?
struct?Relation??//定義NFA中弧
{
?int?CurrentState;??//定義起始狀態(tài)?
?int?NextState;??//定義下一個(gè)狀態(tài)
?char?TransitionElement;??//定義輸入字符
};
struct?TokenState??//定義操作符號(hào)處理?xiàng)?
{
?int?BeginState;?//定義起始
?int?EndState;??//定義結(jié)束?
?int?preposition;?//定義記錄(一個(gè)大的區(qū)域)狀態(tài)開始時(shí)在波蘭式中的位置
};
int?IsTransitionElement(char?s)???//判斷輸入字符串是否合法?
{
?if?(s==‘0‘||s==‘1‘||s==‘$‘)
?return?1;
?else?return?0;
}
void?NFADiagram(Relation?*Rstringint?positionint?CurrentState
int?NextStatechar?TransitionElement)??//生成NFA中弧的信息??
{
?Rstring[position].CurrentState=CurrentState;
?Rstring[position].NextState=NextState;
?Rstring[position].TransitionElement=TransitionElement;
}
int?TokenDealing(char?*stringint?positionTokenState?*tokenint?*Rtoken)//雙目運(yùn)算
{
?
?
?if?(IsTransitionElement(string[position])?//型如?“輸入字符?輸入字符?操作符”
?&&IsTransitionElement(string[position-1]))
?return?0;
?else??if?(IsTransitionElement(string[position])??//型如?“輸入字符?操作符?輸入字符”
???????&&!IsTransitionElement(string[position-1]))
?return?1;
?else???//查找在波蘭式中區(qū)域的開始字符
?{
?int?firsttoken=token[Rtoken[position]].preposition;
?if(IsTransitionElement(string[firsttoken-1]))
?return?2;??????//型如?“輸入字符?|”?如果前一區(qū)域的結(jié)尾不存在*
?else?return?3;?????//如果前一區(qū)域的結(jié)尾存在*
?}
}
int?StarDealing(char?*stringint?position)
{
?if(IsTransitionElement(string[position]))
?return?1;
?else?
?return?0;
}
Relation?relation[25];
int?relationi=0;
void?ToNFA(char?*string)
{
?//Relation?relation[25];?
?TokenState?token[20];
?int?Rtoken[20];//記錄字符串中操作符號(hào)在操作符號(hào)列中的位置
?int?tokeni=1;?//定義操作符號(hào)在操作符號(hào)中的位置
?//int?relationi=0;
?int?secondtoken;
?token[0].BeginState=0;
?token[0].EndState=0;
?for?(unsigned?i=0;i ?{
??if?(string[i]==‘*‘)
??{
???Rtoken[i]=tokeni;
???if?(IsTransitionElement(string[i-1]))??//處理型如“輸入字符?操作符*”
???{
??token[tokeni].BeginState=token[tokeni-1].EndState+1;
??token[tokeni].EndState=token[tokeni].BeginState?+?1;
??token[tokeni].preposition?=?i-1;
??NFADiagram(relationrelationi++token[tokeni].BeginState
????????????????token[tokeni].EndState?string[i-1]);
?//?cout<<“5?“;
//對(duì)處理1*有問題。
??NFADiagram(relationrelationi++token[tokeni].EndState
??????????????token[tokeni].BeginState??‘$‘);
??????NFADiagram(relationrelationi++token[tokeni].BeginState-1
??????????????token[tokeni].EndState?+?1??‘$‘);
??????NFADiagram(relationrelationi++token[tokeni].BeginState-1
??????????????token[tokeni].BeginState??‘$‘);
??????NFADiagram(relationrelationi++token[tokeni].EndState
??????????????token[tokeni].EndState+1??‘$‘);
??token[tokeni].BeginState?=?token[tokeni].BeginState-1;
??????token[tokeni].EndState=token[tokeni].EndState?+?1;
???}
???else???//處理型如?“操作符?操作符*”
???{
????token[tokeni].BeginState=token[tokeni-1].BeginState;
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????3489??2005-10-15?16:07??NFtoDFA\21codes.com.txt
?????文件????????588??2005-10-15?16:07??NFtoDFA\免費(fèi)空間.txt
?????文件???????1946??2005-10-15?02:13??NFtoDFA\下載說明.txt
?????文件??????18450??2005-05-30?18:42??NFtoDFA\compile_work2.cpp
?????文件???????3485??2005-05-23?19:15??NFtoDFA\compile_work2.dsp
?????文件????????551??2005-05-23?19:16??NFtoDFA\compile_work2.dsw
?????文件??????58368??2008-01-19?03:23??NFtoDFA\compile_work2.ncb
?????文件???????1221??2008-01-19?03:23??NFtoDFA\compile_work2.plg
?????目錄??????????0??2007-05-04?23:52??NFtoDFA\Debug
?????文件??????53760??2008-01-19?03:23??NFtoDFA\compile_work2.opt
?????目錄??????????0??2007-05-04?23:52??NFtoDFA
-----------?---------??----------?-----??----
???????????????142076????????????????????12
評(píng)論
共有 條評(píng)論