Fix keyword handling so the final keyword states don't consume input

This commit is contained in:
Abdelrahman Said 2023-07-29 21:42:20 +01:00
parent b4a4865870
commit 642d000ebd
2 changed files with 6 additions and 17 deletions

View File

@ -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;
}

View File

@ -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