#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]);
}
}
}
You must be logged in to post a comment.