From 1699d97db7659d471390d2e173dbca6b35747f68 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 5 May 2025 14:43:17 +0900 Subject: support #define that replaces name with identifiers --- main.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 988d524..83f7a22 100644 --- a/main.c +++ b/main.c @@ -334,16 +334,29 @@ struct Token* tokenize(char* src, int len) { pos += 1; } int start2 = pos; - while (isdigit(src[pos])) { - pos += 1; + int is_digit = isdigit(src[pos]); + if (is_digit) { + while (isdigit(src[pos])) { + pos += 1; + } + } else { + while (isalnum(src[pos]) || src[pos] == '_') { + pos += 1; + } } def->to = calloc(1, sizeof(struct Token)); - def->to->kind = TK_L_INT; + if (is_digit) { + def->to->kind = TK_L_INT; + } else { + def->to->kind = TK_IDENT; + } def->to->value = calloc(pos - start2 + 1, sizeof(char)); memcpy(def->to->value, src + start2, pos - start2); def += 1; } else { - fatal_error("unknown token"); + char* buf = calloc(1024, sizeof(char)); + sprintf(buf, "!!! %d", c); + fatal_error(buf); } } return tokens; -- cgit v1.2.3-70-g09d2