TYBcs OS-Syspro Slip 15-1 | IProgramX

INPUT FILE:


MACRO
INCR &X=,&Y=,&OP=ADD,&REG=AREG
MOVER &REG, &X
&OP &REG, &Y
MOVEM &REG, &X
MEND




PROGRAM:


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct MNT
{
char mname[10];
int mdtp,kpdtp,pp,kp;
}mnt;

struct MDT
{
char op[10],value[30];
}mdt[10];

struct KPDT
{
char key[10],def[10];
}kpdt[5];

char pnt[10][10];

int pnt_cnt,mdt_cnt,kpdt_cnt;

void print_mnt()
{
printf("#\tmname\tmdtp\tkpdtp\t#pp\t#kp\n");

printf("1\t%s\t%d\t%d\t%d\t%d\n",
     mnt.mname,mnt.mdtp,mnt.kpdtp,mnt.pp,mnt.kp);
}

void print_mdt()
{
int i;

printf("#\topcode\tvalue\n");

for(i=0;i<mdt_cnt;i++)
    printf("%d\t%s\t%s\n",
i+1,mdt[i].op,mdt[i].value);
}

void print_kpdt()
{
int i;

printf("#\tkey\tdef\n");

for(i=0;i<kpdt_cnt;i++)
printf("%d\t%s\t%s\n",
i+1,kpdt[i].key,kpdt[i].def);
}

int search(char *s)
{
int i;

for(i=0;i<pnt_cnt;i++)
if(strcmp(pnt[i],s)==0)
return i;

return -1;
}

void make_pnt_kpdt(char *s)
{
int i=0,j=0,k=0,f=0;
char temp1[10],temp2[10]="";

strcat(s,",");

while(s[i]!='\0')
{
if(s[i]=='=')
{
temp1[j]='\0';
j=0;
f=1;
}
else if(s[i]==',')
{
temp2[k]='\0';
k=0;
f=0;
strcpy(pnt[pnt_cnt++],temp1);
if(strlen(temp2)>0)
{
strcpy(kpdt[kpdt_cnt].key,temp1);
strcpy(kpdt[kpdt_cnt++].def,temp2);
}
}
else
{
if(f==0)
temp1[j++]=s[i];
else
temp2[k++]=s[i];
}

i++;
}

mnt.pp = pnt_cnt - kpdt_cnt;
mnt.kp = kpdt_cnt;
}

int main()
{
FILE *fp;
char fname[20],buff[80],t1[20],t2[20],t3[20];
int i,j;

printf("Enter source file name:");
scanf("%s",fname);

fp=fopen(fname,"r");
if(fp==NULL)
{
printf("File %s not found\n",fname);
exit(1);
}

while(fgets(buff,80,fp)!=NULL)
{
sscanf(buff,"%s %s %s",t1,t2,t3);

if(strcmp(t1,"MACRO")==0)
{
fgets(buff,80,fp);
sscanf(buff,"%s %s",t1,t2);
strcpy(mnt.mname,t1);
mnt.mdtp = mnt.kpdtp = 1;
make_pnt_kpdt(t2);
}
else if(strcmp(t1,"MEND")==0)
{
strcpy(mdt[mdt_cnt++].op,t1);
}
else
{
if(t1[0]=='&')
{
i = search(t1);
sprintf(mdt[mdt_cnt].op,"(P, %d)",i+1);
}
else
{
strcpy(mdt[mdt_cnt].op,t1);
}

t2[strlen(t2)-1]='\0';
i = search(t2);
j = search(t3);
sprintf(mdt[mdt_cnt++].value,"(P, %d), (P, %d)",i+1,j+1);
}
}

fclose(fp);

print_mnt();
print_kpdt();
print_mdt();

return 0;
}






















Post a Comment

0 Comments