#include <stdio.h>
#include "cdefs.h"

FILE *Source;
cptr Source_name;
char Inp_line[512];
int Start_col;
int Curr_col = 0;
int Curr_line_num = 1;
int Tok;
int Indent = 0;
int Indent_offset = 0;

#define Open_quote(c) (c == '`')
#define Close_quote(c) (c == '\'')
#define Backslash(c) (c == '\\')
#define Quote(c) (c == '\"')
#define Eol(c) (c == 13 || c == 10)
#define Charr(c) (c >= '\001' && c <= '\177')
#define Char(c) (c >= '\001' && c <= '\177')
#define Digit(c) (c >= '0' && c <= '9')
#define Hex_digit(c) ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F'))
#define Up_let(c) (c >= 'A' && c <= 'Z')
#define Low_let(c) (c >= 'a' && c <= 'z')

void Build_indent(){
  Indent += 2;
  if (Tok == 2) Indent_offset -= 2; else Indent_offset = 0;
}

void Build_outdent(){
  Indent -= 2;
  if (Tok == 2) Indent_offset += 2; else Indent_offset = 0;
}

void Indent_error(){
  string_put_on(Source_name, stderr, 1, Source_name[3]);
  fprintf(stderr, "(%i) ERROR: Incorrect indentation", Curr_line_num);
  exit(3);
}

void Build_check_indent(){
  if (Indent_offset != 0) Indent_error();
}

void Check_indent(){
  while (Inp_line[Curr_col] == ' ') Curr_col += 1;
  if (Inp_line[Curr_col] == 10){
    if (fgets(Inp_line,512,Source) == NULL) Inp_line[0] = 127;
    Curr_line_num += 1; Curr_col = 0; Start_col = 0;
    Check_indent();
  }else{
    if (Inp_line[Curr_col] == 127) return;
    Indent_offset = Curr_col - Indent;
  };
}

void import_scanner(){}

void Init_scanner(cptr fn, cptr mode){
  cptr f;
  fn[1] += 2; mode[1] += 1;
  f = clib_Open(fn, mode);
  Source = (FILE*)(f[2]); Source_name = fn;
  if (Source==NULL){
    fprintf(stderr, "ERROR: can't open ");
    string_put_on(fn, stderr, 1, fn[3]);
    fprintf(stderr, "\n");
    exit(2);
  };
  if (fgets(Inp_line,512,Source) == NULL) Inp_line[0] = 127;
  Curr_col = 0;
  Curr_line_num = 1;
  Indent = 0;
  Indent_offset = 0;
};

int Next_token(){
  int Rtok, Saved_curr;
  Start_col = Curr_col;
  if (Inp_line[0] == 127){
    return 1;}
  else if (Eol(Inp_line[Curr_col])){
    if (fgets(Inp_line,512,Source) == NULL) Inp_line[0] = 127;
    Curr_line_num += 1; Curr_col = 0; Start_col = 0;
    Check_indent();
    return 2;
  };
  Curr_col = Start_col; Tok = Scan_float();
  if (Tok) return Tok;
  Curr_col = Start_col; Tok = Scan_integer();
  if (Tok) return Tok;
  Curr_col = Start_col; Tok = Scan_string();
  if (Tok) return Tok;
  Curr_col = Start_col; Tok = Scan_bcomment();
  if (Tok) return Tok;
  Curr_col = Start_col; Tok = Scan_ecomment();
  if (Tok) return Tok;
  Curr_col = Start_col; Tok = Scan_identifier();
  if (Tok){
    Saved_curr = Curr_col; Curr_col = Start_col;
    Rtok = Scan_reserved_word();
    if (Rtok && Curr_col == Saved_curr) return Rtok;
    Curr_col = Saved_curr;
    return Tok;
  };
  Curr_col = Start_col;
  return Scan_ops_etc();
};

int Scan_identifier(){
  if (Low_let(Inp_line[Curr_col]) || Up_let(Inp_line[Curr_col])){
    if (Up_let(Inp_line[Curr_col])){
      Curr_col += 1;
    }else if (Low_let(Inp_line[Curr_col])){
      Curr_col += 1;
    }else return 0;
    do{
      if (Up_let(Inp_line[Curr_col])){
        Curr_col += 1;
      }else if (Low_let(Inp_line[Curr_col])){
        Curr_col += 1;
      }else if (Digit(Inp_line[Curr_col])){
        Curr_col += 1;
      }else if (Inp_line[Curr_col] == '_'){
        Curr_col += 1;
      }else break;
    }while(1);
  }else return 0;
 return 3;
};

int Scan_float(){
  if (Digit(Inp_line[Curr_col])){
    Curr_col += 1;
    do{
      if (Digit(Inp_line[Curr_col])){
        Curr_col += 1;
      }else break;
    }while(1);
    if (Inp_line[Curr_col] == '.'){
      Curr_col += 1;
      if (!Digit(Inp_line[Curr_col])) return 0;
      Curr_col += 1;
      do{
        if (Digit(Inp_line[Curr_col])){
          Curr_col += 1;
        }else break;
      }while(1);
      if (Inp_line[Curr_col] == 'e' || Inp_line[Curr_col] == 'E'){
        if (Inp_line[Curr_col] == 'e'){
          Curr_col += 1;
        }else if (Inp_line[Curr_col] == 'E'){
          Curr_col += 1;
        }else return 0;
        if (Inp_line[Curr_col] == '-'){
          Curr_col += 1;
        };
        if (!Digit(Inp_line[Curr_col])) return 0;
        Curr_col += 1;
        do{
          if (Digit(Inp_line[Curr_col])){
            Curr_col += 1;
          }else break;
        }while(1);
      };
    }else if (Inp_line[Curr_col] == 'e' || Inp_line[Curr_col] == 'E'){
      if (Inp_line[Curr_col] == 'e'){
        Curr_col += 1;
      }else if (Inp_line[Curr_col] == 'E'){
        Curr_col += 1;
      }else return 0;
      if (Inp_line[Curr_col] == '-'){
        Curr_col += 1;
      };
      if (!Digit(Inp_line[Curr_col])) return 0;
      Curr_col += 1;
      do{
        if (Digit(Inp_line[Curr_col])){
          Curr_col += 1;
        }else break;
      }while(1);
    }else return 0;
  }else return 0;
 return 4;
};

int Scan_integer(){
  if (Digit(Inp_line[Curr_col])){
    Curr_col += 1;
    do{
      if (Digit(Inp_line[Curr_col])){
        Curr_col += 1;
      }else break;
    }while(1);
  }else return 0;
 return 5;
};

int Scan_string(){
  if (Open_quote(Inp_line[Curr_col])){
    Curr_col += 1;
    do{
      if (Backslash(Inp_line[Curr_col])){
        Curr_col += 1;
        if (!Charr(Inp_line[Curr_col])) return 0;
        Curr_col += 1;
      }else if ((Charr(Inp_line[Curr_col]) && !Close_quote(Inp_line[Curr_col]))){
        Curr_col += 1;
      }else break;
    }while(1);
    if (!Close_quote(Inp_line[Curr_col])) return 0;
    Curr_col += 1;
  }else return 0;
 return 6;
};

int Scan_bcomment(){
  if (Inp_line[Curr_col] == '!'){
    Curr_col += 1;
    do{
      if ((Charr(Inp_line[Curr_col]) && !Eol(Inp_line[Curr_col]) && Inp_line[Curr_col] != '!')){
        Curr_col += 1;
      }else break;
    }while(1);
    if (Eol(Inp_line[Curr_col])){
      /*Do nothing*/
    }else if (Inp_line[Curr_col] == '!'){
      Curr_col += 1;
    }else return 0;
  }else return 0;
 return 7;
};

int Scan_ecomment(){
  if (Inp_line[Curr_col] == '-' || Inp_line[Curr_col] == ' '){
    if (Inp_line[Curr_col] == '-'){
      Curr_col += 1;
      if (Inp_line[Curr_col] != '-') return 0;
      Curr_col += 1;
    }else if (Inp_line[Curr_col] == ' '){
      Curr_col += 1;
      if (Inp_line[Curr_col] != '-') return 0;
      Curr_col += 1;
      if (Inp_line[Curr_col] != '-') return 0;
      Curr_col += 1;
    }else return 0;
    do{
      if ((Charr(Inp_line[Curr_col]) && !Eol(Inp_line[Curr_col]))){
        Curr_col += 1;
      }else break;
    }while(1);
    if (!Eol(Inp_line[Curr_col])) return 0;
    /*Do nothing*/
  }else return 0;
 return 8;
};

int Scan_ops_etc(){
  if (Inp_line[Curr_col] == ';'){
    Curr_col += 1;
    return 30;
  }else if (Inp_line[Curr_col] == ' '){
    Curr_col += 1;
    if (Inp_line[Curr_col] == '-'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == ' '){
        Curr_col += 1;
        return 60;
      }else if (Inp_line[Curr_col] == '>'){
        Curr_col += 1;
        return 71;
      }else if (Inp_line[Curr_col] == '-'){
        Curr_col += 1;
        return 64;
      }else if (Inp_line[Curr_col] == ':'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == '='){
          Curr_col += 1;
          return 96;
        }
      }else{
        return 46;
      }
    }else if (Inp_line[Curr_col] == '#'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == ' '){
        Curr_col += 1;
        return 56;
      }else{
        return 38;
      }
    }else{
      return 12;
    }
  }else if (Inp_line[Curr_col] == '/'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == ':'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == '='){
        Curr_col += 1;
        return 83;
      }
    }else if (Inp_line[Curr_col] == '='){
      Curr_col += 1;
      return 59;
    }else{
      return 25;
    }
  }else if (Inp_line[Curr_col] == '.'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == '.'){
      Curr_col += 1;
      return 53;
    }else{
      return 22;
    }
  }else if (Inp_line[Curr_col] == '+'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == ':'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == '='){
        Curr_col += 1;
        return 79;
      }
    }else{
      return 19;
    }
  }else if (Inp_line[Curr_col] == '?'){
    Curr_col += 1;
    return 36;
  }else if (Inp_line[Curr_col] == ':'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == '='){
      Curr_col += 1;
      return 62;
    }else{
      return 29;
    }
  }else if (Inp_line[Curr_col] == '{'){
    Curr_col += 1;
    return 67;
  }else if (Inp_line[Curr_col] == '*'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == '*'){
      Curr_col += 1;
      return 49;
    }else if (Inp_line[Curr_col] == ':'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == '='){
        Curr_col += 1;
        return 78;
      }
    }else{
      return 18;
    }
  }else if (Inp_line[Curr_col] == '&'){
    Curr_col += 1;
    return 15;
  }else if (Inp_line[Curr_col] == '}'){
    Curr_col += 1;
    return 68;
  }else if (Inp_line[Curr_col] == ')'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == '('){
      Curr_col += 1;
      return 48;
    }else{
      return 17;
    }
  }else if (Inp_line[Curr_col] == '-'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == ':'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == '='){
        Curr_col += 1;
        return 81;
      }
    }else if (Inp_line[Curr_col] == '>'){
      Curr_col += 1;
      return 58;
    }else if (Inp_line[Curr_col] == '-'){
      Curr_col += 1;
      return 51;
    }else{
      return 21;
    }
  }else if (Inp_line[Curr_col] == '_'){
    Curr_col += 1;
    return 55;
  }else if (Inp_line[Curr_col] == '!'){
    Curr_col += 1;
    return 13;
  }else if (Inp_line[Curr_col] == '@'){
    Curr_col += 1;
    return 35;
  }else if (Inp_line[Curr_col] == '['){
    Curr_col += 1;
    return 52;
  }else if (Inp_line[Curr_col] == '<'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == '='){
      Curr_col += 1;
      return 63;
    }else{
      return 31;
    }
  }else if (Inp_line[Curr_col] == '='){
    Curr_col += 1;
    return 32;
  }else if (Inp_line[Curr_col] == '|'){
    Curr_col += 1;
    return 66;
  }else if (Inp_line[Curr_col] == '('){
    Curr_col += 1;
    return 16;
  }else if (Inp_line[Curr_col] == '>'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == '='){
      Curr_col += 1;
      return 65;
    }else{
      return 39;
    }
  }else if (Inp_line[Curr_col] == ','){
    Curr_col += 1;
    return 20;
  }else if (Inp_line[Curr_col] == '#'){
    Curr_col += 1;
    return 14;
  }else if (Inp_line[Curr_col] == ']'){
    Curr_col += 1;
    return 54;
  }
  Curr_col += 1;
  return 0;
};

int Scan_reserved_word(){
  if (Inp_line[Curr_col] == 'i'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'n'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'v'){
        Curr_col += 1;
        return 45;
      }else if (Inp_line[Curr_col] == 't'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'e'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'r'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 's'){
              Curr_col += 1;
              if (Inp_line[Curr_col] == 'e'){
                Curr_col += 1;
                if (Inp_line[Curr_col] == 'c'){
                  Curr_col += 1;
                  if (Inp_line[Curr_col] == 't'){
                    Curr_col += 1;
                    return 100;
                  }
                }
              }
            }
          }
        }
      }else{
        return 103;
      }
    }else if (Inp_line[Curr_col] == 'm'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'p'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'o'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'r'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 't'){
              Curr_col += 1;
              return 75;
            }
          }
        }
      }
    }else if (Inp_line[Curr_col] == 'f'){
      Curr_col += 1;
      return 99;
    }
  }else if (Inp_line[Curr_col] == 'e'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'n'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'd'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'p'){
          Curr_col += 1;
          return 84;
        }else if (Inp_line[Curr_col] == 'i'){
          Curr_col += 1;
          return 82;
        }else if (Inp_line[Curr_col] == 'f'){
          Curr_col += 1;
          return 76;
        }else{
          return 27;
        }
      }
    }else if (Inp_line[Curr_col] == 'x'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'i'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 't'){
          Curr_col += 1;
          return 92;
        }
      }else if (Inp_line[Curr_col] == 'p'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'o'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'r'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 't'){
              Curr_col += 1;
              return 80;
            }
          }
        }
      }
    }else if (Inp_line[Curr_col] == 'l'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 's'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'i'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'f'){
            Curr_col += 1;
            return 9;
          }
        }else if (Inp_line[Curr_col] == 'e'){
          Curr_col += 1;
          return 85;
        }
      }
    }
  }else if (Inp_line[Curr_col] == 'w'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'h'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'e'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'r'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'e'){
            Curr_col += 1;
            return 11;
          }
        }else if (Inp_line[Curr_col] == 'n'){
          Curr_col += 1;
          return 89;
        }
      }else if (Inp_line[Curr_col] == 'i'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'l'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'e'){
            Curr_col += 1;
            return 10;
          }
        }
      }
    }
  }else if (Inp_line[Curr_col] == 'f'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'o'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'r'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 's'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'o'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 'm'){
              Curr_col += 1;
              if (Inp_line[Curr_col] == 'e'){
                Curr_col += 1;
                return 107;
              }
            }
          }
        }else if (Inp_line[Curr_col] == 'a'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'l'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 'l'){
              Curr_col += 1;
              return 69;
            }
          }
        }else{
          return 41;
        }
      }
    }else if (Inp_line[Curr_col] == 'u'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'n'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'c'){
          Curr_col += 1;
          return 86;
        }
      }
    }else if (Inp_line[Curr_col] == 'r'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'o'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'm'){
          Curr_col += 1;
          return 90;
        }
      }
    }
  }else if (Inp_line[Curr_col] == 'm'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'a'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'p'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 's'){
          Curr_col += 1;
          return 88;
        }else{
          return 33;
        }
      }
    }
  }else if (Inp_line[Curr_col] == 'g'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'e'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 't'){
        Curr_col += 1;
        return 37;
      }
    }else if (Inp_line[Curr_col] == 'l'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'o'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'b'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'a'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 'l'){
              Curr_col += 1;
              return 61;
            }
          }
        }
      }
    }
  }else if (Inp_line[Curr_col] == 'l'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'o'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'o'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'p'){
          Curr_col += 1;
          return 93;
        }
      }
    }else if (Inp_line[Curr_col] == 'i'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 's'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 't'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 's'){
            Curr_col += 1;
            return 23;
          }else{
            return 94;
          }
        }
      }
    }
  }else if (Inp_line[Curr_col] == 't'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'o'){
      Curr_col += 1;
      return 106;
    }else if (Inp_line[Curr_col] == 'h'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'e'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'n'){
          Curr_col += 1;
          return 87;
        }
      }
    }
  }else if (Inp_line[Curr_col] == 'o'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'f'){
      Curr_col += 1;
      return 102;
    }else if (Inp_line[Curr_col] == 'r'){
      Curr_col += 1;
      return 105;
    }
  }else if (Inp_line[Curr_col] == 'p'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'o'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 's'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 't'){
          Curr_col += 1;
          return 97;
        }
      }
    }else if (Inp_line[Curr_col] == 'u'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 't'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'c'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'o'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 'l'){
              Curr_col += 1;
              return 74;
            }
          }
        }else{
          return 50;
        }
      }
    }else if (Inp_line[Curr_col] == 'r'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'e'){
        Curr_col += 1;
        return 42;
      }else if (Inp_line[Curr_col] == 'o'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'c'){
          Curr_col += 1;
          return 91;
        }
      }
    }
  }else if (Inp_line[Curr_col] == 'a'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'n'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'd'){
        Curr_col += 1;
        return 26;
      }
    }else if (Inp_line[Curr_col] == 'l'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'l'){
        Curr_col += 1;
        return 28;
      }
    }else if (Inp_line[Curr_col] == 's'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 's'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'e'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'r'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 't'){
              Curr_col += 1;
              return 72;
            }
          }
        }
      }
    }
  }else if (Inp_line[Curr_col] == 'n'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'e'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'w'){
        Curr_col += 1;
        return 43;
      }
    }else if (Inp_line[Curr_col] == 'o'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 't'){
        Curr_col += 1;
        return 47;
      }
    }
  }else if (Inp_line[Curr_col] == 'C'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == '_'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'c'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'a'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'l'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 'l'){
              Curr_col += 1;
              return 34;
            }
          }
        }else if (Inp_line[Curr_col] == 'o'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'n'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 's'){
              Curr_col += 1;
              if (Inp_line[Curr_col] == 't'){
                Curr_col += 1;
                return 98;
              }
            }
          }
        }
      }
    }
  }else if (Inp_line[Curr_col] == 'u'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'n'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 't'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'i'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'l'){
            Curr_col += 1;
            return 24;
          }
        }
      }
    }
  }else if (Inp_line[Curr_col] == 's'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'e'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 't'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 's'){
          Curr_col += 1;
          return 95;
        }else{
          return 44;
        }
      }
    }else if (Inp_line[Curr_col] == 'u'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 'b'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 's'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'e'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 't'){
              Curr_col += 1;
              return 73;
            }
          }
        }
      }
    }
  }else if (Inp_line[Curr_col] == 'r'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'e'){
      Curr_col += 1;
      if (Inp_line[Curr_col] == 't'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'u'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'r'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 'n'){
              Curr_col += 1;
              return 77;
            }
          }
        }
      }else if (Inp_line[Curr_col] == 'p'){
        Curr_col += 1;
        if (Inp_line[Curr_col] == 'e'){
          Curr_col += 1;
          if (Inp_line[Curr_col] == 'a'){
            Curr_col += 1;
            if (Inp_line[Curr_col] == 't'){
              Curr_col += 1;
              return 70;
            }
          }
        }
      }
    }
  }else if (Inp_line[Curr_col] == 'd'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'o'){
      Curr_col += 1;
      return 101;
    }
  }else if (Inp_line[Curr_col] == 'b'){
    Curr_col += 1;
    if (Inp_line[Curr_col] == 'y'){
      Curr_col += 1;
      return 104;
    }
  }
  return 0;
};

