適当に変えてとりあえずはまらないようにしてみた。
期待してる動作かどうかはわからないですけど。

void get_token ()
{
 char c;
 while ( 1 ){ /* <-ここ */
   c = *reg_string; /* <-ここ */
   switch (c) {
    case '\\': /* <-これはこのままでいいの? */
     ++reg_string;
     if (c == '0')
      curr_token = EMPTY;
     else if (c == 'e')
       ・
       ・
       ・
    case '\0':
     curr_token = EOREG;
     break;
    default:
     curr_token = LETTER;
     break;
    }
    if(curr_token == EOREG ) break; /* <-ここ */
   reg_string++;
  }
 if (debug)
  print_token (curr_token, token_val);
}