Wednesday 24 February 2016

Experiment No - 01




PROGRAM: Implementation of Symbol Table
#include<stdio.h>
#include<string.h>ruct symboltable
{
int position;
char name[20];
char type[20];
int allst;
}s[20];
int main()
{
int i=0,p=0,n,j,k;
char input[20],type[20];
char dt[5][20]={"int","char","float","double","long"};
FILE *fp;
fp=fopen("input.txt","r");
fscanf(fp,"%s",input);
while(strcmp(input,"EOF")!=0)
{
for(j=0;j<5;j++)
{
if(strcmp(input,dt[j])==0)
{
strcpy(type,input);
fscanf(fp,"%s",input);
while(strcmp(input,";")!=0)
{
if(strcmp(input,",")!=0)
{
p++;
s[p].position=++i;
strcpy(s[p].name,input);
strcpy(s[p].type,type);
fscanf(fp,"%s",input);
}
if(strcmp(input,";")!=0)
fscanf(fp,"%s",input);
}
fscanf(fp,"%s",input);
}
}
fscanf(fp,"%s",input);
}
n=i+1;
for(k=1;k<n;k++)
{
if(strcmp(s[k].type,"int")==0)
s[k].allst=2;
else if((strcmp(s[k].type,"float")==0)||(strcmp(s[k].type,"double")==0))
s[k].allst=4;
else if(strcmp(s[k].type,"char")==0)
s[k].allst=1;
else if(strcmp(s[k].type,"long")==0)
s[k].allst=8;
}
printf("\n SYMBOL TABLE FOR IDENTIFIER");
printf("\n-------------------------------------------");
printf("\nPOSITION\tNAME\tTYPE\tALLOCATEDSTORAGE\tADDRESS");
printf("\n-------------------------------------------------------------------------");
for(k=1;k<n;k++)
{
printf("\n%d\t\t\t%s\t%s\t\t%d\t\t%d",s[k].position,s[k].name,s[k].type,s[k].allst,1000+k*s[k].allst);                                        
}
}
INPUT:
void main()
{
int a ;
float b ;
int c ;
c = a + b ;
}
EOF
OUTPUT:
$ ./a.out

 SYMBOL TABLE FOR IDENTIFIER
-------------------------------------------
POSITION        NAME    TYPE    ALLOCATEDSTORAGE      ADDRESS
------------------------------------------------------------------------------------
1                       a               int                         2                            1002
2                       b              float                      4                            1008
3                       c              int                           2                           1010

2 comments: