Program : Operator Precedence Parser
#include<stdio.h>
#include<conio.h>
#include<string.h>
void main() //main function
{
int i,j=0,count=0,n,s,k,d=0,f,loc=0,stlen=0,mj=0;
char st[10],in[20],stack[10];
clrscr();
printf("ENTER THE LANGUAGE TO BE REDUCED\n");
gets(in); //get the input language
n=strlen(in); //get string length
for(i=0;i<n;i++) //until end of string
{
if(in[i]==' ')
break;
else if(in[i]=='+'||in[i]=='-'||in[i]=='*'||in[i]=='/')
{
stack[j]=in[i];
st[d]=in[i];
j++;
d++;
}
else if(in[i]=='i')
{
stack[j]='E';
j++;
}
}
st[d]='\0';
stlen=d;
stack[j]='\0';
puts(stack);
puts(st);
i=0;
j=0;
while(st[i]!=' ')
{
count=0;
if(st[i]=='+'||st[i]=='-')
{
while(st[j]!=' ')
{
if(st[j]=='*'||st[j]=='/')
{
count++;
loc=j;
break;
}
else
{
j++;
}
}
if(count!=0)
{
st[j]=' ';
j=(2*(loc+1))-1;
for(mj=loc;mj<stlen;mj++)
{
st[mj]=st[mj+1];
}
stlen--;
for(mj=j;mj<strlen(stack);mj++)
{
stack[mj]=stack[mj+2];
stack[mj+1]=stack[mj+3];
}
puts(stack);
puts(st);
}
else
{
st[i]=' ';
j=((2*(i+1))-1);
for(mj=i;mj<stlen;mj++)
{
st[mj]=st[mj+1];
}
stlen--;
for(mj=j;mj<strlen(stack);mj++)
{
stack[mj]=stack[mj+2];
stack[mj+1]=stack[mj+3];
}
puts(stack);
}
}
else if(st[i]=='*'||st[i]=='/')
{
while(st[j]!=' ')
{
if(st[j]=='*'||st[j]=='/')
{
j++;
}
else break;
}
st[j]=' ';
j=0;
while(st[j]!=' ')
{
if(st[j]=='*'||st[j]=='/')
{
j++;
}
else break;
}
stack[j]=stack[j+2];
stack[j+1]=stack[j+3];
puts(stack);
}
}
puts(stack);
getch();
} //end of main function
0 comments:
Post a Comment