资源简介
正规式转换的3种算法,用C++实现的,还有NFA到DFA的转换,还有DFA的最小化
代码片段和文件信息
#pragma warning(disable:4786)
#include
#include
#include
#include
using namespace std;
#include “REManage.h“
void waitForInput()
{
cout< cout<<“输入完毕后,请按任意键开始处理...“;
cout< getch();
HWND note=FindWindow(“notepad“NULL);
::SendMessage(noteWM_CLOSE00);
}
void ReadRE(string& re)
{
ifstream in(“RE.txt“);
in>>re;
}
void ReadTestString(vector& str)
{
ifstream in(“TestString.txt“);
string temp;
for(;getline(intemp)temp.size()>0;)
{
str.push_back(temp);
}
}
void ReadNFA(vector& edgeGathervector& start vector& end)
{
ifstream inNFA(“NFA.txt“);
EDGE edge;
int edgeNumstartNumendNumtemp;
edgeGather.clear();
start.clear();
end.clear();
inNFA>>edgeNum;
for(int i=0;i {
inNFA>>edge.start>>edge.input>>edge.end;
edgeGather.push_back(edge);
}
inNFA>>startNum;
for(i=0;i {
inNFA>>temp;
start.push_back(temp);
}
inNFA>>endNum;
for(i=0;i {
inNFA>>temp;
end.push_back(temp);
}
}
void ReadDFA(vector& edgeGatherint start vector& end)
{
ifstream inDFA(“DFA.txt“);
EDGE edge;
int edgeNumstartNumendNumtemp;
edgeGather.clear();
end.clear();
inDFA>>edgeNum;
for(int i=0;i {
inDFA>>edge.start>>edge.input>>edge.end;
edgeGather.push_back(edge);
}
inDFA>>startNum;
inDFA>>start;
inDFA>>endNum;
for(i=0;i {
inDFA>>temp;
end.push_back(temp);
}
}
void OutTestResult(vector strvector isPass)
{
ofstream out(“TestResult.txt“);
for(int i=0;i {
out< if(isPass[i])
out<<“PASS“< else
out<<“FAILE“< }
}
void main()
{
REManage test;
ShellExecute(NULL“open““USE.txt“NULLNULLSW_SHOWNORMAL);
cout<<“说明:详见USE.txt“< cout<<“请阅读后按任意键开始...“;
getch();
HWND note=FindWindow(“notepad“NULL);
::SendMessage(noteWM_CLOSE00);
cout<
string re; //regular expression
vector stringGather; //test string gather
vector edgeGather; //edge gather for both NFA and DFA
int startDFA=0; //start state for DFA
vector startNFA; //start state gather for NFA
vector end; //end state gather for both NFA and DFA
vector isPass;
for(;;)
{
stringGather.clear();
edgeGather.clear();
startNFA.clear();
end.clear();
isPass.clear();
int choice=0;
cout<<“选择你的输入:“< cout<<“ 1. 输入正规式“< cout<<“ 2. 输入NFA“< cout<<“ 3. 输入DFA“< cout<<“ 4. 退出“<
cout<<“输入你的选择(1~4):“;
cin>>choice;
switch(choice)
{
case 1:
ShellExecute(NULL“open““RE.txt“NULLNULLSW_SHOWNORMAL);
waitForInput();
ReadRE(re);
test.setRE(re);
test.Process();
break;
case 2:
ShellExecute(NULL“open““NFA.txt“NULLNULLSW_SHO
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 436214 2010-04-26 14:23 3种算法\正规式处理及自动机的转换\Debug\main.obj
文件 568817 2010-04-26 15:15 3种算法\正规式处理及自动机的转换\Debug\REManage.obj
文件 696467 2010-04-26 15:19 3种算法\正规式处理及自动机的转换\Debug\REtoNFA.exe
文件 1078384 2010-04-26 15:19 3种算法\正规式处理及自动机的转换\Debug\REtoNFA.ilk
文件 7028316 2010-04-26 14:23 3种算法\正规式处理及自动机的转换\Debug\REtoNFA.pch
文件 1696768 2010-04-26 15:19 3种算法\正规式处理及自动机的转换\Debug\REtoNFA.pdb
文件 214016 2010-05-02 16:17 3种算法\正规式处理及自动机的转换\Debug\vc60.idb
文件 208896 2010-04-26 15:15 3种算法\正规式处理及自动机的转换\Debug\vc60.pdb
文件 146 2006-04-03 17:55 3种算法\正规式处理及自动机的转换\DFA.txt
文件 4327 2006-04-03 17:49 3种算法\正规式处理及自动机的转换\main.cpp
文件 55 2006-03-31 22:24 3种算法\正规式处理及自动机的转换\NFA.txt
文件 11 2010-04-26 14:50 3种算法\正规式处理及自动机的转换\RE.txt
文件 25273 2010-05-02 16:18 3种算法\正规式处理及自动机的转换\REManage.cpp
文件 4221 2010-05-02 16:18 3种算法\正规式处理及自动机的转换\REManage.h
文件 0 2010-05-02 16:17 3种算法\正规式处理及自动机的转换\Result.txt
文件 4415 2006-03-30 12:48 3种算法\正规式处理及自动机的转换\REtoNFA.dsp
文件 537 2006-03-11 22:17 3种算法\正规式处理及自动机的转换\REtoNFA.dsw
文件 55808 2010-04-26 15:40 3种算法\正规式处理及自动机的转换\REtoNFA.opt
文件 248 2010-05-02 16:17 3种算法\正规式处理及自动机的转换\REtoNFA.plg
文件 59 2010-04-26 14:45 3种算法\正规式处理及自动机的转换\TestResult.txt
文件 31 2006-04-03 12:56 3种算法\正规式处理及自动机的转换\TestString.txt
文件 989 2006-04-03 17:54 3种算法\正规式处理及自动机的转换\USE.txt
目录 0 2010-05-02 16:09 3种算法\正规式处理及自动机的转换\Debug
目录 0 2010-05-02 16:18 3种算法\正规式处理及自动机的转换
目录 0 2010-05-02 16:08 3种算法
----------- --------- ---------- ----- ----
12024216 26
- 上一篇:非参数背景建模程序完整的工程,注释
- 下一篇:21天学通 C++第8版)完整高清
评论
共有 条评论