100% found this document useful (2 votes)
10K views

Three Address Code

The document describes a C program that generates three address code for expressions. The program takes in expressions with assignment, arithmetic, or relational operators and outputs the equivalent three address code. Three address code uses at most three operands and one operator per instruction, with computed values stored in temporary variables. The program demonstrates generating three address code for sample expressions involving various operators.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
100% found this document useful (2 votes)
10K views

Three Address Code

The document describes a C program that generates three address code for expressions. The program takes in expressions with assignment, arithmetic, or relational operators and outputs the equivalent three address code. Three address code uses at most three operands and one operator per instruction, with computed values stored in temporary variables. The program demonstrates generating three address code for sample expressions involving various operators.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

EXPERIMENT NO-4:

AIM:
Write a C program to generate three address code.

Three address code is a type of intermediate code which is easy to generate and can be easily
converted to machine code.It makes use of at most three addresses and one operator to represent an
expression and the value computed at each instruction is stored in temporary variable generated by
compiler. The compiler decides the order of operation given by three address code.

General representation :
a = b op c
Where a, b or c represents operands like names, constants or compiler generated temporaries and op
represents the operator
Ex:
a := (-c * b) + (-c * d)  

Three-address code is as follows:


t1 := -c
t2 := b*t1
t3 := -c
t4 := d * t3
t5 := t2 + t4
a := t5

PROGRAM:
#include<stdio.h>
#include<string.h>
void pm();
void plus();
void div();
int i,ch,j,l,addr=100;
char ex[10], exp[10] ,exp1[10],exp2[10],id1[5],op[5],id2[5];
void main()
{
clrscr();
while(1)
{
printf("\n1.Assignment\n2.Arithmetic\n3.Relational\n4.Exit\nEnter the choice:");
scanf("%d",&ch);
switch(ch)
{
case 1:
printf("\nEnter the expression with assignment operator:");
scanf("%s",exp);
l=strlen(exp);
exp2[0]='\0';
i=0;
while(exp[i]!='=')
{
i++;
}
strncat(exp2,exp,i);
strrev(exp);
exp1[0]='\0';
strncat(exp1,exp,l-(i+1));
strrev(exp1);
printf("Three address code:\ntemp=%s\n%s=temp\n",exp1,exp2);
break;

case 2:
printf("\nEnter the expression with arithmetic operator:");
scanf("%s",ex);
strcpy(exp,ex);
l=strlen(exp);
exp1[0]='\0';

for(i=0;i<l;i++)
{
if(exp[i]=='+'||exp[i]=='-')
{
if(exp[i+2]=='/'||exp[i+2]=='*')
{
pm();
break;
}
else
{
plus();
break;
}
}
else if(exp[i]=='/'||exp[i]=='*')
{
div();
break;
}
}
break;

case 3:
printf("Enter the expression with relational operator");
scanf("%s%s%s",&id1,&op,&id2);
if(((strcmp(op,"<")==0)||(strcmp(op,">")==0)||(strcmp(op,"<=")==0)||(strcmp(op,">=")==0)||
(strcmp(op,"==")==0)||(strcmp(op,"!=")==0))==0)
printf("Expression is error");
else
{
printf("\n%d\tif %s%s%s goto %d",addr,id1,op,id2,addr+3);
addr++;
printf("\n%d\t T:=0",addr);
addr++;
printf("\n%d\t goto %d",addr,addr+2);
addr++;
printf("\n%d\t T:=1",addr);
}
break;
case 4:
exit(0);
}
}
}

void pm()
{
strrev(exp);
j=l-i-1;
strncat(exp1,exp,j);
strrev(exp1);
printf("Three address code:\ntemp=%s\ntemp1=%c%ctemp\n",exp1,exp[j+1],exp[j]);
}
void div()
{
strncat(exp1,exp,i+2);
printf("Three address code:\ntemp=%s\ntemp1=temp%c%c\n",exp1,exp[i+2],exp[i+3]);
}
void plus()
{
strncat(exp1,exp,i+2);
printf("Three address code:\ntemp=%s\ntemp1=temp%c%c\n",exp1,exp[i+2],exp[i+3]);
}

INPUT/OUTPUT:
1. Assignment
2. Arithmetic
3. Relational
4. Exit
Enter the choice:1
Enter the expression with assignment operator:
a=b
Three address code:
temp=b
a=temp

1. Assignment
2. Arithmetic
3. Relational
4. Exit
Enter the choice:2
Enter the expression with arithmetic operator:
a+b-c
Three address code:
temp=a+b
temp1=temp-c
1. Assignment
2. Arithmetic
3. Relational
4. Exit
Enter the choice:2
Enter the expression with arithmetic operator:
a-b/c
Three address code:
temp=b/c
temp1=a-temp

1. Assignment
2. Arithmetic
3. Relational
4. Exit

Enter the choice:2


Enter the expression with arithmetic operator:
a*b-c
Three address code:
temp=a*b
temp1=temp-c

1. Assignment
2. Arithmetic
3. Relational
4. Exit

Enter the choice:2


Enter the expression with arithmetic operator:a/b*c
Three address code:
temp=a/b
temp1=temp*c

1. Assignment
2. Arithmetic
3. Relational
4. Exit

Enter the choice:3


Enter the expression with relational operator
a<=b

100 if a<=b goto 103


101 T:=0
102 goto 104
103 T:=1
1. Assignment
2. Arithmetic
3. Relational
4. Exit

Enter the choice:4

You might also like