A1
#include<conio.h> #include<stdio.h> #define MAX 20 #include<string.h>
structsymbol
{
charsym[10]; int addr;
}S[MAX];
structlitab
{
charlit[10]; int addr;
}L[MAX];
voidprint_file(char*); void print_symtab(); void print_littab();
char optab[][6]={“STOP”,”ADD”,”SUB”,”MULT”,”MOVER”,”MOVEM”,”COMP”,”BC”,”DIV”,”READ”,” PRINT”};
charregtab[][5]={“AREG”,”BREG”,”CREG”,”DREG”};
charadtab[][7]={“START”,”END”,”ORIGIN”,”EQU”,”LTORG”};
charcondtab[][4]={“LT”,”LE”,”EQ”,”GT”,”GE”,”ANY”};
FILE*fs,*ft;
charbuffer[80],source[80],tok1[10],tok2[10],tok3[10],tok4[10],tok5[10]; int lc=0,sc=0,poolcnt=0,litcnt=0;
int pooltab[10];
intsearch_optab(char*s)
{
int i; for(i=0;i<11;i++)
{
if(strcmp(optab[i],s)==0)
{
returni;
}
}
return-1;
}
intsearch_regtab(char*s)
{
int i; for(i=0;i<4;i++)
{
if(strcmp(regtab[i],s)==0)
{
returni+1;
}
}
return-1;
}
intsearch_condtab(char*s)
{
int i; for(i=0;i<6;i++)
{
if(strcmp(condtab[i],s)==0)
{
return(i+1);
}
}
return-1;
}
intsearch_adtab(char*s)
{
int i; for(i=0;i<5;i++)
{
if(strcmp(adtab[i],s)==0)
{
returni+1;
}
}
return-1;
}
intsearch_symtab(char*s)
{
int i; for(i=0;i<sc;i++)
{
if(strcmp(S[i].sym,s)==0)
{
returni;
}
}
return-1;
}
intsearch_littab(char*s)
{
int i; for(i=pooltab[poolcnt];i<litcnt;i++)
{
if(strcmp(L[i].lit,s)==0)
{
returni;
}
}
return-1;
}
void pass1()
{
int p;
int n,i=0,j=0,k=0;
fs=fopen(source,”r”); if(fs==NULL)
{
printf(“\nfiledoesnotexist!!!!”); getch();
exit(0);
}
ft=fopen(“id.txt”,”w”); while(fgets(buffer,80,fs))
{
n=sscanf(buffer,”%s%s%s%s”,tok1,tok2,tok3,tok4); switch(n)
{
case1://ltorg,end
case2://start
i=search_adtab(tok1); if(i==2 || i==5)
{
for(j=pooltab[poolcnt];j<litcnt;j++)
{
L[j].addr=lc++;
}
lc–; pooltab[++poolcnt]=litcnt; fprintf(ft,”(AD,%02d)\n”,i); break;
}
i=search_adtab(tok1); if(i==1)
{
lc=atoi(tok2)-1;
fprintf(ft,”(AD,%02d)(C,%s)\n”,i,tok2); break;
}
case3:i=search_optab(tok1); if(i>=1 && i<=8)
{
tok2[strlen(tok2)-1]=’\0′; k=search_regtab(tok2);
//moverareg,=’5′ if(tok3[0]==’=’)
{
j=search_littab(tok3); if(j==-1)
{
strcpy(L[litcnt].lit,tok3);
fprintf(ft,”(IS,%02d)%d(L,%02d)\n”,i,k,litcnt); litcnt++;
}
else
{
fprintf(ft,”(IS,%02d)%d (L,%02d)\n”,i,k,j);
}
break;
}
else//moverareg,A
{
p=search_symtab(tok3); if(p==-1)
{
strcpy(S[sc].sym,tok3);
fprintf(ft,”(IS, %02d)%d (S,%02d)\n”,i,k,sc); sc++;
}
else
{
fprintf(ft,”(IS,%02d)%d (S,%02d)\n”,i,k,p);
}
break;
}
}
//A DS 2 if(strcmp(tok2,”DS”)==0)
{
p=search_symtab(tok1); if(p==-1)
{
strcpy(S[sc].sym,tok1); S[sc].addr=lc;
fprintf(ft,”(DL, 2) (C,%s)\n”,tok3); sc++;
}
else
{
S[p].addr=lc;
fprintf(ft,”(DL,2) (C, %s)\n”,tok3);
}
lc=lc+atoi(tok3)-1; break;
}
}
lc++;
}
fcloseall();
}
voidprint_file(char*target)
{
FILE *fp; fp=fopen(target,”r”); if(fp==NULL)
{
printf(“\nfiledoesnotexist!!!”); getch();
exit(0);
}
printf(“\n\n”); while(fgets(buffer,80,fp))
{
printf(“%s”,buffer);
}
fclose(fp); getch();
}
void print_littab()
{
int i;
printf(“\nLITERAL\tADDRESS\n”); for(i=0;i<litcnt;i++)
{
printf(“%s\t%d\n”,L[i].lit,L[i].addr);
}
}
void print_symtab()
{
int p=0;
printf(“\nSYMBOL\tADDRESS\n”); while(p<sc)
{
printf(“%s\t%d\n”,S[p].sym,S[p].addr); p=p+1;
}
}
voidmain()
{
clrscr();
printf(“\nentersourcefilename:\n”); scanf(“%s”,source);
printf(“\nsourcecodeis:\n”); print_file(source);
pass1();
printf(“\n\nliteraltable:\n”); print_littab();
printf(“\n\nsymboltable:\n”); print_symtab();
printf(“\nintermediatecodeis:\n”); print_file(“id.txt”);
getch();
getch();
}
#include<stdio.h> #include<conio.h> #define MAX 20
structsymbol
{
}S[MAX]={
charsym[10]; int addr;
{“A”,103},
{“B”,106},
{“C”,107}
};
charoptab[][6]={“STOP”,”ADD”,”SUB”,”MULT”,”MOVER”,”MOVEM”,”COMP”,”BC”,”DIV”,”READ”,”PRINT”}; char regtab[][5]={“AREG”,”BREG”,”CREG”,”DREG”};
charcondtab[][4]={“LT”,”LE”,”EQ”,”GT”,”GE”,”ANY”};
charadtab[][7]={“START”,”END”,”ORIGIN”,”EQU”,”LTORG”};
FILE*fs,*ft;
charsource[20],buffer[80],tok1[10],tok2[10],tok3[10],tok4[10],tok5[10]; int lc,ec=0,sc=3;
intsearch_optab(char*s)
{
int i; for(i=0;i<11;i++)
{
if(strcmp(optab[i],s)==0) return i;
}
}
intsearch_symb(char*s)
{
return(-1);
int i; for(i=0;i<sc;i++)
{
if(strcmp(S[i].sym,s)==0) return i;
}
}
intsearch_regtab(char*s)
{
return(-1);
int i; for(i=0;i<4;i++)
{
if(strcmp(regtab[i],s)==0) return (i+1);
}
}
intsearch_condtab(char*s)
{
return(-1);
int i; for(i=0;i<6;i++)
{
if(strcmp(condtab[i],s)==0) return (i+1);
}
intsearch_adtab(char*s)
{
}
return(-1);
int i; for(i=0;i<5;i++)
{
if(strcmp(adtab[i],s)==0)
return(i+1);
}
}
voidprint_file(char*target)
{
return(-1);
FILE *fp; fp=fopen(target,”r”); if(fp==NULL)
{
printf(“\nErrorInOpeningFile”); getch();
exit(0);
}
printf(“\n\n”); while(fgets(buffer,80,fp))
{
printf(“%s”,buffer);
}
}
voidpasstwo()
{
//printf(“%d”,lc); fclose(fp);
int i,j,k,n,p; chartemp[20];
if((fs=fopen(“ic.txt”,”r”))==NULL)
{
printf(“\n\nErrorInOpeningic.txt”); getch();
exit(0);
}
if((ft=fopen(“target.txt”,”w”))==NULL)
{
printf(“\n\nErrorInOpeningic.txt”); getch();
exit(0);
}
lc=0; while(fgets(buffer,80,fs))
{
n=sscanf(buffer,”%s%s%s%s%s”,tok1,tok2,tok3,tok4,tok5); switch(n)
{
case4:
if(strcmp(tok1,”(AD,”)==0)
{
tok4[strlen(tok4)-1]=’\0′; lc=atoi(tok4)-1;
break;
}
if(strcmp(tok1,”(DL,”)==0)
{
tok2[strlen(tok2)-1]=’\0′;
tok4[strlen(tok4)-1]=’\0′; i=atoi(tok2);j=atoi(tok4);
if(i==2) //ADS2
{
for(k=0;k<j;k++)
{
fprintf(ft,”%d)\n”,lc++);
}
lc–;
}
else //ONEDC1
{
}
break;
fprintf(ft,”%d)%d\n”,lc,j);
}
case5:
tok2[strlen(tok2)-1]=’\0′;
tok5[strlen(tok5)-1]=’\0′; i=atoi(tok2);j=atoi(tok3);k=atoi(tok5); if(strcmp(tok4,”(S,”)==0)
{
fprintf(ft,”%d)%02d%d%03d\n”,lc,i,j,S[k].addr);
}
break;
}//switch lc++;
}//while
fcloseall();
}
voidprint_symb()
{
}
voidmain()
{
int p=0; printf(“\n\tsymbol\taddress”);
while(p<sc)
{
printf(“\n\t%s\t%d”,S[p].sym,S[p].addr); p=p+1;
}
clrscr();
printf(“\n\n\tSYMBOLTABLE::::\n”); print_symb();
printf(“\n\n\n\tINTERMEDIATECODE::::\n”); print_file(“ic.txt”);
getch();
passtwo();
}
#include<stdio.h> #include<conio.h> #include<string.h> #include<ctype.h> #include<process.h> #include<stdlib.h>
typedefstructmnt//MacroNameTable
{
charmname[10]; int mdt_index;
}mnt;
char mdt[100][40]; //MacroDefintionTable mnt mn[10];
voidmain()
{
intmdt_pntr=0,mnt_pntr=0,v_pntr=0,i,j,loc_cnt=0,flag=0;
chartemp[100],tkn[10][10],v[15][15],temp1[100],tkn1[10][10]; FILE *fp,*fp1;
clrscr(); fp=fopen(“abc.txt”,”r”);
fp1=fopen(“def.txt”,”w+”);
if(fp==NULL)
{
printf(“Cannotopenoutputfile.\n”); exit(0);
}
while(fgets(temp,40,fp))
{
for(i=0;i<4;i++) strcpy(tkn[i],””);
sscanf(temp,”%s%s%s%s”,tkn[0],tkn[1],tkn[2],tkn[3]);
if(strcmpi(tkn[0],”macro”)!=0)
printf(“%s%s%s%s\t\t\n”,tkn[0],tkn[1],tkn[2],tkn[3]);//
asitisprintbcozasseblerstatement
else
{
for(i=0;i<4;i++) strcpy(tkn[i],””); fgets(temp,40,fp);
sscanf(temp,”%s%s%s%s”,tkn[0],tkn[1],tkn[2],tkn[3]); strcpy(mdt[mdt_pntr++],temp);
|DepartmentComputerEngineering,SIT,Lonavala
strcpy(mn[mnt_pntr].mname,tkn[0]); mn[mnt_pntr].mdt_index=mdt_pntr-1; mnt_pntr++;
//**************************************************
for(i=1;i<4;i++) //storingparametersinv[]array
{
if(tkn[i][0]==’&’)
{
strcpy(v[v_pntr],tkn[i]); v_pntr++;
}
}
//************************* while(fgets(temp,40,fp))
{
for(i=0;i<4;i++) strcpy(tkn[i],””);
sscanf(temp,”%s%s%s%s”,tkn[0],tkn[1],tkn[2],tkn[3]);
if(strcmp(tkn[0],”mend”)==0) //ifmend,storeinMDT
{
strcpy(mdt[mdt_pntr++],temp); loc_cnt++;
break;
}
for(i=0;i<v_pntr;i++)
{
if(strcmp(tkn[2],v[i])==0)
{sprintf(temp,”%s%s%d%s\n”,tkn[0],tkn[1],i,tkn[3]); strcpy(mdt[mdt_pntr++],temp);
sprintf(temp,”%s%s%d%s\n”,tkn[0],tkn[1],i,tkn[3]);
break;
}
}
}
v_pntr=0;
}
}
printf(“\n\n\t\t\tMNTTABLE\n\n”); printf(“\tmntindex\tmntname\tmdtindex\n”);
printf(”
\n\n”);
for(i=0;i<mnt_pntr;i++) printf(“\t%d\t\t%s\t\t\t%d\n”,i,mn[i].mname,mn[i].mdt_index
);
|DepartmentComputerEngineering,SIT,Lonavala
getch(); printf(“\n\n\n”);
printf(“\t\t\tMDTTABLE\n\n”); printf(“\tmdtindex\tmacrodef\n”);
printf(” \n\n”); for(i=0;i<mdt_pntr;i++)
{
fprintf(fp1,”\t%d\t\t%s”,i,mdt[i]); printf(“\t%d\t\t%s”,i,mdt[i]);
}
getch(); fcloseall();
//* PASS-2
clrscr();
printf(“\n\t\t—-Expansionofmacro \n\n”);
fp=fopen(“abc.txt”,”r”);
fp1=fopen(“def.txt”,”r”); printf(fgets(temp,40,fp));
while(fgets(temp,40,fp)) //Skippingallmacros
{
if(strcmp(“mend\n”,temp)==0)
{
loc_cnt–;
}
if(loc_cnt==0) break;
}
while(fgets(temp,40,fp))
{flag=0;rewind(fp1); for(i=0;i<4;i++) strcpy(tkn[i],””);
sscanf(temp,”%s%s%s%s”,tkn[0],tkn[1],tkn[2],tkn[3]); for(i=0;i<mnt_pntr;i++) //Checkingwithallmacro
names
{
if(strcmp(mn[i].mname,tkn[0])==0) //ifmacro
{flag=1;
while(fgets(temp1,40,fp1)) //useit’sdef.
{
sscanf(temp1,”%s%s%s%s”,tkn1[0],tkn1[1],tkn1[2],
tkn1[3],tkn1[4]); if(atoi(tkn1[0])==mn[i].mdt_index)//pointingto
def.
{
while(fgets(temp1,40,fp1))
{
sscanf(temp1,”%s%s%s%s”,tkn1[0],tkn1[1],tkn1[2],
tkn1[3],tkn1[4]);
if(strcmp(tkn1[1],”mend”)==0) break;
|DepartmentComputerEngineering,SIT,Lonavala
if(strcmp(tkn1[3],”0″)==0)
{
sprintf(temp1,”%s%s%s%s”,tkn1[1],tkn1[2]
,tkn[1]);
}
if(strcmp(tkn1[3],”1″)==0)
{
sprintf(temp1,”%s%s%s%s”,tkn1[1],tkn1[2]
,tkn[2]);
}
if(strcmp(tkn1[3],”2″)==0)
{
sprintf(temp1,”%s%s%s%s”,tkn1[1],tkn1[2]
,tkn[3]);
}
printf(“%s\n”,temp1);
}
flag=1;
}
}
break;
}
}
if(flag==0) printf(“%s”,temp);
}
getch();
}