summaryrefslogtreecommitdiff
path: root/lexer.c
diff options
context:
space:
mode:
Diffstat (limited to 'lexer.c')
-rw-r--r--lexer.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/lexer.c b/lexer.c
index 3ad2109..c42ac3b 100644
--- a/lexer.c
+++ b/lexer.c
@@ -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;
}