diff options
author | Raghuram Subramani <raghus2247@gmail.com> | 2025-06-13 11:45:49 +0530 |
---|---|---|
committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-06-13 11:45:49 +0530 |
commit | e119cb100dadf8b3e3b6660029abf73d14cf209b (patch) | |
tree | 366b289a742fa6a8e043feac6217fa0ae1f5217b /src | |
parent | 35931d1021ac886e85015fc6e1640350cba578a1 (diff) |
lexer: handle identifiers
Diffstat (limited to 'src')
-rw-r--r-- | src/lexer.cc | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/lexer.cc b/src/lexer.cc index e2a81cd..e09e187 100644 --- a/src/lexer.cc +++ b/src/lexer.cc @@ -136,6 +136,15 @@ Lexer::number(void) advance(); } + add_token(NUMBER); +} + +void +Lexer::identifier(void) +{ + while (isalnum(peek())) + advance(); + int token_length = m_current - m_start; if (token_length == 0) token_length++; @@ -143,7 +152,14 @@ Lexer::number(void) char *lexeme; asprintf(&lexeme, "%.*s", token_length, m_script + m_start); - add_token(NUMBER); + token_type_e type = IDENTIFIER; + + for (size_t i = 0; i < N_KEYWORDS; i++) { + if (!strcmp(lexeme, KEYWORD_STRING_MAPPING[i])) + type = KEYWORD_TYPE_MAPPING[i]; + } + + add_token(type); } void @@ -238,6 +254,9 @@ Lexer::scan_token(void) if (isdigit(c)) number(); + else if (isalpha(c)) + identifier(); + else { printf("[-] Error: Unexpected character %c in line %lu\n", c, m_line); m_errored = true; |