Program : 3 Address Conversion
# include<stdio.h>
# include<conio.h>
# include<string.h>
void main() //main function
{
int i,j,ctr,n,k,l,f,z,m1;
char exp[30];
char temp[8];
char m[10]={'P','Q','R','S','T','U','V','W','X','Y'};
clrscr();
ctr=n=k=l=f=z=m1=0; //initialize variables as 0
printf("Enter the expression");
gets(exp); //get input expression
while(strlen(exp)!=5)
{
for(i=2;i<strlen(exp);i++)
{
if(exp[i]=='(') //if scanned character is (
{
k=i;
j=0;
while(exp[k+1]!=')') //until a ) is reached
{
temp[j]=exp[k+1];
j++; //increment j and k
k++;
}
exp[i]=m1[m];
temp[j]='\0';
printf("\n%c=%s",m1[m],temp);
m1++;
ctr=l;
n=i+1;
while(exp[ctr+n-1]!=')')
{
ctr++;
}
for(z=n,f=n+ctr;f<strlen(exp);f++,z++)
{
exp[z]=exp[f];
}
exp[z]='\0';
}
}
for(i=2;i<strlen(exp);i++)
{
if((exp[i]=='+')||(exp[i]=='-')) //if character is a + or - operator
{
k=i;
j=0;
for(k=i-1;k<i+2;k++)
{
temp[j]=exp[k];
j++;
}
exp[i-1]=m1[m];
temp[j]='\0';
printf("\n%c=%s",m1[m],temp);
m1++;
for(z=i;z<strlen(exp);z++)
{
exp[z]=exp[z+2];
}
exp[z]='\0';
}
for(i=2;i<strlen(exp);i++)
{
//if character is a * or / operator
if((exp[i]=='*')||(exp[i]=='/'))
{
k=i;
j=0;
for(k=i-1;k<i+2;k++)
{
temp[j]=exp[k];
j++;
}
exp[i-1]=m1[m];
temp[j]='\0';
printf("\n%c=%s",m1[m],temp);
m1++;
for(z=i;z<strlen(exp);z++)
{
exp[z]=exp[z+2];
}
exp[z]='\0'; //initialize final character as \0
}
}
}
}
printf("\n%s",exp);
getch();
}
0 comments:
Post a Comment