Experiment 8 To 10
Experiment 8 To 10
Aim: Write program to find Simulate First and Follow of any given grammar.
Program:
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int count, n = 0;
char calc_first[10][100];
char calc_follow[10][100];
int m = 0;
char production[10][10];
int k;
char ck;
int e;
int jm = 0;
int km = 0;
int i, choice;
char c, ch;
count = 8;
strcpy(production[0], "E=TR");
strcpy(production[1], "R=+TR");
strcpy(production[2], "R=#");
strcpy(production[3], "T=FY");
strcpy(production[4], "Y=*FY");
strcpy(production[5], "Y=#");
strcpy(production[6], "F=(E)");
strcpy(production[7], "F=i");
int kay;
char done[count];
calc_first[k][kay] = '!';
c = production[k][0];
point2 = 0;
xxx = 0;
if(c == done[kay])
xxx = 1;
if (xxx == 1)
continue;
findfirst(c, 0, 0);
ptr += 1;
done[ptr] = c;
calc_first[point1][point2++] = c;
if (first[i] == calc_first[point1][lark])
chk = 1;
break;
if(chk == 0)
calc_first[point1][point2++] = first[i];
printf("}\n");
jm = n;
point1++;
printf("\n");
printf("-----------------------------------------------\n\n");
char donee[count];
ptr = -1;
calc_follow[k][kay] = '!';
point1 = 0;
int land = 0;
ck = production[e][0];
point2 = 0;
xxx = 0;
if(ck == donee[kay])
xxx = 1;
if (xxx == 1)
continue;
land += 1;
follow(ck);
ptr += 1;
donee[ptr] = ck;
calc_follow[point1][point2++] = ck;
for(i = 0 + km; i < m; i++) {
if (f[i] == calc_follow[point1][lark])
chk = 1;
break;
if(chk == 0)
calc_follow[point1][point2++] = f[i];
printf(" }\n\n");
km = m;
point1++;
void follow(char c)
int i, j;
if(production[0][0] == c) {
f[m++] = '$';
}
if(production[i][j] == c)
if(production[i][j+1] != '\0')
followfirst(production[i][j+1], i, (j+2));
if(production[i][j+1]=='\0'&& c!=production[i][0])
follow(production[i][0]);
int j;
if(!(isupper(c))) {
first[n++] = c;
}
if(production[j][0] == c)
if(production[j][2] == '#')
if(production[q1][q2] == '\0')
first[n++] = '#';
else
first[n++] = '#';
else if(!isupper(production[j][2]))
first[n++] = production[j][2];
else
findfirst(production[j][2], j, 3);
}
}
int k;
if(!(isupper(c)))
f[m++] = c;
else
int i = 0, j = 1;
if(calc_first[i][0] == c)
break;
while(calc_first[i][j] != '!')
if(calc_first[i][j] != '#')
f[m++] = calc_first[i][j];
else
if(production[c1][c2] == '\0')
{
follow(production[c1][0]);
else
j++;
Output:
EXPERIMENT NO-9
Program:
#include<stdio.h>
#include<string.h>
int E(),Edash(),T(),Tdash(),F();
char *ip;
char string[50];
int main()
scanf("%s",string);
ip=string;
printf("\n\nInput\tAction\n-------------------------------- \n");
printf("\n--------------------------------\n");
else{
printf("\n--------------------------------\n");
int E()
printf("%s\tE->TE' \n",ip);
if(T())
if(Edash())
return 1;
else
return 0;
else
return 0;
int Edash()
if(*ip=='+')
printf("%s\tE'->+TE' \n",ip);
ip++;
if(T())
if(Edash())
return 1;
else
return 0;
}
else
return 0;
else
printf("%s\tE'->^ \n",ip);
return 1;
int T()
printf("%s\tT->FT' \n",ip);
if(F())
if(Tdash())
return 1;
else
return 0;
else
return 0;
int Tdash()
{
if(*ip=='*')
printf("%s\tT'->*FT' \n",ip);
ip++;
if(F())
if(Tdash())
return 1;
else
return 0;
else
return 0;
else
printf("%s\tT'->^ \n",ip);
return 1;
int F()
if(*ip=='(')
{
printf("%s\tF->(E) \n",ip);
ip++;
if(E())
if(*ip==')')
ip++;
return 0;
else
return 0;
else
return 0;
else if(*ip=='i')
ip++;
printf("%s\tF->id \n",ip);
return 1;
else
return 0;
}
Output:
EXPERIMENT NO-10
Program:
#include<stdio.h>
#include<conio.h>
#include<string.h>
int k=0,z=0,i=0,j=0,c=0;
char a[16],ac[20],stk[15],act[10];
void check();
int main()
gets(a);
c=strlen(a);
strcpy(act,"SHIFT->");
if(a[j]=='i'&& a[j+1]=='d')
stk[i]=a[j];
stk[i+1]=a[j+1];
stk[i+2]='\0';
a[j]='';
a[j+1]='';
printf("\n$%s\t%s$\t%sid",stk,a,act);
check();
else
stk[i]=a[j];
stk[i+1]='\0';
a[j]='';
printf("\n$%s\t%s$\t%ssymbols",stk,a,act);
check();
getch();
void check()
strcpy(ac,"REDUCE TO E");
if(stk[z]=='i'&& stk[z+1]=='d')
stk[z]='E';
stk[z+1]='\0';
printf("\n$%s\t%s$\t%s",stk,a,ac);
j++;
stk[z]='E';
stk[z+1]='\0';
stk[z+2]='\0';
printf("\n$%s\t%s$\t%s",stk,a,ac);
i=i-2;
stk[z]='E';
stk[z+1]='\0';
stk[z+1]='\0';
printf("\n$%s\t%s$\t%s",stk,a,ac);
i=i-2;
stk[z]='E';
stk[z+1]='\0';
stk[z+1]='\0';
printf("\n$%s\t%s$\t%s",stk,a,ac);
i=i-2;
}
}
Output: