Ejemplo n.º 1
0
static Token *read_token_int(void) {
  int c = getc_nonspace();
  switch (c) {
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
      return read_number(c);
    case 'a':
    case 'b':
    case 'c':
    case 'd':
    case 'e':
    case 'f':
    case 'g':
    case 'h':
    case 'i':
    case 'j':
    case 'k':
    case 'l':
    case 'm':
    case 'n':
    case 'o':
    case 'p':
    case 'q':
    case 'r':
    case 's':
    case 't':
    case 'u':
    case 'v':
    case 'w':
    case 'x':
    case 'y':
    case 'z':
    case 'A':
    case 'B':
    case 'C':
    case 'D':
    case 'E':
    case 'F':
    case 'G':
    case 'H':
    case 'I':
    case 'J':
    case 'K':
    case 'L':
    case 'M':
    case 'N':
    case 'O':
    case 'P':
    case 'Q':
    case 'R':
    case 'S':
    case 'T':
    case 'U':
    case 'V':
    case 'W':
    case 'X':
    case 'Y':
    case 'Z':
    case '_':
      return read_ident(c);
    case '*':
    case '/':
    case '(':
    case ')':
    case ',':
    case ';':
    case '[':
    case ']':
    case '{':
    case '}':
    case '<':
    case '>':
    case '!':
    case '?':
    case ':':
    case '.':
      return make_punct(c);
    case '-':
      c = getc(stdin);
      if (c == '-') return make_punct(PUNCT_DEC);
      if (c == '>') return make_punct(PUNCT_ARROW);
      ungetc(c, stdin);
      return make_punct('-');
    case '=':
      return read_rep('=', '=', PUNCT_EQ);
    case '+':
      return read_rep('+', '+', PUNCT_INC);
    case '&':
      return read_rep('&', '&', PUNCT_LOGAND);
    case '|':
      return read_rep('|', '|', PUNCT_LOGOR);
    case '"':
      return read_string();
    case '\'':
      return read_char();
    case EOF:
      return NULL;
    default:
      error("Unexpected character: '%c'", c);
  }
}
Ejemplo n.º 2
0
Archivo: lex.c Proyecto: zoncoen/8ccc
static Token *read_token_int(void)
{
    int c = getc_nonspace();
    switch (c) {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            return read_number(c);
        case '"':
            return read_string();
        case '\'':
            return read_char();
        case 'a':
        case 'b':
        case 'c':
        case 'd':
        case 'e':
        case 'f':
        case 'g':
        case 'h':
        case 'i':
        case 'j':
        case 'k':
        case 'l':
        case 'm':
        case 'n':
        case 'o':
        case 'p':
        case 'q':
        case 'r':
        case 's':
        case 't':
        case 'u':
        case 'v':
        case 'w':
        case 'x':
        case 'y':
        case 'z':
        case 'A':
        case 'B':
        case 'C':
        case 'D':
        case 'E':
        case 'F':
        case 'G':
        case 'H':
        case 'I':
        case 'J':
        case 'K':
        case 'L':
        case 'M':
        case 'N':
        case 'O':
        case 'P':
        case 'Q':
        case 'R':
        case 'S':
        case 'T':
        case 'U':
        case 'V':
        case 'W':
        case 'X':
        case 'Y':
        case 'Z':
        case '_':
            return read_ident(c);
        case '/':
        case '=':
        case '*':
        case '+':
        case '-':
        case '(':
        case ')':
        case ',':
        case ';':
            return make_punct(c);
        case EOF:
            return NULL;
        default:
            error("Unexpected character: '%c'", c);
    }
}
Ejemplo n.º 3
0
static Token *read_rep(int expect, int t1, int t2) {
  int c = getc(stdin);
  if (c == expect) return make_punct(t2);
  ungetc(c, stdin);
  return make_punct(t1);
}