资源简介
正规文法_NFA_DFA之间的转换实现
有界面
代码片段和文件信息
#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(“转换选项:\n“);
printf(“1 正规式->正规文法->NFA->DFA\n“);
printf(“2 正规文法->NFA->DFA\n“);
printf(“请输入选项 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(“文法中的产生式个数:%d\n“g.genNum);
printf(“文法中的产生式:\n“);
for(i=0; i {
printf(“%s\n“g.generator[i]);
}
printf(“转换得到的NFA中的所有非终结符:“);
for(i=1;i<=nfa1.vn[0];i++)
printf(“%c“nfa1.vn[i]);
printf(“\n“);
printf(“转换得到的NFA中的所有终结符:“);
for(i=1;i<=nfa1.vt[0];i++)
printf(“%c“nfa1.vt[i]);
printf(“\n“);
printf(“深度遍历转换所得的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;//错误返回-1
}
fseek(fg02);
int n =ftell(fg);//获得文件大小
rewind(fg);
printf(“文件大小为:%d 字节\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(“请输入正规文法文件名(绝对路径):“);
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);
}
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 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
评论
共有 条评论