Tuesday, November 6, 2007

Operator Precedence Parser

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: