aboutsummaryrefslogtreecommitdiff
path: root/src/lexer.c
diff options
context:
space:
mode:
authorc+12023-10-28 09:59:56 -0400
committerc+12023-10-28 09:59:56 -0400
commitfb2efbd868556da31d128c755beeefd37b0178c3 (patch)
treeffa2932ba84b3f796236c46a58026c81ca60996d /src/lexer.c
parent820e75e4caa70be9719c728187a56f225e0bc136 (diff)
fixed numbers. Added keywords.
Diffstat (limited to 'src/lexer.c')
-rw-r--r--src/lexer.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/lexer.c b/src/lexer.c
index d52029c..613e161 100644
--- a/src/lexer.c
+++ b/src/lexer.c
@@ -94,12 +94,16 @@ void lexer_do_reg(lexer_t* lexer) {
default:
if (isdigit(*lexer->src)) {
lexer_add_current_char(lexer, TOKEN_INT);
- lexer->state = LEXER_STATE_INT;
+ if (isdigit(*(lexer->src + 1))) { lexer->state = LEXER_STATE_INT; }
+
+ } else if (strchr(SYNTAX_KWD_CHARS, *lexer->src)) {
+ lexer_add_current_char(lexer, TOKEN_KWD);
+ if (strchr(SYNTAX_KWD_CHARS, *(lexer->src + 1))) { lexer->state = LEXER_STATE_KWD; }
+
} else {
lexer_add_current_char(lexer, TOKEN_UNKNOWN);
lexer->state = LEXER_STATE_REG;
}
-
}
}
@@ -133,8 +137,18 @@ void lexer_do_int(lexer_t* lexer) {
lexer_add_current_char_to_last_token(lexer, TOKEN_INT);
if (! isdigit(*(lexer->src + 1))) { lexer->state = LEXER_STATE_REG; }
} else {
- log_err("???");
+ log_err("int state at non-int token");
+ }
+}
+
+void lexer_do_kwd(lexer_t* lexer) {
+ if (strchr(SYNTAX_KWD_CHARS, *lexer->src)) {
+ lexer_add_current_char_to_last_token(lexer, TOKEN_KWD);
+ if (! strchr(SYNTAX_KWD_CHARS, *(lexer->src + 1))) { lexer->state = LEXER_STATE_REG; }
+ } else {
+ log_err("keyword state at non-keyword token");
}
+
}
void lexer_run(lexer_t* lexer) {
@@ -143,8 +157,10 @@ void lexer_run(lexer_t* lexer) {
else if (lexer->state == LEXER_STATE_TAG) { lexer_do_tag(lexer); }
else if (lexer->state == LEXER_STATE_STR) { lexer_do_str(lexer); }
else if (lexer->state == LEXER_STATE_INT) { lexer_do_int(lexer); }
+ else if (lexer->state == LEXER_STATE_KWD) { lexer_do_kwd(lexer); }
lexer->src ++;
}
+ /* print tokens *AFTER* they've been discovered */
token_print(lexer->tokenl);
}