这是一个未完成的程序
#include<stdio.h>
#include<string.h>
char a[20][10];
char Vn[26];
char Vt[64];
int M=0;
int N=0;
int m=0;
int flag=-1;
void initial() //³õʼ»¯
{
for(int b=0;b<26;b++)
Vn[b]='#';
for(int c=0;c<64;c++)
Vt[c]='#';
for(int d=0;d<20;d++)
for(int e=0;e<10;e++)
a[d][e]='#';
}
void group() //ÅжÏÖÕ½á·ûºÅ
{
for(int k=0;a[k][0]!='e';k++)
{
for(int f=0;a[k][f]!='\0';f++)
{
if((a[k][f]>='A')&&(a[k][f]<='Z'))
{
for(int x=0;x<=M&&M<=27;x++)
if(Vn[x]==a[k][f])
break;
if((x-1)==M)
{
Vn[M]=a[k][f];
M++;
}
}
else
{
for(int y=0;y<=N&&N<=20;y++)
{
if(a[k][f]==':'||a[k][f]=='=')
break;
else
{
if(Vt[y]==a[k][f])
break;
}
}
if((y-1)==N)
{
Vt[N]=a[k][f];
N++;
}
}
}
}
}
void input()
{
for(int i=0;i<10;i++)
a[m][i]='#';
scanf("%s",a[m]);
while(strcmp(a[m],"end"))
{
if((a[m][0]>='A')&&(a[m][0]<='Z'))
{
int h=4;
if((a[m][h]>='A')&&(a[m][h]<='Z'))
{
if((a[m][h+1]<'A')||(a[m][h+1]>'Z'))
{
if(a[m][h+2]!='\0')
{
printf("´Ë¹æÔò²»ÊÇÕýÔòÎÄ·¨µÄ¹æÔò£¬ÇëÖØÐÂÊäÈë\n");
input();
break;
}
}
else
{
printf("´Ë¹æÔò²»ÊÇÕýÔòÎÄ·¨µÄ¹æÔò£¬ÇëÖØÐÂÊäÈë\n");
input();
break;
}
}
else
{
if(a[m][h+1]!='\0') //U::=T
{
printf("´Ë¹æÔò²»ÊÇÕýÔòÎÄ·¨µÄ¹æÔò£¬ÇëÖØÐÂÊäÈë\n");
input();
break;
}
}
}
m++;
scanf("%s",a[m]);
}
}
void recongnise() //ÅжÏÊÇÈ·¶¨»¹ÊÇ·ÇÈ·¶¨
{
for(int i=0;a[i][0]!='e';i++)
{
for(int j=i+1;a[j][0]!='e';j++)
{
int n=4;
if(a[i][n]==a[j][n])
n++;
if(a[i][n]==a[j][n])
break;
}
int h=4;
if(a[i][h]==a[j][h])
h++;
if(a[i][h]==a[j][h]) //U::=T
{
printf("´ËÎÄ·¨¶ÔÓ¦µÄÓÐÇî״̬×Ô¶¯»úÊÇ·ÇÈ·¶¨µÄ\n\n");
flag=0;
break;
}
}
if(a[i][0]=='e') //U::=WT
{
printf("´ËÎÄ·¨¶ÔÓ¦µÄÓÐÇî״̬×Ô¶¯»úÊÇÈ·¶¨µÄ\n\n");
flag=1;
}
}
void output() //Êä³öÎÄ·¨ÏàÓ¦µÄÓÐÇî״̬×Ô¶¯»ú
{
if(flag==0)
{
printf("NFA N=({");
for(int i=0;Vn[i]!='#';i++)
printf("%c,",Vn[i]);
printf("S},{");
for(int j=0;Vt[j]!='#';j++)
printf("%c,",Vt[j]);
printf("},M',{S},{%c})\n",Vn[0]);
printf("ÆäÖÐM':\n");
for(int x=0;Vn[x]!='#';x++)
{
for(int y=0;Vt[y]!='#';y++)
{
printf("M'(%c,%c)=",Vn[x],Vt[y]);
for(int z=0;a[z][0]!='e';z++)
if(a[z][4]==Vn[x])
if(a[z][5]==Vt[y])
printf("%c",a[z][0]);
if(a[z][0]=='e')
printf("\t");
}
printf("\n");
}
for(int u=0;Vt[u]!='#';u++)
{
printf("M'(S,%c)=",Vt[u]);
for(int k=0;a[k][0]!='e';k++)
if(a[k][4]==Vt[u])
printf("%c",a[k][0]);
if(a[k][0]=='e')
printf("\t");
}
}
if(flag==1)
{
printf("DFA N=({");
for(int b=0;Vn[b]!='#';b++)
printf("%c,",Vn[b]);
printf("S},{");
for(int c=0;Vt[c]!='#';c++)
printf("%c,",Vt[c]);
printf("},M',S,{%c})\n",Vn[0]);
printf("ÆäÖÐ:\n");
for(int p=0;Vn[p]!='#';p++)
{
for(int q=0;Vt[q]!='#';q++)
for(int r=0;a[r][0]!='#';r++)
if(a[r][4]==Vn[p])
if(a[r][5]==Vt[q])
printf("M'(%c,%c)=%c\t",Vn[p],Vt[q],a[r][0]);
printf("\n");
}
for(int d=0;Vt[d]!='#';d++)
{
for(int e=0;a[e][0]!='e';e++)
if(a[e][4]==Vt[d])
printf("M'(S,%c)=%c\t",Vt[d],a[e][0]);
}
}
}
void main()
{
initial();
printf("ÇëÊäÈëÎÄ·¨£¨ÒÔEND½áÊø£©:\n");
input();
group();
printf("\n");
recongnise();
output();
printf("\n");
}