Make ft_parse ablle to follow rule to empty token
authorLukas Jiriste <ljiriste@student.42prague.com>
Thu, 11 Jul 2024 20:44:57 +0000 (22:44 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Sun, 21 Jul 2024 18:21:22 +0000 (20:21 +0200)
ft_parse/actions.c

index 9dcc13fa5fd54c4b92257f6d291d1bd2851d259b..085205255e30a840db28ef7d7622d2040d5f8165 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/06/21 15:34:14 by ljiriste          #+#    #+#             */
-/*   Updated: 2024/07/04 12:22:27 by ljiriste         ###   ########.fr       */
+/*   Updated: 2024/07/11 21:33:32 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -15,6 +15,8 @@
 #include "libft.h"
 #include <stdlib.h>
 
+static const t_token   empty_token = {.type = "''", .str = NULL};
+
 int    push_state(t_stack *stack, size_t state_num, t_token token)
 {
        t_parser_stack_element  element;
@@ -48,7 +50,18 @@ static int   hang_top_from_tree(t_stack *stack, t_parse_tree_node *tree,
 {
        t_parse_tree_node       *node;
 
-       node = ((t_parser_stack_element *)ft_stack_pop(stack, NULL))->node;
+       if (!ft_strcmp(constituent_token->type, "''"))
+       {
+               node = malloc(sizeof(*node));
+               if (!node || ft_vec_init(&node->children, sizeof(*node)))
+               {
+                       free(node);
+                       return (1);
+               }
+               node->token = ft_token_dup(&empty_token);
+       }
+       else
+               node = ((t_parser_stack_element *)ft_stack_pop(stack, NULL))->node;
        if (ft_strcmp(node->token.type, constituent_token->type)
                || ft_vec_insert(&tree->children, node, 0) != success)
        {