SYMBOL TABLE
AIM
To write a program in C to
implement symbol table.
ALGORITHM
1.Create a structure having
member variable and values
2.Display the option and get
choice from the user
3.I f choice 1 call create()
4.If choice 2 call insert()
5.If choice 3 call modify()
6.If choice 4 call search()
7.If choice 5 call display()
8.Exit
9.create()
Do till less than 3
Get input from the user for variables and values
10.insert()
Get number of records to insert.
a.Do till i is less than sum of I and number of records
to insert.
b.Get input for symbol name and value
11.modify()
Get record or symbol name to modify
If it is equal to
any symbol name then print “record found”
Else print “record not found”
Get the value for corresponding symbol name
12.search()
Get the symbol name to modify
If
it is present in table then print “record found”
Else
print “record not found”
Get
the value for corresponding symbol name
13.display()
Do till k is less than tottal number of records.
Print the symbil name and values.
PROGRAM:
#include<stdio.h>
#include<conio.h>
#include<alloc.h>
#include<string.h>
#include<stdlib.h>
#define NULL 0
int size=0;
void Insert();
void Display();
void Delete();
int search(char lab[]);
void Modify();
struct symbtab
{
char label[10],symbol[10];
int addr;
struct symbtab *next;
};
struct symbtab *first,*last;
void main()
{
int op,y;
char la[10];
clrscr();
do
{
printf("\n\tSYMBOL TABLE
IMPLEMENTATION\n");
printf("\n\t1.INSERT\n\t2.DISPLAY\n\t3.DELETE\n\t4.SEARCH\n\t5.MODIFY\n\t6.END\n");
printf("\n\tEnter your
option:");
scanf("%d",&op);
switch(op)
{
case 1:
Insert();
break;
case 2:
Display();
break;
case 3:
Delete();
break;
case 4:
printf("\n\tEnter the label to be
searched:");
scanf("%s",la);
y=search(la);
printf("\n\tsearch Result:");
if(y==1)
printf("\n\tThe label is present in the
symbol table\n");
else
printf("\n\tThe label is not present in
the symbol table\n");
break;
case 5:
Modify();
break;
case 6:
exit(0);
}
}
while(op<6);
getch();
}
void Insert()
{
int n;
char l[10];
printf("\n\tEnter the label:");
scanf("%s",l);
n=search(l);
if(n==1)
printf("\n\tThe label exists already in
tha symbol table\n\tDuplicate can't be inserted");
else
{
struct symbtab *p;
p=malloc(sizeof(struct symbtab));
strcpy(p->label,l);
printf("\n\tEnter the symbol:");
scanf("%s",p->symbol);
printf("\n\tEnter the
address:");
scanf("%d",&p->addr);
p->next=NULL;
if(size==0)
{
first=p;
last=p;
}
else
{
last->next=p;
last=p;
}
size++;
}
printf("\n\tLabel inserted\n");
}
void Display()
{
int i;
struct symbtab *p;
p=first;
printf("\n\tLABEL\t\tSYMBOL\t\tADDRESS\n");
for(i=0;i<size;i++)
{
printf("\t%s\t\t%s\t\t%d\n",p->label,p->symbol,p->addr);
p=p->next;
}
}
int search(char lab[])
{
int i,flag=0;
struct symbtab *p;
p=first;
for(i=0;i<size;i++)
{
if(strcmp(p->label,lab)==0)
flag=1;
p=p->next;
}
return flag;
}
void Modify()
{
char l[10],nl[10];
int add,choice,i,s;
struct symbtab *p;
p=first;
printf("\n\tWhat do you want to modify
?\n");
printf("\n\t1.Only the label\n\t2.Only
the address\n\t3.Both the label and address");
printf("\n\tEnter your choice:");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("\n\tEnter the old
label:");
scanf("%s",l);
s=search(l);
if(s==0)
printf("\n\tLabel not found");
else
{
printf("\n\tEnter the new label:");
scanf("%s",nl);
for(i=0;i<size;i++)
{
if(strcmp(p->label,l)==0)
strcpy(p->label,nl);
p=p->next;
}
printf("\n\tAfter modification:");
Display();
}
break;
case 2:
printf("\n\tEnter the label where the
address is to be modified:");
scanf("%s",l);
s=search(l);
if(s==0)
printf("\n\tLable not found\n");
else
{
printf("\n\tEnter the new address:");
scanf("%d",&add);
for(i=0;i<size;i++)
{
if
(strcmp(p->label,l)==0)
p->addr=add;
p=p->next;
}
printf("\n\tAfter modification:\n");
Display();
}
break;
case 3:
printf("\n\tEnter the old
label:");
scanf("%s",l);
s=search(l);
if(s==0)
printf("\n\tLabel not found");
else
{
printf("\n\tEnter the new label:");
scanf("%s",nl);
printf("\n\tEnter the new address:");
scanf("%d",&add);
for(i=0;i<size;i++)
{
if(strcmp(p=p->label,l)==0)
{
strcpy(p->label,nl);
p->addr=add;
}
p=p->next;
}
printf("\n\tAfter modification:\n");
Display();
}
break;
}
}
void Delete()
{
int a;
char l[10];
struct symbtab *p,*q;
p=first;
printf("\n\tEnter the label to be
deleted:");
scanf("%s",l);
a=search(l);
if(a==0)
printf("\n\tLabel not found");
else
{
if(strcmp(first->label,l)==0)
first=first->next;
else if(strcmp(last->label,l)==0)
{
q=p->next;
while(strcmp(q->label,l)!=0)
{
p=p->next;
q=q->next;
}
p->next=NULL;
last=p;
}
else
{
q=p->next;
while(strcmp(q->label,l)!=0)
{
p=p->next;
q=q->next;
}
p->next=q->next;
}
size--;
printf("\n\tAfter
Deletion:\n");
Display();
}
}
OUTPUT :
RESULT
Thus the program for symbol table has been implemented
successfully.
Error Detection and Correction Techniques
ReplyDeleteEvaluation Expression Process
Evolution Frames
File Stream Classes with iostream Classes
Flag Register 8086 Microprocessor
Flat Panel Display
Forward Engineering
Knapsack Problem