From 6c454fbb8eb6c7680a52183ea1f7c70fae9ab4b9 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Tue, 25 Jul 2023 08:55:46 +0100 Subject: [PATCH] Add char_type function to lexer.c but exclude it from build --- src/lexer/lexer.c | 100 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 80 insertions(+), 20 deletions(-) diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c index 45c37db..4454a45 100644 --- a/src/lexer/lexer.c +++ b/src/lexer/lexer.c @@ -95,6 +95,9 @@ struct lexer_s { dstr_t *error_message; }; +#if 0 +INTERNAL lexer_input_t char_type(char input); +#endif INTERNAL void stack_push(state_stack_t *stack, lexer_state_t value); INTERNAL lexer_state_t stack_pop(state_stack_t *stack); @@ -298,6 +301,83 @@ void print_token(token_t token) { printf("}\n"); } +#if 0 +INTERNAL lexer_input_t char_type(char input) { + if (isspace(input)) { + return LEXER_INPUT_WHITE_SPACE; + } else if (input >= '1' && input <= '9') { + return LEXER_INPUT_NON_ZERO; + } + + switch (input) { + case '{': + return LEXER_INPUT_OPEN_BRACE; + case '}': + return LEXER_INPUT_CLOSE_BRACE; + case '[': + return LEXER_INPUT_OPEN_BRACKET; + case ']': + return LEXER_INPUT_CLOSE_BRACKET; + case ',': + return LEXER_INPUT_COMMA; + case ':': + return LEXER_INPUT_COLON; + case '"': + return LEXER_INPUT_DOUBLE_QUOTE; + case '\\': + return LEXER_INPUT_BACK_SLASH; + case '/': + return LEXER_INPUT_FORWARD_SLASH; + case 'a': + return LEXER_INPUT_LOWER_A; + case 'b': + return LEXER_INPUT_LOWER_B; + case 'c': + return LEXER_INPUT_LOWER_C; + case 'd': + return LEXER_INPUT_LOWER_D; + case 'e': + return LEXER_INPUT_LOWER_E; + case 'f': + return LEXER_INPUT_LOWER_F; + case 'l': + return LEXER_INPUT_LOWER_L; + case 'n': + return LEXER_INPUT_LOWER_N; + case 'r': + return LEXER_INPUT_LOWER_R; + case 's': + return LEXER_INPUT_LOWER_S; + case 't': + return LEXER_INPUT_LOWER_T; + case 'u': + return LEXER_INPUT_LOWER_U; + case 'A': + return LEXER_INPUT_UPPER_A; + case 'B': + return LEXER_INPUT_UPPER_B; + case 'C': + return LEXER_INPUT_UPPER_C; + case 'D': + return LEXER_INPUT_UPPER_D; + case 'E': + return LEXER_INPUT_UPPER_E; + case 'F': + return LEXER_INPUT_UPPER_F; + case '-': + return LEXER_INPUT_MINUS; + case '+': + return LEXER_INPUT_PLUS; + case '.': + return LEXER_INPUT_DECIMAL; + case '0': + return LEXER_INPUT_ZERO; + default: + return LEXER_INPUT_OTHER; + } +} +#endif + void stack_push(state_stack_t *stack, lexer_state_t state) { if (stack->size + 1 >= MAX_STACK_CAPACITY) { return; @@ -772,8 +852,6 @@ lexer_state_t handle_number(lexer_t *lexer, char input) { return LEXER_STATE_FRACTION; } else if (input == '}' || input == ']') { - // TODO (Abdelrahman): Set the token type correctly based on whether the - // number is an integer or a double lexer->token_ready = true; u64 column = lexer->column - dstr_length(lexer->current_string); @@ -783,8 +861,6 @@ lexer_state_t handle_number(lexer_t *lexer, char input) { return handle_collection_end(lexer, input); } else if (input == ',') { - // TODO (Abdelrahman): Set the token type correctly based on whether the - // number is an integer or a double lexer->token_ready = true; u64 column = lexer->column - dstr_length(lexer->current_string); @@ -794,8 +870,6 @@ lexer_state_t handle_number(lexer_t *lexer, char input) { return lexer->stack.stack[lexer->stack.size - 1]; } else if (isspace(input)) { - // TODO (Abdelrahman): Set the token type correctly based on whether the - // number is an integer or a double lexer->token_ready = true; u64 column = lexer->column - dstr_length(lexer->current_string); @@ -815,8 +889,6 @@ lexer_state_t handle_fraction(lexer_t *lexer, char input) { return LEXER_STATE_FRACTION; } else if (input == '}' || input == ']') { - // TODO (Abdelrahman): Set the token type correctly based on whether the - // number is an integer or a double lexer->token_ready = true; u64 column = lexer->column - dstr_length(lexer->current_string); @@ -830,8 +902,6 @@ lexer_state_t handle_fraction(lexer_t *lexer, char input) { return LEXER_STATE_EXPONENT; } else if (input == ',') { - // TODO (Abdelrahman): Set the token type correctly based on whether the - // number is an integer or a double lexer->token_ready = true; u64 column = lexer->column - dstr_length(lexer->current_string); @@ -841,8 +911,6 @@ lexer_state_t handle_fraction(lexer_t *lexer, char input) { return lexer->stack.stack[lexer->stack.size - 1]; } else if (isspace(input)) { - // TODO (Abdelrahman): Set the token type correctly based on whether the - // number is an integer or a double lexer->token_ready = true; u64 column = lexer->column - dstr_length(lexer->current_string); @@ -884,8 +952,6 @@ lexer_state_t handle_power(lexer_t *lexer, char input) { return LEXER_STATE_POWER; } else if (input == '}' || input == ']') { - // TODO (Abdelrahman): Set the token type correctly based on whether the - // number is an integer or a double lexer->token_ready = true; u64 column = lexer->column - dstr_length(lexer->current_string); @@ -895,8 +961,6 @@ lexer_state_t handle_power(lexer_t *lexer, char input) { return handle_collection_end(lexer, input); } else if (input == ',') { - // TODO (Abdelrahman): Set the token type correctly based on whether the - // number is an integer or a double lexer->token_ready = true; u64 column = lexer->column - dstr_length(lexer->current_string); @@ -906,8 +970,6 @@ lexer_state_t handle_power(lexer_t *lexer, char input) { return lexer->stack.stack[lexer->stack.size - 1]; } else if (isspace(input)) { - // TODO (Abdelrahman): Set the token type correctly based on whether the - // number is an integer or a double lexer->token_ready = true; u64 column = lexer->column - dstr_length(lexer->current_string); @@ -925,8 +987,6 @@ lexer_state_t handle_number_end(lexer_t *lexer, char input) { if (isspace(input)) { return LEXER_STATE_NUMBER_END; } else if (input == ',') { - // TODO (Abdelrahman): Set the token type correctly based on whether the - // number is an integer or a double lexer->token_ready = true; u64 column = lexer->column - dstr_length(lexer->current_string);