From 24754036d4b342a646a358af8266d3f777ca7d14 Mon Sep 17 00:00:00 2001 From: Lukas Jiriste Date: Sun, 7 Jul 2024 09:48:11 +0200 Subject: [PATCH] Make the generator count the terminal symbols --- ft_parse/ft_parse_inner.h | 3 ++- ft_parse/ft_parsing_table_generate.c | 3 ++- ft_parse/ft_parsing_table_load.c | 18 +----------------- ft_parse/helpers.c | 18 +++++++++++++++++- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/ft_parse/ft_parse_inner.h b/ft_parse/ft_parse_inner.h index e5b425a..b70925c 100644 --- a/ft_parse/ft_parse_inner.h +++ b/ft_parse/ft_parse_inner.h @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/20 13:23:20 by ljiriste #+# #+# */ -/* Updated: 2024/07/04 12:21:27 by ljiriste ### ########.fr */ +/* Updated: 2024/07/07 09:44:08 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -44,6 +44,7 @@ void ft_free_stack_element(void *v_el); t_token ft_token_dup(const t_token *token); ssize_t find_token_index(t_token token, const t_vec *tokens); +size_t get_terminal_tokens_num(t_vec *tokens); t_ft_stat load_rules(t_vec *rules, const char *rules_filename); int add_line(t_vec *states, const char *line, size_t lookahead_size); int follow_rule(t_stack *stack, size_t rule_num, diff --git a/ft_parse/ft_parsing_table_generate.c b/ft_parse/ft_parsing_table_generate.c index fc60920..4784a74 100644 --- a/ft_parse/ft_parsing_table_generate.c +++ b/ft_parse/ft_parsing_table_generate.c @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/27 11:16:53 by ljiriste #+# #+# */ -/* Updated: 2024/07/07 09:17:53 by ljiriste ### ########.fr */ +/* Updated: 2024/07/07 09:44:14 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -691,6 +691,7 @@ t_ft_stat prepare_table(t_parsing_table *table, const char *rules_filename) return (res); } res = categorize_tokens(&table->tokens, &table->rules); + table->terminal_tokens_num = get_terminal_tokens_num(&table->tokens); if (res != success) ft_vec_free(&table->rules, ft_free_rule); return (res); diff --git a/ft_parse/ft_parsing_table_load.c b/ft_parse/ft_parsing_table_load.c index d44a8d9..0c28a7d 100644 --- a/ft_parse/ft_parsing_table_load.c +++ b/ft_parse/ft_parsing_table_load.c @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/20 12:34:17 by ljiriste #+# #+# */ -/* Updated: 2024/06/20 17:45:54 by ljiriste ### ########.fr */ +/* Updated: 2024/07/07 09:44:09 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -54,22 +54,6 @@ static t_vec parse_header(const char *header) return (tokens); } -static size_t get_terminal_tokens_num(t_vec *tokens) -{ - size_t i; - t_token *token; - - i = 0; - while (i < tokens->size) - { - token = (t_token *)ft_vec_access(tokens, i); - if (!ft_strcmp(token->type, "$")) - return (i); - ++i; - } - return (0); -} - static int is_consistent(__attribute__((unused)) t_parsing_table *table) { return (1); diff --git a/ft_parse/helpers.c b/ft_parse/helpers.c index 1aca55b..3868245 100644 --- a/ft_parse/helpers.c +++ b/ft_parse/helpers.c @@ -6,7 +6,7 @@ /* By: ljiriste +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/21 15:30:29 by ljiriste #+# #+# */ -/* Updated: 2024/07/04 12:14:30 by ljiriste ### ########.fr */ +/* Updated: 2024/07/07 09:43:29 by ljiriste ### ########.fr */ /* */ /* ************************************************************************** */ @@ -56,3 +56,19 @@ ssize_t find_token_index(t_token token, const t_vec *tokens) } return (-1); } + +size_t get_terminal_tokens_num(t_vec *tokens) +{ + size_t i; + t_token *token; + + i = 0; + while (i < tokens->size) + { + token = (t_token *)ft_vec_access(tokens, i); + if (!ft_strcmp(token->type, "$")) + return (i); + ++i; + } + return (0); +} -- 2.30.2