1118 实验三 有限自动机的构造与识别

#include<stdio.h>
char gra[80];
char ch;
int n,p=0,k=0;
struct{
char R[10];
}NFA[10];
char R1[10];
char R2[10];
main()
{
printf("---------------正规文法转换成有穷自动机------------------\n");
printf("请输入正规文法R:");
do{
ch=getchar();
gra[p++]=ch;
}while(ch!='#');
n=strlen(gra);
scaner(gra);
printf("\n");
}
scaner(char *r)
{
int i,j;
int m;
int can=1;
m=strlen(r);
if(m==1||r[1]=='#')
printf("f(%d,%c)=B\n",k,r[0]);
else
{
for(i=0;i<m;i++)
{
ch=r[i];
if(ch=='|')//寻找'|'
{
for(j=0;j<i;j++)
NFA[k].R[j]=r[j];
scaner(NFA[k++].R);
for(j=i+1;j<m;j++)
NFA[k].R[j-i-1]=r[j];
scaner(NFA[k++].R);
can=0;
break;
}
if(ch=='*')//寻找'*'
{
can=0;
break;
}
}
if(can==1)
{
for(i=0;i<m;i++)
{
ch=r[i];
if(ch!='.'&&ch!='#'&&r[i+1]!='#')
printf("f(%d,%c)=%d\n",k++,r[i],k+1);
if(ch!='.'&&ch!='#'&&r[i+1]=='#')
printf("f(%d,%c)=B\n",k,r[i]);
}
}
}
}

 

posted @ 2015-12-11 19:00  19林文凤  阅读(208)  评论(0编辑  收藏  举报