diff options
Diffstat (limited to 'lexer.c')
-rw-r--r-- | lexer.c | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -52,6 +52,7 @@ Token *lexer(const char *s) size_t size = 128; Token *toks = calloc(size + 1, sizeof(Token)); size_t tok_i = 0; + size_t column = 1; size_t line = 1; if (toks == NULL) { perror("lexer"); @@ -60,13 +61,18 @@ Token *lexer(const char *s) while (*s != '\0') { /* Skip whitespaces. */ while (isspace(*s)) { - if (*s == '\n') + if (*s == '\n') { + column = 1; line += 1; + } else + column += 1; s += 1; } if (*s == '\0') break; + toks[tok_i].column = column; toks[tok_i].line = line; + const char *rem_s = s; if (*s == '"') { const char *end = strchr(s + 1, '"'); if (end == NULL) { @@ -96,7 +102,7 @@ Token *lexer(const char *s) return NULL; } strncpy(toks[tok_i].v.s, s, len); - toks[tok_i].type = TOK_KEYWORD; + toks[tok_i].type = TOK_WORD; tok_i += 1; s += len; } else if (isdigit(*s)) { @@ -126,6 +132,7 @@ Token *lexer(const char *s) if (toks == NULL) return NULL; } + column += s - rem_s; } return toks; } |