/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/20 20:51:36 by ljiriste #+# #+# */
-/* Updated: 2024/06/20 10:08:13 by ljiriste ### ########.fr */
+/* Updated: 2024/06/20 13:15:32 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
return (1);
}
-static int load_rules(t_vec *rules, const char *rules_filename)
+static t_ft_stat load_rules(t_vec *rules, const char *rules_filename)
{
int fd;
char *line;
fd = open(rules_filename, O_RDONLY);
if (fd < 0)
- return (1);
+ return (file_error);
line = get_next_line(fd);
while (line)
{
if (!is_valid_rule(&rule) || ft_vec_append(rules, &rule) != success)
{
ft_vec_free(rules, free_rule);
- return (2);
+ return (non_specific_failure);
}
free(line);
line = get_next_line(fd);
}
close(fd);
- return (0);
+ return (success);
}
static size_t get_lookahead_size(t_vec *tokens)
return (tokens);
}
-static void ft_init_parsing_table(t_parsing_table *table)
+t_ft_stat ft_parsing_table_init(t_parsing_table *table)
{
- ft_vec_init(&table->rules, sizeof(t_grammar_rule));
- ft_vec_init(&table->states, sizeof(t_parser_state));
- ft_vec_init(&table->tokens, sizeof(t_token));
- return ;
+ t_ft_stat res;
+
+ res = ft_vec_init(&table->rules, sizeof(t_grammar_rule));
+ if (res != success)
+ return (res);
+ res = ft_vec_init(&table->states, sizeof(t_parser_state));
+ if (res != success)
+ return (res);
+ res = ft_vec_init(&table->tokens, sizeof(t_token));
+ return (res);
+}
+
+int is_consistent(__attribute__((unused)) t_parsing_table *table)
+{
+ return (1);
}
-t_parsing_table ft_load_parsing_table(const char *filename,
+t_ft_stat ft_parsing_table_load(t_parsing_table *table,
+ const char *filename,
const char *rules_filename)
{
int fd;
char *line;
- t_parsing_table table;
- ft_init_parsing_table(&table);
- load_rules(&table.rules, rules_filename);
+ load_rules(&table->rules, rules_filename);
fd = open(filename, O_RDONLY);
if (fd < 0)
- return (table);
+ return (file_error);
line = get_next_line(fd);
- table.tokens = parse_header(line);
+ table->tokens = parse_header(line);
free(line);
line = get_next_line(fd);
while (line)
{
- if (add_line(&table.states, line, get_lookahead_size(&table.tokens)))
- {
- ft_free_parsing_table(&table);
- return (table);
- }
+ add_line(&table->states, line, get_lookahead_size(&table->tokens));
free(line);
line = get_next_line(fd);
}
close(fd);
- return (table);
+ if (is_consistent(table))
+ return (success);
+ return (non_specific_failure);
}
-void ft_free_parsing_table(t_parsing_table *table)
+void ft_parsing_table_free(t_parsing_table *table)
{
ft_vec_free(&table->rules, free_rule);
ft_vec_free(&table->states, free_state);
}
/*
-t_parse_tree *ft_parse(t_vec tokens, t_parsing_table *parsing_table)
+t_parse_tree *ft_parsing_table_parse(t_vec tokens, t *parsing_table)
{
}
*/
/* ************************************************************************** */
/* */
/* ::: :::::::: */
-/* ft_print_parsing_table.c :+: :+: :+: */
+/* ft_parsing_table_print.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/16 07:19:50 by ljiriste #+# #+# */
-/* Updated: 2024/06/16 18:20:37 by ljiriste ### ########.fr */
+/* Updated: 2024/06/20 12:51:30 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
return ;
}
-void ft_print_parsing_table(t_parsing_table *table,
+void ft_parsing_table_print(t_parsing_table *table,
unsigned int column_width)
{
size_t i;
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/27 21:21:54 by ljiriste #+# #+# */
-/* Updated: 2024/06/20 10:44:37 by ljiriste ### ########.fr */
+/* Updated: 2024/06/20 13:17:43 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
t_vec tokens; // t_vec of tokens
} t_parsing_table;
-t_parsing_table ft_load_parsing_table(const char *filename,
- const char *rules_filename);
-void ft_print_parsing_table(t_parsing_table *table,
- unsigned int column_width);
-void ft_free_parsing_table(t_parsing_table *table);
+t_ft_stat ft_parsing_table_init(t_parsing_table *table);
+t_ft_stat ft_parsing_table_load(t_parsing_table *table,
+ const char *filename,
+ const char *rules_filename);
+void ft_parsing_table_print(t_parsing_table *table,
+ unsigned int column_width);
+void ft_parsing_table_free(t_parsing_table *table);
#endif // FT_PARSE_H