#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]); } } } }