• 大小: 924KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-17
  • 语言: 其他
  • 标签:

资源简介

正规文法_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


评论

共有 条评论

相关资源