#include<stdio.h> #include<string.h> int len=0,p,i,n,j; char prod[10][10],c,fset[10]; void follow(char c); void first(char c); int main() { int i; char ch; printf("Enter The No. Of Productions:\n"); scanf("%d",&n); printf("Enter The Productions:\n { Epsilon = # }\n"); for(i=0;i<n;i++) { scanf("%s",prod[i]); } printf("\nProductions are:\n"); for(i=0;i<n;i++) { printf("\t%s\n",prod[i]); } printf("\nWhose Follow you want to find:\n"); scanf("\n%c",&ch); follow(ch); printf("Follow of %c is : { ",ch); for(i=0;i<len;i++) { printf("%c ",fset[i]); } printf("}\n"); return 0; } void follow(char c) { if(prod[0][0]==c) fset[len++]='$'; for(i=0;i<n;i++) { for(j=2;j<strlen(prod[i]);j++) if(prod[i][j]==c) { if(prod[i][j+1]!='\0') first(prod[i][j+1]); else if(prod[i][j+1]=='\0' && prod[i][0]!=c) follow(prod[i][0]); } } } void first(char c) { if(!(isupper(c))) fset[len++]=c; for(p=0;p<n;p++) { if(prod[p][0]==c) { if(prod[p][2]=='#') follow(prod[i][0]); else if(islower(prod[i][2])) fset[len++]=prod[p][2]; else first(prod[p][2]); } } }