static Token *read_ident(char c) { String *s = make_string(); string_append(s, c); for (;;) { int c2 = getc(stdin); if (isalnum(c2) || c == '_') { string_append(s, c2); } else { ungetc(c2, stdin); return make_ident(s); } } return make_strtok(s); }
static Token *read_string(void) { String *s = make_string(); for (;;) { int c = getc(stdin); if (c == EOF) { error("Unterminated string"); } if (c == '"') { break; } if (c == '\\') { c = getc(stdin); if (c == EOF) { error("Unterminated \\"); } } string_append(s, c); } return make_strtok(s); }
static Token *read_string(void) { String *s = make_string(); for (;;) { int c = getc(stdin); if (c == EOF) error("Unterminated string"); if (c == '"') break; if (c == '\\') { c = getc(stdin); switch (c) { case EOF: error("Unterminated \\"); case '\"': break; case 'n': c = '\n'; break; default: error("Unknown quote: %c", c); } } string_append(s, c); } return make_strtok(s); }