Tuesday, November 4, 2014

Symbol Table creation in C

Source file:

#include<stdio.h>
#include<string.h>
void print();
FILE * f,*fp;
struct symbol
{
int address;
char label[15],opcode[15],operand[15];
}s[20];
int count=0;
int dupcheck(int m)
{
int i;
for(i=0;i<=m-1;i++)
{
if(strcmp(s[i].label,s[m].label))
return 1;
else return 0;
}
}
void delete()
{
int i=0;
char lab[15],ch[10];
printf("Enter the value to delete :");
scanf("%s",lab);
while(strcmp(s[i].label,lab))
{
i++;
}
strcpy(s[i].label,"");
print();
}
void search()
{
char sym[15];
printf("\n Enter the sym to Search :");
scanf("%s",sym);
int i,h;
for(i=0;i<count;i++)
{
if(strcmp(s[i].label,sym)==0)
h=1;
}
if(h==1)
{
printf("\n Element Present.");
}
else printf("\n False.");
}
void insert()
{
int i;
printf("\nEnter the value to insert :");
char lab[15];
scanf("%s",lab);
strcpy(s[count].label,lab);
count++;
for(i=0;i<count;i++)
printf("%s",s[i].label);
print();
}
void mod()
{
int i;
char lab[15],lab1[15];
printf("\n Enter the value to modify");
scanf("%s",lab);
printf("\n Enter the new value :");
scanf("%s",lab1);
for(i=0;i<count;i++)
{
if(strcmp(s[i].label,lab)==0)
strcpy(s[i].label,lab1);
}
print();
}
void print()
{
FILE *fp1;
fp1=fopen("symboltable.txt","w");
int i;
for(i=0;i<=count;i++)
fprintf(fp,"%s\n",s[i].label);
fclose(fp1);
}
main()
{
FILE *f;
f=fopen("src.txt","r");
int ch,i=0;
fp=fopen("symboltable.txt","w");
char lab[15];
while((fscanf(f,"%s %s %s",s[i].label,s[i].opcode,s[i].operand))!=EOF)
if(strcmp(s[i].label,"NULL"))
{
if((strcmp(s[i].opcode,"WORD"))||(strcmp(s[i].opcode,"RESW")))
{
if(dupcheck(i))
{
fprintf(fp,"%s\n",s[i].label);
count++;
}
else
printf("\n %s already exists",s[i].label);
}
i++;
}
fclose(fp);
do
{
printf("\n Enter Choice:\n1.insert\n2.delete\n3.display\n4.search\n5.modify\n");
scanf("%d",&ch);
switch(ch)
{
case 1: insert();
break;
case 2: delete();
break;
case 3: fp=fopen("symboltable.txt","r");
while((fscanf(fp,"%s",lab))!=EOF)
printf("\n %s",lab);
fclose(fp);
break;
case 4: search();
break;
case 5: mod();
break;
}
}while(ch<6);
}

Input file:

src.txt file


NULL LDA ONE
NULL ADD TWO
NULL STA THREE
FORTY WORD 5
NINE WORD 6
TWELVE RESW 12
FOUR WORD 4
FORTY WORD 6

Output file:

symboltable.txt

FORTY
NINE
TWELVE
FOUR

No comments:

Post a Comment