Sunday, February 12, 2012

THREE ADDRESS CODE GENERATION [ System Software Lab ]











Ex. No.: 12

THREE ADDRESS CODE GENERATION


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");
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);
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.











Ex. No.: 13

GENERATION OF ASSEMBLY LANGUAGE INSTRUCTION FROM THREE ADDRESS CODE


AIM :
            To write a C program to generate an assembly language instruction from three address code.

ALGORITHM:

Step1 : Begin the program
Step2 : The file containing the three address code is given as input to this program
Step3 : Each string is read from the file
Step4 : In an expression the string the left of the operator is printed with the ‘LDA’ string.
Step5 : Next if the operator is ‘+’ then ‘ADO’ is printed else ‘SUB’ is printed followed  by the string to the right of the operator.
Step6 : Then ‘STA’ string is printed followed by the string value left of the ‘=’ operator
Step7 : .End of the program

PROGRAM: //GENERATION OF ASSEMBLY LANGUAGE INSTRUCTION FROM THREE ADDRESS CODE

#include<stdio.h>
#include<conio.h>
#include<string.h>
struct three
{
char data[10],temp[7];
}s[30];
void main()
{
            char *d1,*d2;
            int i=0,len=0;
            FILE *f1,*f2;
            clrscr();
            f1=fopen("exe1.txt","r");
            f2=fopen("exe2.txt","w");
            while(fscanf(f1,"%s",s[len].data)!=EOF)
            len++;
            for(i=0;i<=len;i++)
            {
             if(!strcmp(s[i].data,"="))
             {
             fprintf(f2,"\nLDA\t%s",s[i+1].data);
             if(!strcmp(s[i+2].data,"+"))
             fprintf(f2,"\nADD\t%s",s[i+3].data);
             if(!strcmp(s[i+2].data,"-"))
             fprintf(f2,"\nSUB\t%s",s[i+3].data);
             fprintf(f2,"\nSTA\t%s",s[i-1].data);
             }
     }
     fclose(f1);
     fclose(f2);
     getch();
 }

Input: exe1.txt

t1 = in1 + in2
t2 = t1 + in3
t3 = t2 - in4
out = t3

Output: exe2.txt
LDA    in1
ADD   in2
STA    t1
LDA    t1
ADD   in3
STA    t2
LDA    t2
SUB    in4
STA    t3
LDA    t3
STA    out

RESULT:
            Thus a   C program to generate a assembly language instruction from three address code is written, executed and the output is verified.

27 comments:

  1. Sir,The social media plugin used on the left side of the page is very annoying since it blocks the view of the content.
    I think it is better to either remove it or replace with a small one.

    ReplyDelete
  2. This program has conio.h related errors

    ReplyDelete
  3. iota() is not declared and defined in code.

    ReplyDelete