Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

Ai

m:Wr
it
eapr
ogr
am t
oDesi
gnLALRBot
tom upPar
ser
.

#include<st dio.h>
#include<coni o. h>
#include<st dli
b. h>
#include<st ri
ng. h>
voidpush( char* ,
int* ,char );
charst ackt op( char* );
voidi spr oduct (char ,char );
i
nti ster(char );
i
nti snter (char );
i
nti sstat e(char );
voider ror ();
voidi sreduce( char ,char );
charpop( char* ,int* );
voidpr int t
( char* ,i
nt* ,
char[ ],
i
nt);
voidr ep( char[ ],
int) ;
structact i
on{charr ow[ 6][
5] ;
};
constst ructact ionA[ 12] ={
{"
sf "
,"emp" ,"emp" ,"se" ,
"emp" ,"
emp"},
{"
emp" ,"sg" ,"
emp" ,
"emp" ,
"emp" ,"
acc"}
,
{"
emp" ,"rc","sh" ,
"emp" ,
"rc","
rc"},
{"
emp" ,"re","re","emp" ,"
re" ,
"re"},
{"
sf "
,"emp" ,"emp" ,"se" ,
"emp" ,"
emp"},
{"
emp" ,"rg","rg","emp" ,"r
g" ,"
rg"},
{"
sf "
,"emp" ,"emp" ,"se" ,
"emp" ,"
emp"},
{"
sf "
,"emp" ,"emp" ,"se" ,
"emp" ,"
emp"},
{"
emp" ,"sg" ,"
emp" ,
"emp" ,
"sl",
"emp"},
{"
emp" ,"rb","sh" ,
"emp" ,
"rb","
rb" }
,
{"
emp" ,"rb","rd","emp" ,"r
d" ,"
rd"},
{"
emp" ,"rf",
"rf",
"emp" ,
" r
f","rf
"}};
structgot ol {charr [3][4];};
constst ructgot ol G[ 12]={
{"
b" ,
"c",
"d" },
{"
emp" ,"emp" ,"emp" },
{"
emp" ,"emp" ,"emp" },
{"
emp" ,"emp" ,"emp" },
{"
i",
"c","
d" },
{"
emp" ,"emp" ,"emp" },
{"
emp" ,"j
","d" }
,
{"
emp" ,"emp" ,"k"},
{"
emp" ,"emp" ,"emp" },
{"
emp" ,"emp" ,"emp" }, }
;
chart er[6] ={'i'
,
'+','
*','
)'
,'
(',
'$'};
charnt er [
3] ={'E','
T','
F' }
;
charst at es[ 12] ={ '
a',
'b',
'c',
'd'
,'e'
,'
f'
,
'g'
,
'h'
,
'm'
,
'j
'
,'
k'
,'
l
'}
;
charst ack[ 100] ;

1603013064
PRANKURKOHLI 23
Ai
m:Wr
it
eapr
ogr
am t
oDesi
gnLALRBot
tom upPar
ser
.

i
ntt op=- 1;
chart emp[ 10] ;
structgr ammar{
charl ef t;
charr ight [5] ; };
constst ructgr ammarr l
[6]
={{'
E',
"e+T"
},{
'E'
,
"T"
},{
'T'
,
"T*
F"}
,{'
T'
,"
F"}
,{'
F'
,"
(E)
"},
{'
F'
,"
i"
},}
;
voidmai n( )
{chari np[ 80] ,
x,p,dl[80],
y,bl
='a'
;
i
nti =0, j,k,l,n,m, c,len;
clrscr ();
print f("Ent ert hei nput: "
);
scanf ("%s" ,inp) ;
l
en=st rl
en( inp) ;
i
np[ len] ='$' ;
i
np[ len+1] ='\ 0';
push( st ack, &t op,bl);
print f("\nst ack\ t\t
\tinput");
print t(
st ack, &t op, i
np,i)
;
do
{
x=inp[ i];
p=st ackt op( st ack) ;
i
spr oduct ( x,p) ;
i
f(st rcmp( temp, "emp" )==0)
error ();
i
f(st rcmp( temp, "acc")==0)
break;
else
{if(temp[ 0] ==' s')
{push( st ack, &top,inp[i])
;
push( st ack, &t op,temp[ 1]);
i
++;
}el se
{
i
f(temp[ 0] ==' r')
{j=isst at e( temp[ 1])
;
strcpy (temp, rl[j
-2].r
ight);
dl[0]=r l[
j-2] .left; dl[
1]='\0'
;
n=st rl
en( temp) ;
for(k=0; k<2* n;k++)
pop( stack, &t op) ;
for(m=0; dl [m] !='\0';
m++)
push( st ack, &t op,dl[
m] );
l
=t op;
y=st ack[ l-1];
i
sr educe( y ,dl[0]);
for(m=0; temp[ m] !
='
\ 0'
;m++)
1603013064
PRANKURKOHLI 24
Ai
m:Wr
it
eapr
ogr
am t
oDesi
gnLALRBot
tom upPar
ser
.

push( st ack, &top, temp[ m] );


}}}
print t
( st ack, &t op, i
np,i)
;
}
whi le(inp[ i]!='\
0' )
;
i
f(st rcmp( temp, "
acc" )==0)
print f
( "\ nacceptt heinput" );
else
print f
( "\ ndonotacceptt heinput"
);
get ch( );
}v oidpush( char* s,i
nt*sp,charit
em)
{
if(* sp==100)
print f
( "st acki sf ull")
;
else
{* sp=* sp+1;
s[*sp] =i tem;
}}charst ackt op( char* s)
{chari ;
i=s[ top] ;
retur ni ;
}
voi dispr oduct (charx, charp)
{
i
ntk, l
;
k=i st er (x) ;
l
=i sst at e( p) ;
strcpy (temp, A[l-1].row[k-1]);
}
i
nti ster (charx){
i
nti ;
for(i=0; i<6; i++)
i
f(x==t er [i])
retur ni +1;
retur n0;
}
i
nti snt er (charx)
{
i
nti ;
for(i=0; i<3; i++)
i
f(x==nt er [i])
retur ni +1;
retur n0;
}
i
nti sst at e(charp)
{
i
nti ;
1603013064
PRANKURKOHLI 25
Ai
m:Wr
it
eapr
ogr
am t
oDesi
gnLALRBot
tom upPar
ser
.

for(i=0;i<12; i
++)
i
f(p==st ates[ i
])
returni +1;
return0;
}v oider ror (
)
{
pr intf("er r
ori nthei nput" )
;
exit(0) ;
}
v oidi sreduce( charx, charp)
{
i
ntk, l;
k=i sst ate(x);
l=isnt er(p) ;
strcpy (temp, G[k-1].r[
l-
1] )
;
}
charpop( char* s,
int* sp)
{
chari tem;
i
f(* sp==- 1)
printf("st acki sempt y" )
;
else
{
i
tem=s[ *sp];
*sp=* sp-1;
}
ret urni tem;
}
v oidpr i
ntt(char* t,
int* p,
chari
np[
],
i
nti
)
{
i
ntr ;
pr intf("\n");
for (r=0;r<=* p;
r++)
rep( t,r);
printf("\t\t\t"
);
for(r=i;i
np[ r]!
='\0'
;r
++)
printf("%c" ,i
np[r]);
}
v oidr ep( chart []
,i
ntr)
{
charc;
c=t [r
];
swi t
ch( c)
{case' a':pr i
ntf("
0");
br eak;
case' b':printf
("1");
br eak;
1603013064
PRANKURKOHLI 26
Ai
m:Wr
it
eapr
ogr
am t
oDesi
gnLALRBot
tom upPar
ser
.

case'c'
: printf(
"2");
break;
case'd'
: printf(
"3");
break;
case'e'
: printf(
"4");
break;
case'f'
:pr i
nt f
("5")
;
break;
case'g'
: printf(
"6");
break;
case'h'
: printf(
"7");
break;
case'm': printf
("8")
;
break;
case'j
':printf("
9");
break;
case'k'
:pr i
nt f(
"10");
break;
case'l
':printf("
11");
break;
defaul
t:pr i
nt f
("%c",
t[r
])
;
break;
}}

1603013064
PRANKURKOHLI 27
Out
putofcpr
ogr
am t
oDesi
gnLALRBot
tom upPar
ser
.

1603013064
PRANKURKOHLI 28

You might also like