Friday, May 28, 2010

WAP to generate symbol table


#include<stdio.h>
#include<conio.h>
int isnum(int n)
{
      if(n>0&&n<100)
      return 1;
      else
      return 0;
}
void main()
{
      FILE *fp;
      char words[50][25],str[25],ch;
      char name[50][25];
      int size[50],add[50];
      int temp,ad=1000;
      int i,j,w=0,d=0;
      fp=fopen("tsym.c","r");
      clrscr();
      printf("\n File: tsym.c\n\n");
      if(fp!=NULL)
      {
                  do
                  {
                              j=0;
                              ch='d';
                              strcpy(str,"");

                              while(ch!=' ')
                              {
                                          ch=getc(fp);
                                          printf("%c",ch);

                                          if(ch==EOF) break;

                                          str[j++]=ch;


                                          if(ch==' '||ch=='\n'||ch=='='||ch=='[')
                                          {
                                                      j--;
                                                      break;
                                          }

                                          if(ch==';'||ch==','||ch==']')
                                          {
                                                      j--;
                                                      break;
                                          }

                              }

                              str[j]='\0';


                              if(j>0)
                              strcpy(words[w++],str);



                              if(ch==';')
                              strcpy(words[w++],";");

                              j=0;
                  }while(ch!=EOF);
      }



      for(i=0;i<w;i++)
      {
                  if(!strcmp(words[i],"int"))
                  {
                              i++;

                              for(;strcmp(words[i],";");i++)
                              {
                                 temp=atoi(words[i]);
                                 if(isnum(temp))
                                 {
                                          d--;
                                          ad=ad-size[d];
                                          size[d]=temp*2;
                                          ad=ad+size[d];
                                          d++;
                                 }
                                 else
                                 {
                                 strcpy(name[d],words[i]);
                                 size[d]=2;
                                 add[d]=ad;
                                 ad=ad+size[d];
                                 d++;
                                 }
                              }
                  }
                  else if(!strcmp(words[i],"char"))
                  {
                              i++;
                              for(;strcmp(words[i],";");i++)
                              {
                                 temp=atoi(words[i]);
                                 if(isnum(temp))
                                 {
                                          d--;
                                          ad=ad-size[d];
                                          size[d]=temp*1;
                                          ad=ad+size[d];
                                          d++;
                                 }
                                 else
                                 {
                                 strcpy(name[d],words[i]);
                                 size[d]=1;
                                 add[d]=ad;
                                 ad=ad+size[d];
                                 d++;
                                 }
                              }
                  }
                  else if(!strcmp(words[i],"float"))
                  {
                              i++;
                              for(;strcmp(words[i],";");i++)
                              {
                                 temp=atoi(words[i]);
                                 if(isnum(temp))
                                 {
                                          d--;
                                          ad=ad-size[d];
                                          size[d]=temp*4;
                                          ad=ad+size[d];
                                          d++;
                                 }
                                 else
                                 {
                                 strcpy(name[d],words[i]);
                                 size[d]=4;
                                 add[d]=ad;
                                 ad=ad+size[d];
                                 d++;
                                 }
                              }
                  }
                  else if(!strcmp(words[i],"double"))
                  {
                              i++;
                              for(;strcmp(words[i],";");i++)
                              {
                                 temp=atoi(words[i]);
                                 if(isnum(temp))
                                 {
                                          d--;
                                          ad=ad-size[d];
                                          size[d]=temp*8;
                                          ad=ad+size[d];
                                          d++;
                                 }
                                 else
                                 {
                                 strcpy(name[d],words[i]);
                                 size[d]=8;
                                 add[d]=ad;
                                 ad=ad+size[d];
                                 d++;
                                 }
                              }
                  }
      }


      printf("\n\n\tSYMBOL TABLE:\n");
      printf("SYMBOL       SIZE      ADDRESS");
      for(i=0;i<d;i++)
      {
         printf("\n%-10s",name[i]);
         printf("%-10d",size[i]);
         printf("%-10d",add[i]);
      }
      getch();
}

0 comments:

Post a Comment

Contact Form

Name

Email *

Message *