-
大小: 924KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-05-17
- 語(yǔ)言: 其他
- 標(biāo)簽:
資源簡(jiǎn)介
正規(guī)文法_NFA_DFA之間的轉(zhuǎn)換實(shí)現(xiàn)
有界面

代碼片段和文件信息
#include
#include
#include
#include“sy3.h“
#include“graph.h“
#include“graphVersion.h“
//#include“fa.h“
using?namespace?std;
int?getLines(char?NG[][40]char*?filename);
char?RE2RG(grammer?*g);
int?wIsOP(char?w);
char?comp(char?optrchar?wchar?OPTable[][6]);
char?operate(char?tchar?xchar?ygrammer?*g);
void?getgrammer(grammer?*g);
int?init(grammer?*?g)
{
if(!(g->generator=(char**)malloc(50*sizeof(char*))))?return?0;
g->genNum=0;
g->vn[0]=0;
g->vt[0]=0;
return?1;
}
int?main()
{
int?ij;
grammer?g;
NFA?nfa1;
DFA?dfa1;
initNFA(&nfa1);
init(&g);
char?option;
printf(“轉(zhuǎn)換選項(xiàng):\n“);
printf(“1??正規(guī)式->正規(guī)文法->NFA->DFA\n“);
printf(“2??正規(guī)文法->NFA->DFA\n“);
printf(“請(qǐng)輸入選項(xiàng)?1/2??“);
scanf(“%c“&option);
if(option==‘1‘)
{
RegularToGrammer(&g);
grammer2NFA(&g&nfa1);
NFA2DFA(&dfa1&nfa1);
}
else?if(option==‘2‘)
{
getgrammer(&g);
grammer2NFA(&g&nfa1);
NFA2DFA(&dfa1&nfa1);
}
else
{
printf(“bad?option!?program?exiting...\n“);
exit(0);
}
printf(“文法中的產(chǎn)生式個(gè)數(shù):%d\n“g.genNum);
printf(“文法中的產(chǎn)生式:\n“);
for(i=0;?i {
printf(“%s\n“g.generator[i]);
}
printf(“轉(zhuǎn)換得到的NFA中的所有非終結(jié)符:“);
for(i=1;i<=nfa1.vn[0];i++)
printf(“%c“nfa1.vn[i]);
printf(“\n“);
printf(“轉(zhuǎn)換得到的NFA中的所有終結(jié)符:“);
for(i=1;i<=nfa1.vt[0];i++)
printf(“%c“nfa1.vt[i]);
printf(“\n“);
printf(“深度遍歷轉(zhuǎn)換所得的DFA:\n“);
DFSTraverse(*dfa1.fa);
return?0;
}
int?getLines(char?**NGchar*?filename)
{
FILE?*fg;
if((fg=fopen(filename“r“))==NULL)
{
printf(“ERROR:file?not?found!\n“);
return?-1;//錯(cuò)誤返回-1
}
fseek(fg02);
int?n?=ftell(fg);//獲得文件大小
rewind(fg);
printf(“文件大小為:%d?字節(jié)\n“n);
if(n==0)
{
printf(“空文件!\n“);
return?0;
}
int?rowcolum=0;
int?linenum=1;
NG[linenum-1]=(char?*)malloc(50*sizeof(char));
char?cc;
for(row=0;row {
while((cc=fgetc(fg))!=‘\n‘&&!feof(fg))
{
NG[row][colum++]=cc;
}
if(cc==‘\n‘)
{
linenum++;
NG[row][colum]=‘\0‘;
NG[linenum-1]=(char?*)malloc(50*sizeof(char));
}
if(feof(fg))
{
NG[row][colum]=‘\0‘;
break;
}
colum=0;
}
fclose(fg);
return?linenum;
return?0;
}
void?getgrammer(grammer?*g)
{
int?ij;
char?filename[255];
printf(“請(qǐng)輸入正規(guī)文法文件名(絕對(duì)路徑):“);
scanf(“%s“filename);
g->genNum=getLines(g->generatorfilename);
if(g->genNum==-1)??exit(0);
g->vn[0]?=?g->vt[0]?=?0;
????
for(i=0;?igenNum;?i++)
{
insert2set(g->generator[i][0]g->vn);
for(?j=3;?jgenerator[i]);?j++)
{
if(?g->generator[i][j]?>=?‘A‘?&&?g->generator[i][j]?<=?‘Z‘?)
{
insert2set(g->generator[i][j]g->vn);
}
else?insert2set(g->generator[i][j]g->vt);
}
}
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????283316??2008-12-07?15:04??sy3\Debug\main.obj
?????文件?????581684??2008-12-07?15:04??sy3\Debug\sy3.exe
?????文件?????814880??2008-12-07?15:04??sy3\Debug\sy3.ilk
?????文件????1993324??2008-11-25?21:37??sy3\Debug\sy3.pch
?????文件????1147904??2008-12-07?15:04??sy3\Debug\sy3.pdb
?????文件?????????31??2008-12-07?14:44??sy3\Debug\test.txt
?????文件?????????58??2008-12-05?10:37??sy3\Debug\test_simplified.txt
?????文件??????99328??2008-12-07?15:04??sy3\Debug\vc60.idb
?????文件?????110592??2008-12-07?15:04??sy3\Debug\vc60.pdb
?????文件??????????0??2008-12-05?23:54??sy3\Debug\新建?文本文檔.txt
?????文件???????1065??2008-12-02?11:46??sy3\dfa.h
?????文件???????1204??2004-12-01?21:30??sy3\fa.h
?????文件????????154??2008-12-02?11:47??sy3\GDFA.h
?????文件????????746??2008-12-03?16:51??sy3\graph.h
?????文件???????8427??2008-12-07?14:25??sy3\graphVersion.h
?????文件???????2860??2008-12-07?15:04??sy3\main.cpp
?????文件???????4428??2008-12-02?12:22??sy3\sy3.dsp
?????文件????????514??2008-11-25?21:32??sy3\sy3.dsw
?????文件???????4521??2008-12-07?14:23??sy3\sy3.h
?????文件??????58368??2008-12-07?15:06??sy3\sy3.ncb
?????文件??????57856??2008-12-07?15:06??sy3\sy3.opt
?????文件???????1330??2008-12-07?15:04??sy3\sy3.plg
?????目錄??????????0??2008-12-07?15:04??sy3\Debug
?????目錄??????????0??2008-12-02?11:34??sy3\graphVersion
?????目錄??????????0??2008-12-07?15:06??sy3
-----------?---------??----------?-----??----
??????????????5172590????????????????????25
評(píng)論
共有 條評(píng)論