Əsrin Proqramlaşdırma Mühiti - Mənbə Kodları

Tokenayzer - Tokenlərə ayıran


 #include "esrin.h"

/* ACAR sozler  */
struct token lexems[]={
  {"proqram", PRG},
  {"var", VAR},
  //  {"tam", TAM},
  //  {"kesr", KESR},
  //  {"simvol",SIMVOL},
  {",",VERGUL},/* bunlar siyahidan goturulmelidir  */
  {";",NOQTEV},
  {"kod", KOD}, 
  {"capet", CAPET},
  {"(",OPNBRK},
  {")",CLSBRK},
  {"son", SON},
  {".", DOT},
  {"daxilet", DAXIL},
  {"eger", EGER},
  {"onda", ONDA},
  {"yoxsa", YOXSA},
  {"ve", VE},
  {"veya", VEYA},
  {"dovr", DOVR},
  {"artsin", ARTSIN },
  {"azalsin", AZALSIN},
  {"addim", ADDIM},
  {"tekraret", TEKRARET},
  {"kimi", KIMI},
  {"dan", DAN},
  {"den", DEN},
  {"ye",YE},
  {"ya",YA},
  {"e",EE},
  {"a",AA},
  {"funksiya",FUNKSIYA},
  {"qaytar",QAYTAR},
  {"neqederki",NEQEDERKI},
  {"davamet",DAVAMET},
  {"dayan",DAYAN},
  {"sec",SEC},
  {"hal",HAL},
  {"susma",SUSMA},
  {"strukt",STRUKT},
  {"sinif",SINIF},
  {"mexsusi",MEXSUSI},
  {"serbest",SERBEST},
  {"qorunan",QORUNAN},
  {"kvk",KVK}
/* !!!!!!!!!!!! DON'T FORGET UPDATE lxmc below !!!!!!!!!!  */
};

int lxmc = 42;


#define MAX_LINES 10000
char * lines[MAX_LINES];

int lnct = 0;

void init_lines( char *name){

        char *p, *q, *text, *end, **s;
        int fd, size,k;
    
  FILE *f = fopen(name, "rb");
  fseek(f,0,SEEK_END);
  size = ftell(f);
  fseek(f,0,SEEK_SET);

  text = (char *)malloc(size);  
  fread(text, size, 1, f);
  fclose(f);

    end = text + strlen(text);

        p = q = text;

        while (p < end && q<end){

          while((*q!='\n') && q<end) q++;

          k = (int)(q-p);
          s = &lines[lnct++];

      *s = (char *)malloc(k+1);
          memset(*s,0,k+1);
          strncpy(*s,p,k);
          q++;
          p = q;

        }
}

void print_lines(){
 
  int i;

  for (i=0; i<lnct; ++i)
    printf("%s",lines[i]);
  
}

int crtip = 0;

 char *last_col;
 int cur_row = 1;

void upd_crtip(int tid){

  crtip = tid;

}




#define MAX_NEW_LINE  10000

char *text , *end, *output;

 int nls[MAX_NEW_LINE];
 int nct = 0; /* new_line_count */

#define MAX_STRINGS 10000
#define MAX_BLKS 10000


#define MAX_TOKENS 100000

struct token tokens[MAX_TOKENS];
int tks;
int nl;

void quit(char *s){

  printf("%s\n",s);
  exit(0);
}

int cur_tok = 0;
int las_tok;

int next_tok (){

   las_tok = cur_tok;

   if (cur_tok <= tks){
    cur_tok++;
    return tokens[las_tok].id; }
   else
     return -1;

}

int las_tid(){

   return tokens[las_tok].id;

}



void sherhleri_sil(char *text){

    int k = strlen(text);

    char *p,*end;

    end = text + k;

    p = text;

    for (p=text; p<end; p++){
        if  ((*p=='/') && (*(p+1)=='/')){
                while ((*(p+1)!='\n') && (p<end)) {
                         *p = ' ';
                         p++;
                        }
                *p = ' ';
        }

        if  ((*p=='/') && (*(p+1)=='*')){
                while (!((*p=='*') && (*(p+1)=='/'))&& (p<end)) {
                         *p = ' ';
                         p++;
                        }
                *p = ' ';
                *(p+1) = ' ';
                p+=2;
        }
     }
}


/* parse text and get pos and numb of new lines */



void print_tokens(){

  int i;

  printf("Sizin tokenler\n");
  
  for (i=0; i<tks; i++){
    printf("i = %d, %s\t\t%d\t",i, tokens[i].tok, tokens[i].id);
    print_tok(tokens[i].id);
    printf("\n");
  }

}


void print_tokens_with_id(struct dec_table *dec_tab){

  int i;

  printf("Sizin tokenler id ile  \n");
  
  for (i=0; i<tks; i++){
    printf("%s\t\tfid %d\t\ttip %d\t\tofst %d \n", tokens[i].tok, tokens[i].fid, tokens[i].tip, tokens[i].ofst );
  }

}

int get_tok_id(char *tok, int id){


  /* first check for the keywords */

  int i;

  for (i=0; i<lxmc; ++i)
    if (strcmp(lexems[i].tok,tok)==0)
      return lexems[i].id;

  if (id == LEXEM)
    return IDT;
  else
    return NOTYET;

  /* check for string */
 

}

void get_new_token(char *p, char *q, int id, int row, int col){

  char *tmp;
  int k;

  if ((p<text)||(q<p)||(q>end)){
    printf("token sehvi setir %d -de\n",nl);
        err_cnt++;
    return ;
  }

  k  = q - p;
  tmp = (char *)malloc(k+1);
  strncpy(tmp, p, k);
  *(tmp+k) = '\0';
  tokens[tks].tok = tmp;
  if (id == LEXEM || id == NOTYET)
    tokens[tks].id = get_tok_id(tmp,id);
  else
    tokens[tks].id = id;
    tokens[tks].prs_id = id;

   tokens[tks].col = col;
   tokens[tks].row = row;

   tokens[tks].d1 = 1;
   tokens[tks].d2 = 1;

  tks++;

  

}

/* return 1 if p is char   */
int chr(char *p){

  char c = *p;

  if (  ((c >= 'a'  &&  c <= 'z') ||  (c >= 'A'  &&  c <= 'Z')) )
    return 1;

  return 0;

}

/* return 1 if p is digit */
int dig(char *p){

  char c = *p;

  if (   (c >= '0'  &&  c <= '9')   )
    return 1;

  return 0;
}

/* p is char or _ i.e. beg of idt */
static int idt(char *p){

  if ( chr(p) || *p == '_')
    return 1;

  return 0;
}

/* 1 ? p is alfanumeric : 0 */
int alfn(char *p){

  char c = *p;

  if (  idt(p) || dig(p) )
    return 1;

  return 0;

}

int wtch(char *p){

  if (*p == ' ' || *p == '\t'  || *p == '\n' || *p == '\r')
    return SPS;

  if (*p == '"')
    return STR;

  if (*p == '\'')
    return CHR;

  if (idt(p))
    return IDT;

  if (dig(p))
    return DIG;

  if ((*p == '/') && (*(p+1)=='/'))
    return SLC;

  if ((*p == '/') && (*(p+1)=='*'))
    return MLC;

  if (*p == '+')
    return POSSIG;

  if (*p == '-')
    return NEGSIG;

  if (*p == ':')
    return COLON;

  if (*p == '[')
    return ARYOPN;

  if (*p == ']')
    return ARYCLS;


  if (*p == '=')
    return ASGN;

  if (*p == '*')
    return MULT;

  if (*p == '/')
    return DEL;

  if (*p == '%')
    return PRCT;


  if (*p == '!')
    return NIDA;


  if (*p == '<')
    return LES;


  if (*p == '>')
    return GRT;

  if (*p == '{')
    return OPNBLK;

  if (*p == '}')
    return CLSBLK;

  return NOTYET;


}


char *fin_spc(char *p){

  while (p<end && ( *p==' ' ||  *p=='\t' || *p == '\n' || *p == '\r' )){
    if (*p == '\r' && *(p+1) == '\n'){
      cur_row++;
    last_col = p;
        p++;
    }
    p++;
  }

  return p;

}



char *fin_str(char *p){

  p++;

  while (p<end && *p!='"'  && *p!= '\n')
    p++;

  return p;
}


char *fin_chr(char *p){

  p++;

  while (p<end && *p!='\''  && *p!= '\n')
    p++;

  return p+1;
}

char *fin_idt(char *p){

  while (p<end && alfn(p))
    p++;

  return p;
}


char *fin_numb(char *p){

  while (p<end && dig(p))
    p++;

  return p;
}

/*  sinlge line comment     */
char *fin_slc(char *p){

  while (p<end && *p != '\n')
    p++;
  
  return p;
}

/*  multy line comment     */
char *fin_mlc(char *p){

  while (p<end && !( *p=='*' &&  *(p+1)=='/')){
    if (*p == '\n'){
      cur_row++;
    last_col = p;
    }
         p++;
  }

  return p+2;

}

void get_tokens(char *name){

  char *p, *q, tmp[1024];
  int fd,k, size, nmb;

  FILE *f = fopen(name, "rb");
  fseek(f,0,SEEK_END);
  size = ftell(f);
  fseek(f,0,SEEK_SET);

  text = (char *)malloc(size+1);
  memset(text, '\0', size+1);

  fread(text, size, 1, f);
  fclose(f);


  end = text + strlen(text);

        /*sherhleri_sil(text);*/

  //file_name = name;

  p = text;
  last_col = text;

  tokens[0].id = FILEBEG;
  tks++;


  while (p<end){
    
    k = wtch(p);

    switch(k){
 
     case SPS:
       p = fin_spc(p);
       break;
    case STR:
      q = fin_str(p);
      if (q>=end){
        get_new_token(p,q,BADSTR, cur_row, p - last_col);
        goto out;
      }
      if (*q == '\n'){
        get_new_token(p,q,BADSTR, cur_row, p - last_col);
        p = q+1;
        cur_row++;
        last_col = p;
        break;
      }
      /* found string q pointing to last quote  
         update q to point next char   */
      q++;      
      get_new_token(p+1,q-1, STR, cur_row, p - last_col);
      p = q;
      break;
    case CHR:
      q = fin_chr(p);
      if (q>=end){
        /* simvolu baglayan dirnag yaddan cixib  */
        get_new_token(p,q,BADCHR, cur_row, p - last_col);
        goto out;
      }
      if (*q == '\n'){
        /* simvolu baglayan dirnag yaddan cixib  */
        get_new_token(p,q,BADCHR, cur_row, p - last_col);
        p = q+1;
        cur_row++;
        last_col = p;
        break;
      }

      if (q - 1 == p + 1){
        printf("Sehv: setir %d, sutun %d: \'\'  tek dirnaq arasinda hecne yoxdur. \n", cur_row, p - last_col);
        err_cnt++;
        p = q;
        break;
      }

      if (q-p > 3){

        /*
        if ((q - p == 4) && *(p+1) == '\\' && *(p+2) == 'y'   ){
             get_new_token(p+1, p+3, CHR, cur_row, p - last_col);
             p = q;
             break;
        }
        */

        if ((q - p == 4) && *(p+1) == '\\'){
          switch(*(p+2)){
          case 'y':
            *(p+1) = '\n';
            get_new_token(p+1, p+2, CHR, cur_row, p - last_col);
            p = q;
            break;
          case 't':
            *(p+1) = '\t';
            get_new_token(p+1, p+2, CHR, cur_row, p - last_col);
            p = q;
            break;
          case '\'':
            *(p+1) = '\'';
            get_new_token(p+1, p+2, CHR, cur_row, p - last_col);
            p = q;
            break;
          case '\"':
            *(p+1) = '\"';
            get_new_token(p+1, p+2, CHR, cur_row, p - last_col);
            p = q;
            break;
          case '\0':
            *(p+1) = '\0';
            get_new_token(p+1, p+2, CHR, cur_row, p - last_col);
            p = q;
            break;
          }
        }


        if (p == q)
          break;          
        

        nmb = q - p;
        sprintf(tmp, p, nmb  );
        *(tmp + nmb) = '\0';
        printf("Xeberdarliq: setir %d, sutun %d: %s tek dirnaq icinde bir nece simvol. \n", cur_row, p - last_col, tmp);
        printf("Ilk simvola qeder qisaldilir\n");
      }

      get_new_token(p+1, p+2, CHR, cur_row, p - last_col);
      p = q;
      break;       
    case IDT:
      q = fin_idt(p);
      get_new_token(p,q, LEXEM, cur_row, p - last_col);
      p = q;
      break;

    case DIG:
      q = fin_numb(p);

      if (*q == '.'){
        int tmp  = wtch(q+1);
        if (tmp != DIG){
          get_new_token(p,q+1, FLOAT_HALF, cur_row, p - last_col);
          p = q+1;
          break;
        }
        else{
          q = fin_numb(q+1);
          get_new_token(p,q, FLOAT, cur_row, p - last_col);
          p = q;
          break;
        }
      }
        
       get_new_token(p,q, NUMB, cur_row, p - last_col);
      p = q;
      break;

    case SLC:
      p = fin_slc(p);
      break;
    case MLC:
      p = fin_mlc(p);
      break;

    case POSSIG:
      get_new_token(p,p+1, POSSIG, cur_row, p - last_col);  
      p++;
      break;

    case NEGSIG:
      get_new_token(p,p+1, NEGSIG, cur_row, p - last_col);   
      p++;
      break;

    case COLON:
      get_new_token(p,p+1, COLON, cur_row, p - last_col);   
      p++;
      break;

    case ARYOPN:
      get_new_token(p,p+1, ARYOPN, cur_row, p - last_col);   
      p++;
      break;

    case ARYCLS:
      get_new_token(p,p+1, ARYCLS, cur_row, p - last_col);   
      p++;
      break;

    case ASGN:
      if (*(p+1)=='='){
      get_new_token(p,p+2, BERABER, cur_row, p - last_col);   
      p+=2;}
      else{
      get_new_token(p,p+1, ASGN, cur_row, p - last_col);   
      p++;}
      break;

    case MULT:
      get_new_token(p,p+1, MULT, cur_row, p - last_col);   
      p++;
      break;

    case DEL:
      get_new_token(p,p+1, DEL, cur_row, p - last_col);   
      p++;
      break;

    case PRCT:
      get_new_token(p,p+1, PRCT, cur_row, p - last_col);   
      p++;
      break;

    case NIDA:
      if (*(p+1)=='='){
      get_new_token(p,p+2, FERQLI, cur_row, p - last_col);   
      p+=2;}
      else{
      get_new_token(p,p+1, NIDA, cur_row, p - last_col);   
      p++;      
      }

      break;


    case LES:
      if (*(p+1)=='='){
      get_new_token(p,p+2, LESEQU, cur_row, p - last_col);   
      p+=2;
      }
      else{
      get_new_token(p,p+1, LES, cur_row, p - last_col);   
      p++;}
      break;


    case GRT:
      if (*(p+1)=='='){
      get_new_token(p,p+2, GRTEQU, cur_row, p - last_col);   
      p+=2;
      }
      else{
      get_new_token(p,p+1, GRT, cur_row, p - last_col);   
      p++;
      }
      break;


    case OPNBLK:
      get_new_token(p,p+1, OPNBLK, cur_row, p - last_col);   
      p++;
      break;


    case CLSBLK:
      get_new_token(p,p+1, CLSBLK, cur_row, p - last_col);   
      p++;
      break;

     default:
      get_new_token(p,p+1, NOTYET, cur_row, p - last_col);
      p++;
    }

}

  out:

  /* ola bilsin gbu yaxshi qayda deyil, amma sehvleri yoxlayan kod 
     bir nece token teleb etdiyinden, bu bosh tokenleri elave edirik,
     hec olmasa bashlangicda sehvi deye bilmek ucun  */
  tokens[tks].id = FILESON;
  tks++;

  tokens[tks].id = FILESON;
  tks++;

  tokens[tks].id = FILESON;
  tks++;

  tokens[tks].id = FILESON;
  tks++;

  tokens[tks].id = FILESON;
  tks++;

  *p = 1;

}


void hash(unsigned char *str, unsigned long *h){

  unsigned long hash = 5381;

  int c;

  if (str == NULL){
    *h =  0;
    return;
  }

  while (c = *str){
    hash = ((hash<<5)+hash)+c;
    str++;
  }

  *h = hash;
}


void init_hash_ids(){

  unsigned long h;
  int i;

  for (i=0; i<tks; ++i){
    hash((unsigned char *)tokens[i].tok, &h);
    tokens[i].hid = h;
  }

}

void print_hash(){

  int i;

  for (i=0; i<tks; ++i)
    printf("%s\t%lu\n",tokens[i].tok, tokens[i].hid);
}


char *get_name (unsigned long hid){

  int i;

  for (i = 0; i<tks; ++i){
    if (tokens[i].hid == hid)
      return tokens[i].tok;
  }

    return NULL;
}



void print_tok(int tok){

  switch(tok){

  case  PRG:
    printf("PRG");
    break;
  case  VAR:
    printf("VAR");
    break;
  case  TAM:
    printf("TAM");
    break;
  case  KESR:
    printf("KESR");
    break;
  case  SIMVOL:
    printf("SIMVOL");
    break;
  case  IDT:
    printf("IDT");
    break;
  case  VERGUL:
    printf("VERGUL");
    break;
  case  NOQTEV:
    printf("NOQTEV");
    break;
  case  KOD:
    printf("KOD");
    break;
  case  CAPET:
    printf("CAPET");
    break;
  case  OPNBRK:
    printf("OPNBRK");
    break;
  case  STR:
    printf("STR");
    break;
  case  CHR:
    printf("CHR");
    break;
  case  CLSBRK:
    printf("CLSBRK");
    break;
  case  SON:
    printf("SON");
    break;
  case  DOT:
    printf("DOT");
    break;
  case  LEXEM:
    printf("LEX");
    break;
  case  NUMB:
    printf("NUMB");
    break;
  case  SIGN:
    printf("SIGN");
    break;
  case  DIG:
    printf("DIG");
    break;
  case  POSDIG:
    printf("POSDIG" );
    break;
  case  POSNUMB:
    printf("POSNUMB");
    break;
  case  SNUMB:
    printf("SNUMB");
    break;
  case  POSSIG:
    printf("POSSIG");
    break;
  case  NEGSIG:
    printf("NEGSIG");
    break;
  case  SLC:
    printf("SLC");
    break;
  case  MLC:
    printf("MLC");
    break;
  case  SPS:
    printf("SPS");
    break;
  case  COLON:
    printf("COLON");
    break;
  case  ARYOPN:
    printf("ARYOPN");
    break;
  case  ARYCLS:
    printf("ARYCLS");
    break;
  case  ASGN:
    printf("ASGN");
    break;
  case  MULT:
    printf("MULT");
    break;
  case  DEL:
    printf("DEL");
    break;
  case  PRCT:
    printf("PRCT");
    break;
  case  XAR:
    printf("XAR");
    break;
  case  DAXIL:
    printf("DAXILET");
    break;
  case  EGER:
    printf("EGER");
    break;
  case  NIDA:
    printf("NIDA");
    break;
  case  GRT:
    printf("GRT");
    break;
  case  LES:
    printf("LES");
    break;
  case  VE:
    printf("VE");
    break;
  case  VEYA:
    printf("VEYA");
    break;
  case  FILESON:
    printf("FILESON");
    break;
  case  OPNBLK:
    printf("OPNBLK");
    break;
  case  CLSBLK:
    printf("CLSBLK");
    break;
  case  ONDA:
    printf("ONDA");
    break;
  case  YOXSA:
    printf("YOXSA");
    break;
  case  BERABER:
    printf("BERABER");
    break;
  case  FERQLI:
    printf("FERQLI");
    break;
  case  LESEQU:
    printf("LESEQU");
    break;
  case  GRTEQU:
    printf("GRTEQU");
    break;
  case  EMPTOK:
    printf("EMPTOK");
    break;
  case  SHERT:
    printf("SHERT");
    break;
  case  IFAD:
    printf("IFAD");
    break;
  case  ARTSIN:
    printf("ARTSIN");
    break;
  case  AZALSIN:
    printf("AZALSIN");
    break;
  case  ADDIM:
    printf("ADDIM");
    break;
  case  DOVR:
    printf("DOVR");
    break;
  case  KIMI:
    printf("KIMI");
    break;
  case  CRG1:
    printf("CRG1");
    break;
  case  CRG2:
    printf("CRG2");
    break;
  case  TEKRARET:
    printf("TEKRARET");
    break;
  case  DAN:
    printf("DAN");
    break;
  case  DEN:
    printf("DEN");
    break;

  case  CAPET_OP:
    printf("CAPET_OP");
    break;
  case  DOVR_OP:
    printf("DOVR_OP");
    break;
  case  BLOK:
    printf("BLOK");
    break;
  case  BIRTIP:
    printf("BIRTIP");
    break;
  case  TIPLER:
    printf("TIPLER");
    break;
  case  EGER_OP:
    printf("EGER_OP");
    break;
  case  ASGN_OP:
    printf("ASGN_OP");
    break;
  case  DAXIL_OP:
    printf("DAXIL_OP");
    break;
  case  BLOKSUZ:
    printf("BLOKSUZ");
    break;
  case  BLOKLU:
    printf("BLOKLU");
    break;
  case  KODDATALAR:
    printf("KODDATALAR");
    break;


  case  BLOKLUDATA:
    printf("BLOKLUDATA");
    break;

  case  YA:
    printf("YA");
    break;
  case  YE:
    printf("YE");
    break;
  case  AA:
    printf("A");
    break;
  case  EE:
    printf("E");
    break;
  case  DOVR_EXP:
    printf("DOVR_EXP");
    break;
  case  EGER_EXP:
    printf("EGER_EXP");
    break;

  case  DOVR_BLOKSUZ:
    printf("DOVR_BLOKSUZ");
    break;
  case  EGER_BLOKSUZ:
    printf("EGER_BLOKSUZ");
    break;
  case  YOXSA_BLOKSUZ:
    printf("YOXSA_BLOKSUZ");
    break;

  case  KODDATA:
    printf("KODDATA");
    break;

  case  DOVR_BLOKLU:
    printf("DOVR_BLOKLU");
    break;
  case  EGER_BLOKLU:
    printf("EGER_BLOKLU");
    break;
  case  YOXSA_BLOKLU:
    printf("YOXSA_BLOKLU");
    break;
  case  EGER_TEK_BLOKSUZ:
    printf("EGER_TEK_BLOKSUZ");
    break;
  case  EGER_TAM_BLOKSUZ:
    printf("EGER_TAM_BLOKSUZ");
    break;

  case  TAM1:
    printf("TAM1");
    break;
  case  TAM2:
    printf("TAM2");
    break;
  case  KESR1:
    printf("KESR1");
    break;
  case  KESR2:
    printf("KESR2");
    break;
  case  SIMVOL1:
    printf("SIMVOL1");
    break;
  case  SIMVOL2:
    printf("SIMVOL2");
    break;
 case  VAR1:
    printf("VAR1");
    break;
  case  VAR2:
    printf("VAR2");
    break;

 case  DAXILET1:
    printf("DAXILET1");
    break;
  case  DAXILET2:
    printf("DAXILET2");
    break;
 case  CAPET1:
    printf("CAPET1");
    break;
  case  CAPET2:
    printf("CAPET2");
    break;

 case  EGER_EXP1:
    printf("EGREXP1");
    break;
  case  EGER_EXP2:
    printf("EGREXP2");
    break;

  case  KOD1:
    printf("KOD1");
    break;

  case  PRG1:
    printf("PRG1");
    break;


  case  BADSTR:
    printf("BADSTR");
    break;

 case  BADCHR:
    printf("BADCHR");
    break;

  case  BADIDT:
    printf("BADIDT");
    break;

  case  DAXILET3:
    printf("DAXILET3");
    break;

  case  EMPTYOP:
    printf("EMTYOP");
    break;

  case  CAPET3:
    printf("CAPET3");
    break;

  case  EXPR:
    printf("EXPR");
    break;

  case  BRK:
    printf("BRK");
    break;


 case  FILEBEG:
    printf("FILEBEG");
    break;

 case  FLOAT_HALF:
    printf("FLOAT_HALF");
    break;


 case  FLOAT:
    printf("FLOAT");
    break;

 case  FUNKSIYA:
    printf("FUNKSIYA");
    break;


 case  FUNK_ELAN:
    printf("FUNK_ELAN");
    break;


 case  FUNK_BODY:
    printf("FUNK_BODY");
    break;


 case  EMPBRK:
    printf("EMPBRK");
    break;

 case  FE1:
    printf("FE1");
    break;

 case  FE2:
    printf("FE2");
    break;

 case  FUNK:
    printf("FUNK");
    break;

 case  FUNKS:
    printf("FUNKS");
    break;

 case  FCALL:
    printf("FCALL");
    break;

 case  FCALL1:
    printf("FCALL1");
    break;

 case  VDEC:
    printf("VDEC");
    break;


 case  DUMMY:
   printf(" ");  /* don't print dummy tokens, they play no role during parsing */
    break;

  case  FDECL:
    printf("FDECL");
    break;
        
  case  PRG2:
    printf("PRG2");
    break;

  case  QAYTAR:
    printf("QAYTAR");
    break;

 case  QAYTAR1:
    printf("QAYTAR1");
    break;

 case  NEQEDERKI:
    printf("NEQEDERKI");
    break;

 case  NEQEDERKI1:
    printf("NEQEDERKI1");
    break;

 case  NEQEDERKI2:
    printf("NEQEDERKI2");
    break;

 case  DAVAMET:
    printf("DAVAMET");
    break;

 case  DAYAN:
    printf("DAYAN");
    break;

 case  DAVAMET1:
    printf("DAVAMET1");
    break;

 case  DAYAN1:
    printf("DAYAN1");
    break;

 case  SEC:
    printf("SEC");
    break;

 case  SEC_OP:
    printf("SEC_OP");
    break;

 case  HAL:
    printf("HAL");
    break;

 case  HAL1:
    printf("HAL1");
    break;

 case  HAL2:
    printf("HAL2");
    break;

 case  HAL3:
    printf("HAL3");
    break;

 case  SEC1:
    printf("SEC1");
    break;

 case  SUSMA:
    printf("SUSMA");
    break;

case  START:
    printf("S");
    break;

case  STRUKT:
    printf("STRUKT");
    break;

case  STRUKT1:
    printf("STRUKT1");
    break;

case  STRUKT2:
    printf("STRUKT2");
    break;

case  STRUKT3:
    printf("STRUKT3");
    break;

case  YNT1:
    printf("YNT1");
    break;

case  YNT2:
    printf("YNT2");
    break;

case  STRMEM:
    printf("STRMEM");
    break;


case  YNTS:
    printf("YNTS");
    break;

case  SINIF:
    printf("SINIF");
    break;

case  QORUNAN:
    printf("QORUNAN");
    break;

case  SERBEST:
    printf("SERBEST");
    break;

case  MEXSUSI:
    printf("MEXSUSI");
    break;

case  SINIF_HEAD:
    printf("SINIF_HEAD");
    break;

case  SINIF_HEAD_START:
    printf("SINIF_HEAD_START");
    break;

case  SINIF_BODY:
    printf("SINIF_BODY");
    break;

case  SINIF_DECL:
    printf("SINIF_DECL");
    break;

case  SINIF_TYPE:
    printf("SINIF_TYPE");
    break;

case  YENI_TIP:
    printf("YENI_TIP");
    break;

case  SNMEM:
    printf("SNMEM");
    break;



case  INIT_DOVR:
    printf("INIT_DOVR");
    break;

case  CHECK_DOVR:
    printf("CHECK_DOVR");
    break;

case  STEP_DOVR:
    printf("STEP_DOVR");
    break;

case NEQ_TOP:
    printf("NEQ_TOP");
    break;

case SUS1:
    printf("SUS1");
    break;

case HAL1S:
    printf("HAL1S");
    break;

  case FARGS:
    printf("FARGS");
    break;

  case FPARM:
    printf("FPARM");
    break;

  case FCALL_BEG:
    printf("FCALL_BEG");
    break;


  case PUT_RET_ADDR:
    printf("PUT_RET_ADDR");
    break;


  case IDT_ADRS:
    printf("IDT_ADRS");
    break;

  case IDT_VAL:
    printf("IDT_VAL");
    break;

  case CRG1_ADRS:
    printf("CRG1_ARDS");
    break;

  case CRG2_ADRS:
    printf("CRG2_ADRS");
    break;

  case CRG1_VAL:
    printf("CRG1_VAL");
    break;

  case CRG2_VAL:
    printf("CRG2_VAL");
    break;

  case IDT_OFST:
    printf("IDT_OFST");
    break;

  case CRG1_OFST:
    printf("CRG1_OFST");
    break;

  case CRG2_OFST:
    printf("CRG2_OFST");
    break;

  case STRMEM_VAL:
    printf("STRMEM_VAL");
    break;

  case CAPET_NUMB:
    printf("CAPET_NUMB");
    break;
  case CAPET_FLOAT:
    printf("CAPET_FLOAT");
    break;
  case CAPET_CHR:
    printf("CAPET_CHR");
    break;
  case CAPET_STR:
    printf("CAPET_STR");
    break;
  case CAPET_IDT:
    printf("CAPET_IDT");
    break;
  case CAPET_CRG1:
    printf("CAPET_CRG1");
    break;
  case CAPET_CRG2:
    printf("CAPET_CRG2");
    break;
  case CAPET_STRMEM:
    printf("CAPET_STRMEM");
    break;
  case CHR_ADRS:
    printf("CHR_ADRS");
    break;
  case STR_ADRS:
    printf("STR_ADRS");
    break;

  case CAPET_EXPR:
    printf("CAPET_EXPR");
    break;

  case DAXILET_IDT:
    printf("DAXILET_IDT");
    break;

  case FARGS_NUMB:
    printf("FAGRS_NUMB");
    break;

  case FARGS_FLOAT:
    printf("FAGRS_FLOAT");
    break;

  case FARGS_CHR:
    printf("FAGRS_CHR");
    break;

  case FARGS_STR:
    printf("FAGRS_STR");
    break;

  case FARGS_IDT_VAL:
    printf("FAGRS_IDT_VAL");
    break;

  case FARGS_CRG1_VAL:
    printf("FAGRS_CRG1_VAL");
    break;

  case FARGS_CRG2_VAL:
    printf("FAGRS_CRG2_VAL");
    break;

  case FARGS_STRMEM_VAL:
    printf("FAGRS_STRMEM_VAL");
    break;

  case FARGS_EXPR_VAL:
    printf("FAGRS_EXPR_VAL");
    break;

  case FPARM_IDT_VAL:
    printf("FPARM_IDT_VAL");
    break;

  case POP_OBSTK:
    printf("POP_OBSTK");
    break;
    

case GLBMT:
    printf("GLBMT");
    break;

case FREE_SEC_DYN_STK:
        printf("FREE_SEC_DYN_STK");
        break;

case KVK:
        printf("KVK");
        break;

case KVK1:
        printf("KVK1");
        break;


  case  NOTYET:
    printf("NOTYET");
    break;
  }
}


void tokenize(char *src){
    get_tokens(src);
        init_hash_ids();
        print_tokens(); 
}