diff --git a/C/e_closure.c b/C/e_closure.c new file mode 100644 index 0000000..61d8755 --- /dev/null +++ b/C/e_closure.c @@ -0,0 +1,107 @@ +#include +#include +struct node +{ + int st; + struct node *link; +}; +void findclosure(int,int); +void insert_trantbl(int ,char, int); +int findalpha(char); +void print_e_closure(int); +static int set[20],nostate,noalpha,s,notransition,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("use letter e as epsilon\n"); + printf("e must be last character ,if it is present]\n"); + printf("\nEnter alphabets?\n"); + for(i=0;i qno alphabet qno\n",notransition); + printf("States number must be greater than zero\n"); + printf("\nEnter transition?\n"); + for(i=0;ist,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