aboutsummaryrefslogtreecommitdiff
path: root/src/lexer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lexer.cc')
-rw-r--r--src/lexer.cc21
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;