Sunday, April 5, 2009

source code

#include
#include
struct regis
{
char var;
}
reg[10];
int noreg;
char st[10][10];
char *opcode[10]={"add","sub","mul","div","assign"};
char oper[10]={'+','-','*','/','='};
char *toopcode(char opert)
{
int i;
for(i=0;i<5;i++)
{
if(oper[i]==opert)
{
return(opcode[i]);
}}
return(0);
}
int isinregister(char var)
{
int i;
for(i=1;i<=noreg;i++)
{
if(var==reg[i].var)
{
return(i);
}}
return(0);
}
void main()
{
int i,n,j,k,regno2=0,regno1=1,nost;
clrscr();
printf("\n CODE GENERATOR");
printf("\n");
printf("ENTER THE NO OF STATEMENT:");
scanf("%d",&nost);
printf("ENTER THE STATEMENTS: \n");
j=0;
for(i=0;i{
scanf("%s",st[i]);
}
printf("\n\t STATEMENT \t TARGETCODE");
for(i=0;i{
printf("\n\n\t %s",st[i]);
n=strlen(st[i])-1;
printf("\n\t\t\t\tmov%c,r%d",st[i][n],j++);
if(regno2!=isinregister(st[i][n-2]))
{
printf("\n\t\t\t\t %s%c=,r%d",toopcode(st[i][n-1]),st[i][n],j++);
reg[regno1].var=st[i][n-4];
}
else
{
printf("\n\t\t\t\t %s%c,r%d",toopcode(st[i][n-1]),st[i][n-2],k);
reg[regno1].var=st[i][n-4];
}
k=j-1;
printf("\n\t\t\tmov r%d,%c",k,,st[i][n-4]);
}
getch();
}

OUTPUT:

Code generator
Enter the no of statement 2
Enter the statements:
a=b+c
e=d+f
STATEMENT TARGETCODE
a=b+c mov c,r0
add b,r0
mov r0,a

e=d+f mov f,r1
add d,r1
mov r1,e