From 642d000ebd3549e88ba415cfa7562e1ee9590d5f Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sat, 29 Jul 2023 21:42:20 +0100 Subject: [PATCH] Fix keyword handling so the final keyword states don't consume input --- generate_state_table.c | 17 +++-------------- include/lexer/lexer_state_transitions.table | 6 +++--- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/generate_state_table.c b/generate_state_table.c index a600261..4f47c80 100644 --- a/generate_state_table.c +++ b/generate_state_table.c @@ -702,8 +702,6 @@ lexer_state_t lexer_state_machine(lexer_state_t state, lexer_input_t input) { return handle_true(input, LEXER_STATE_TR); case LEXER_STATE_TRU: return handle_true(input, LEXER_STATE_TRU); - case LEXER_STATE_TRUE: - return handle_true(input, LEXER_STATE_TRUE); case LEXER_STATE_F: return handle_false(input, LEXER_STATE_F); case LEXER_STATE_FA: @@ -712,20 +710,19 @@ lexer_state_t lexer_state_machine(lexer_state_t state, lexer_input_t input) { return handle_false(input, LEXER_STATE_FAL); case LEXER_STATE_FALS: return handle_false(input, LEXER_STATE_FALS); - case LEXER_STATE_FALSE: - return handle_false(input, LEXER_STATE_FALSE); case LEXER_STATE_N: return handle_null(input, LEXER_STATE_N); case LEXER_STATE_NU: return handle_null(input, LEXER_STATE_NU); case LEXER_STATE_NUL: return handle_null(input, LEXER_STATE_NUL); - case LEXER_STATE_NULL: - return handle_null(input, LEXER_STATE_NULL); case LEXER_STATE_KEYWORD_END: return handle_keyword_end(input); case LEXER_STATE_LAST_COLLECTION: return handle_last_collection(input); + case LEXER_STATE_TRUE: + case LEXER_STATE_FALSE: + case LEXER_STATE_NULL: case LEXER_STATE_OBJECT_START: case LEXER_STATE_ARRAY_START: case LEXER_STATE_OBJECT_END: @@ -985,8 +982,6 @@ lexer_state_t handle_number_end(lexer_input_t input) { } } -// TODO (Abdelrahman): Fix handling keywords - lexer_state_t handle_true(lexer_input_t input, lexer_state_t start_state) { switch (start_state) { case LEXER_STATE_T: @@ -995,8 +990,6 @@ lexer_state_t handle_true(lexer_input_t input, lexer_state_t start_state) { return input == LEXER_INPUT_LOWER_U ? LEXER_STATE_TRU : LEXER_STATE_ERROR; case LEXER_STATE_TRU: return input == LEXER_INPUT_LOWER_E ? LEXER_STATE_TRUE : LEXER_STATE_ERROR; - case LEXER_STATE_TRUE: - return LEXER_STATE_KEYWORD_END; default: return LEXER_STATE_ERROR; } @@ -1012,8 +1005,6 @@ lexer_state_t handle_false(lexer_input_t input, lexer_state_t start_state) { return input == LEXER_INPUT_LOWER_S ? LEXER_STATE_FALS : LEXER_STATE_ERROR; case LEXER_STATE_FALS: return input == LEXER_INPUT_LOWER_E ? LEXER_STATE_FALSE : LEXER_STATE_ERROR; - case LEXER_STATE_FALSE: - return LEXER_STATE_KEYWORD_END; default: return LEXER_STATE_ERROR; } @@ -1027,8 +1018,6 @@ lexer_state_t handle_null(lexer_input_t input, lexer_state_t start_state) { return input == LEXER_INPUT_LOWER_L ? LEXER_STATE_NUL : LEXER_STATE_ERROR; case LEXER_STATE_NUL: return input == LEXER_INPUT_LOWER_L ? LEXER_STATE_NULL : LEXER_STATE_ERROR; - case LEXER_STATE_NULL: - return LEXER_STATE_KEYWORD_END; default: return LEXER_STATE_ERROR; } diff --git a/include/lexer/lexer_state_transitions.table b/include/lexer/lexer_state_transitions.table index 5c57132..89811ee 100644 --- a/include/lexer/lexer_state_transitions.table +++ b/include/lexer/lexer_state_transitions.table @@ -29,14 +29,14 @@ { LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_TR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_T { LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_TRU, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_TR { LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_TRUE, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_TRU -{ LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, }, // LEXER_STATE_TRUE +{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_TRUE { LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_FA, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_F { LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_FAL, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_FA { LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_FALS, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_FAL { LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_FALSE, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_FALS -{ LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, }, // LEXER_STATE_FALSE +{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_FALSE { LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_NU, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_N { LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_NUL, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_NU { LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_NULL, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_NUL -{ LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, LEXER_STATE_KEYWORD_END, }, // LEXER_STATE_NULL +{ LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_NULL { LEXER_STATE_KEYWORD_END, LEXER_STATE_ERROR, LEXER_STATE_OBJECT_END, LEXER_STATE_ERROR, LEXER_STATE_ARRAY_END, LEXER_STATE_VALUE_END, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, LEXER_STATE_ERROR, }, // LEXER_STATE_KEYWORD_END