Three Address Code Generation
Three Address Code Generation
To write a C program to generate a three address code for a given expression.
ALGORITHM:
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct three
char data[10],temp[7];
}s[30];
void main()
char d1[7],d2[7]="t";
int i=0,j=1,len=0;
FILE *f1,*f2;
clrscr();
f1=fopen("sum.txt","r");
f2=fopen("out.txt","w");
1
while(fscanf(f1,"%s",s[len].data)!=EOF)
len++;
itoa(j,d1,7);
strcat(d2,d1);
strcpy(s[j].temp,d2);
strcpy(d1,"");
strcpy(d2,"t");
if(!strcmp(s[3].data,"+"))
fprintf(f2,"%s=%s+%s",s[j].temp,s[i+2].data,s[i+4].data);
j++;
else if(!strcmp(s[3].data,"-"))
fprintf(f2,"%s=%s-%s",s[j].temp,s[i+2].data,s[i+4].data);
j++;
for(i=4;i<len-2;i+=2)
itoa(j,d1,7);
strcat(d2,d1);
strcpy(s[j].temp,d2);
if(!strcmp(s[i+1].data,"+"))
fprintf(f2,"\n%s=%s+%s",s[j].temp,s[j-1].temp,s[i+2].data);
else if(!strcmp(s[i+1].data,"-"))
fprintf(f2,"\n%s=%s-%s",s[j].temp,s[j-1].temp,s[i+2].data);
2
strcpy(d1,"");
strcpy(d2,"t");
j++;
fprintf(f2,"\n%s=%s",s[0].data,s[j-1].temp);
fclose(f1);
fclose(f2);
getch();
Input: sum.txt
t1=in1+in2
t2=t1+in3
t3=t2-in4
out=t3
RESULT:
Thus a C program to generate a three address code for a given
expression is written, executed and the output is verified.