Make the generator count the terminal symbols
authorLukas Jiriste <ljiriste@student.42prague.com>
Sun, 7 Jul 2024 07:48:11 +0000 (09:48 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Sun, 21 Jul 2024 18:21:21 +0000 (20:21 +0200)
ft_parse/ft_parse_inner.h
ft_parse/ft_parsing_table_generate.c
ft_parse/ft_parsing_table_load.c
ft_parse/helpers.c

index e5b425a521166fa8c23616c64dc8448ec53ef522..b70925c2ae9bd1bc87b95642f09c1c680825ee7a 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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,
index fc6092035b9a13e17f39fc1fe3fbdadbedba5e9e..4784a7446da273910653450f74c5adbd8d9a6d49 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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);
index d44a8d91465b9e9fa749756182eb37aec435d60f..0c28a7d4d12dccdd8e1a36125911fcebd69e2fde 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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);
index 1aca55bc8ef52d03465b26be6529236b9d353785..3868245b1d199781b3709d706efa4d78611c509b 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   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);
+}