#include #include struct node { int st; struct node *link; }; void findclosure(int,int); void insert_trantbl(int ,char, int); int findalpha(char); void findfinalstate(void); void unionclosure(int); void print_e_closure(int); static int set[20],nostate,noalpha,s,notransition,nofinal,start,finalstate[20],c,r,buffer[20]; char alphabet[20]; static int e_closure[20][20]={0}; struct node * transition[20][20]={NULL}; void main() { int i,j,k,m,t,n; struct node *temp; printf("enter the number of alphabets?\n"); scanf("%d",&noalpha); getchar(); printf("NOTE:- [ use letter e as epsilon]\n"); printf("NOTE:- [e must be last character ,if it is present]\n"); printf("\nEnter alphabets?\n"); for(i=0;i qno alphabet qno]\n",notransition); printf("NOTE:- [States number must be greater than zero]\n"); printf("\nEnter transition?\n"); for(i=0;ist); temp=temp->link; } } printf("\n"); print_e_closure(i); printf("%c\t",alphabet[j] ); printf("{"); for(n=1;n<=nostate;n++) { if(set[n]!=0) printf("q%d,",n); } printf("}"); } } printf("\nFinal states:"); findfinalstate(); } void findclosure(int x,int sta) { struct node *temp; int i; if(buffer[x]) return; e_closure[sta][c++]=x; buffer[x]=1; if(alphabet[noalpha-1]=='e' && transition[x][noalpha-1]!=NULL) { temp=transition[x][noalpha-1]; while(temp!=NULL) { findclosure(temp->st,sta); temp=temp->link; } } } void insert_trantbl(int r,char c,int s) { int j; struct node *temp; j=findalpha(c); if(j==999) { printf("error\n"); exit(0); } temp=(struct node *) malloc(sizeof(struct node)); temp->st=s; temp->link=transition[r][j]; transition[r][j]=temp; } int findalpha(char c) { int i; for(i=0;i