Skip to content

Commit 364b7a5

Browse files
Create 4.c
1 parent 965dc99 commit 364b7a5

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

4.c

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
#include<stdio.h>
2+
#include<string.h>
3+
int k=0,z=0,i=0,j=0,c=0; char a[16],ac[20],stk[15],act[10];
4+
void check();
5+
int main()
6+
{
7+
puts("GRAMMAR is E->E+T \n T->T*F \n F->(E) \n F->id");
8+
puts("enter input string ");
9+
gets(a);
10+
c=strlen(a);
11+
strcpy(act,"SHIFT->");
12+
puts("stack \t input \t action");
13+
for(k=0,i=0; j<c; k++,i++,j++)
14+
{
15+
if(a[j]=='i' && a[j+1]=='d')
16+
{
17+
printf("\n$%s\t%s$\t%sid",stk,a,act);
18+
stk[i]=a[j];
19+
stk[i+1]=a[j+1];
20+
stk[i+2]='\0';
21+
a[j]=' ';
22+
a[j+1]=' ';
23+
24+
check();
25+
}
26+
else
27+
{
28+
stk[i]=a[j];
29+
stk[i+1]='\0';
30+
a[j]=' ';
31+
check();
32+
}
33+
}
34+
}
35+
void check()
36+
{
37+
strcpy(ac,"REDUCE");
38+
for(z=0;z<c;z++)
39+
if(stk[z]=='(' && stk[z+1]=='E' && stk[z+2]==')')
40+
{
41+
stk[z]='F';
42+
stk[z+1]='\0';
43+
stk[z+2]='\0';
44+
printf("\n$%s\t%s$\t%s",stk,a,ac);
45+
i=i-2;
46+
}
47+
for(z=0;z<c;z++)
48+
if(stk[z]=='i' && stk[z+1]=='d')
49+
{
50+
51+
printf("\n$%s\t%s$\t%s",stk,a,ac);
52+
stk[z]='F';
53+
stk[z+1]='\0';
54+
printf("\n$%s\t%s$\t%s",stk,a,ac);
55+
j++;
56+
}
57+
for(z=0;z<c;z++)
58+
{
59+
if(stk[z]=='T' && stk[z+1]=='*' && stk[z+2]=='F')
60+
{
61+
stk[z]='T';
62+
stk[z+1]='\0';
63+
stk[z+2]='\0';
64+
printf("\n$%s\t%s$\t%s",stk,a,ac);
65+
i=i-2;
66+
}
67+
else if(stk[z]=='F')
68+
{
69+
stk[z]='T';
70+
if(a[j+1]!='*')
71+
printf("\n$%s\t%s$\t%s",stk,a,ac);
72+
else
73+
printf("\n$%s\t%s$\t%ssymbol",stk,a,act);
74+
}
75+
}
76+
for(z=0;z<c;z++)
77+
{
78+
if(stk[z]=='E' && stk[z+1]=='+' && stk[z+2]=='T' && stk[z+3]=='*') break;
79+
if(stk[z]=='E' && stk[z+1]=='+' && stk[z+2]=='T' && a[j+1]=='*') break;
80+
if((stk[z]=='E' && stk[z+1]=='+' && stk[z+2]=='T'))
81+
{
82+
stk[z]='E';
83+
stk[z+1]='\0';
84+
stk[z+2]='\0';
85+
if(a[j+1]!='\0'){
86+
printf("\n$%s\t%s$\t%s",stk,a,ac);
87+
break;
88+
}
89+
90+
else
91+
printf("\n$%s\t%s$\t%s",stk,a,"ACCEPT");
92+
i=i-2;
93+
}
94+
if(stk[z]=='T' && stk[z+1]=='*')break;
95+
if(stk[z]=='T' && a[j+1]=='*')break;
96+
if(stk[z]=='T')
97+
{
98+
stk[z]='E';
99+
if(a[j+1]=='\0')
100+
printf("\n$%s\t%s$\t%s",stk,a,"ACCEPT");
101+
else if(a[j+1]=='+')
102+
printf("\n$%s\t%s$\t%ssymbol",stk,a,act);
103+
}
104+
}
105+
}

0 commit comments

Comments
 (0)