COMPILER DESIGN: FINDING FIRST

//include header files
char a,non[50],tmpnon[50],tmprht[50][50],non1[50],right[50][50],first[50][50];
int i,j,k,l,m,n,fg=0,fg2=0,p;
void addentry(char b)
{
for(p=0;non[p]!='\0';p++)
if(b==non[p])
{
tmpnon[m]=non[p];
strcpy(tmprht[m],right[p]);
m++;tmpnon[m]='\0';
}
}
void elimdup()
{
for(l=0;first[i][l]!='\0';l++)
for(p=l+1;first[i][p]!='\0';p++)
if(first[i][l]==first[i][p])
{
for(j=p;first[i][j]!='\0';j++)
first[i][j]=first[i][j+1];
}
}
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 first_derive()
{
for(l=0;tmpnon[l]!='\0';l++)
{
if((!((tmprht[l][0]>=65)&(tmprht[l][0]<=90))))
{
if(((fg==1)&(tmprht[l][0]=='#'))|(tmprht[l][0]!='#'))
{
first[i][k]=tmprht[l][0];k++;
first[i][k]='\0';
}
}
else if((tmprht[l][0]>=65)&(tmprht[l][0]<=90))
addentry(tmprht[l][0]);
if((tmprht[l][0]=='#')&(right[j][n+1]=='\0'))
{first[i][k]='#';k++;first[i][k]='\0';}
else if(tmprht[l][0]=='#')fg2=1;
}
}
void first_id()
{
for(i=0;i{
for(j=0,k=0;non[j]!='\0';j++)
if((non1[i]==non[j])&(!((right[j][0]>=65)&(right[j][0]<=90))))
{
first[i][k]=right[j][0];
k++;first[i][k]='\0';
}
for(j=0,n=0;non[j]!='\0';j++)
if((non1[i]==non[j])&(right[j][n]>=65)&(right[j][n]<=90))
{
m=0;addentry(right[j][n]);
first_derive();
if((fg2==1)&(fg!=1)){fg2=0;n++;j--;continue;}n=0;
}else if((non1[i]==non[j])&(!((right[j][n]>=65)&(right[j][n]<=90))))
{fg2=0;first[i][k]=right[j][n];k++;first[i][k]='\0';n=0;}
elimdup();
}printf("\n\n");
for(i=0;non1[i]!='\0';i++)
printf("\nFIRST(%c)=%s",non1[i],first[i]);
}
void main()
{non[0]='\0';printf("ENTER PRODUCTIONS:(press Esc for output)\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;}
}
first_id();
getch();
}

Comments

Popular Posts