FINDING FOLLOW IN COMPILER DESIGN

/*Include header files*/
char a,non[50],non1[50],right[50][50],first[50][50],falo[50][50];
int i,j,k,l,m,n,o,p,flag=0;
void elimdup()
{
for(l=0;falo[i][l]!='\0';l++)
for(p=l+1;falo[i][p]!='\0';p++)
if(falo[i][l]==falo[i][p])
{
for(j=p;falo[i][j]!='\0';j++)
falo[i][j]=falo[i][j+1];
p--;
}}
void add_non()
{
for(k=-1,l=0;k
{
k++;
if(non1[k]==a)break;
}
if(k==strlen(non1))
{non1[k]=a;non1[k+1]='\0';}
}
void follow(char nt)
{
for(n=0;non1[n]!=nt;n++){}
k=0;
while(falo[o][k]!='\0')
{k++;}
for(p=0;falo[n][p]!='\0';p++)
{falo[o][k]=falo[n][p];k++;}
falo[o][k]='\0';
}
void first2()
{
if((right[i][j]>=65)&(right[i][j]<=90))
{
for(l=0;non1[l]!='\0';l++)
if(non1[l]==right[i][j])
{
for(m=0;first[l][m]!='\0';m++)
{
if(first[l][m]=='#')
flag=1;
else
{k=0;
while(falo[o][k]!='\0')
{k++;}
falo[o][k]=first[l][m];k++;
falo[o][k]='\0'; flag=0;
}}}}
else
{k=0;
while(falo[o][k]!='\0')
{k++;}
falo[o][k]=right[i][j];k++;
falo[o][k]='\0';flag=0;
}}
void scan_right()
{
for(j=0;right[i][j]!='\0';j++)
{
if(non1[o]==right[i][j])
{
if(right[i][j+1]!='\0')
{
while(1)
{
if((right[i][j+1]=='\0')&(non[i]!=right[i][j]))
{follow(non[i]);flag=0;break;}
else
{
j++;
first2();
if(flag==0){flag=0;break;}
}}
}
else if(non[i]!=right[i][j])follow(non[i]);
break;
}}}
void follow_id()
{
for(o=0;non1[o]!='\0';o++)
for(i=0;non[i]!='\0';i++)
scan_right();
}
void main()
{
non[0]='\0';printf("ENTER PRODUCTIONS:(press Esc for FIRST input)\n\n");
while(1)
{
if(a!='|'){ printf("\n");
if(((a=getche())>=65)&(a<=90))
{non[i]=a;add_non();}else {printf("\b \b");continue;}
printf("->");}else non[i]=non[i-1];
for(j=0;((a=getche())!=13)&(a!=124)&(a!=27);j++)
{
right[i][j]=a;
}right[i][j]='\0';i++;if(a==27){printf("\b ");break;}
}printf("\n\n");
for(i=0,j=0;non1[i]!='\0';i++)
{
printf("\nFIRST(%c)=",non1[i]);
while((a=getche())!=13)
{
first[i][j]=a;
j++;
}
first[i][j]='\0';j=0;
}
for(i=0;non1[i]!='\0';i++)falo[i][0]='\0';
falo[0][0]='$';falo[0][1]='\0';
follow_id();
printf("\n\n");
for(i=0;non1[i]!='\0';i++)
{
elimdup();
printf("\nFOLLOW(%c)=%s",non1[i],falo[i]);
}
getch();
}

Comments

Popular Posts