0% found this document useful (0 votes)
48 views

Three Address Code Generation

The document describes an algorithm to generate three address code for a given expression in C. It reads the expression from a file, calculates the number of tokens, compares each token to an operator, and concatenates the previous and next tokens to a temporary value while printing the three address code. It then replaces the left operand with the final temporary value. The program implements this algorithm by reading the input expression from a file, generating unique temporary variables for each operation, and writing the three address code to an output file. It takes an example input of "out = in1 + in2 + in3 - in4" and generates the corresponding three address code output.

Uploaded by

ksai.mb
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
48 views

Three Address Code Generation

The document describes an algorithm to generate three address code for a given expression in C. It reads the expression from a file, calculates the number of tokens, compares each token to an operator, and concatenates the previous and next tokens to a temporary value while printing the three address code. It then replaces the left operand with the final temporary value. The program implements this algorithm by reading the input expression from a file, generating unique temporary variables for each operation, and writing the three address code to an output file. It takes an example input of "out = in1 + in2 + in3 - in4" and generates the corresponding three address code output.

Uploaded by

ksai.mb
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 3

AIM :

            To write a C program to generate a three address code for a given expression.
ALGORITHM:

Step1: Begin the program


Step2 : The expression is read from the file using a file pointer
Step3 : Each string is read and the total no. of strings in the file is calculated.
Step4: Each string is compared with an operator; if any operator is seen then the
previous string and next string are concatenated and stored in a first temporary value
and the three address code expression is printed
Step5 : Suppose if another operand is seen then the first temporary value is
concatenated to the next string using the operator and the expression is printed.
Step6 : The final temporary value is replaced to the left operand value.
Step7 : End the program.

PROGRAM:  //program for three address code generation


#include<stdio.h>

#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

out = in1 + in2 + in3 - in4

Output  :       out.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.

You might also like