From 68ea1a581bc1ddf3129e159bb9f6fe2284a8acd0 Mon Sep 17 00:00:00 2001 From: Lukas Jiriste Date: Thu, 30 May 2024 06:49:03 +0200 Subject: [PATCH] An draft of some parsing functions and structures --- ft_parse/ft_parse.c | 48 +++++++++++++++++++++++++++++++++++++++++++++ inc/ft_parse.h | 48 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 ft_parse/ft_parse.c create mode 100644 inc/ft_parse.h diff --git a/ft_parse/ft_parse.c b/ft_parse/ft_parse.c new file mode 100644 index 0000000..767bc1b --- /dev/null +++ b/ft_parse/ft_parse.c @@ -0,0 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_parse.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ljiriste +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/20 20:51:36 by ljiriste #+# #+# */ +/* Updated: 2024/05/27 22:57:11 by ljiriste ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_parse.h" + +t_parsing_table ft_load_parsing_table(const char *filename) +{ + int fd; + t_parsing_table table; + + fd = open(filename, O_RDONLY); + if (fd < 0) + return (NULL); + ft_vec_init(&table.rules, sizeof(t_grammar_rule)); + ft_vec_init(&table.states, sizeof(t_parser_state)); + line = get_next_line(fd); + while (line) + { + if (add_line(&table, line)) + { + ft_free_parsing_table(&table); + return (NULL); + } + free(line); + line = get_next_line(fd); + } + return (table); +} + +void ft_free_parsing_table(t_parsing_table *table) +{ + ft_vec_free(&table.rules, free_rule); + ft_vec_free(&table.states, free_state); + return ; +} + +t_parse_tree *ft_parse(t_vec tokens, t_parsing_table *parsing_table) +{ +} diff --git a/inc/ft_parse.h b/inc/ft_parse.h new file mode 100644 index 0000000..d34bd6a --- /dev/null +++ b/inc/ft_parse.h @@ -0,0 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_parse.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: ljiriste +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/05/27 21:21:54 by ljiriste #+# #+# */ +/* Updated: 2024/05/27 22:57:11 by ljiriste ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_PARSE_H +# define FT_PARSE_H + +typedef struct s_grammar_rule +{ + t_token result; + t_vec constituents; // t_vec of t_tokens +} t_grammar_rule; + +enum e_parser_action_type +{ + parser_accept; + parser_refuse; + parser_reduce; + parser_shift; +} + +typedef struct s_parser_action +{ + enum e_parse_action_type type; + size_t number; +} t_parser_action; + +typedef struct s_parser_state +{ + t_vec lookahead; // t_vec of t_action + t_vec gotos; // t_vec of size_t +} t_parser_state; + +typedef struct s_parsing_table +{ + t_vec rules; // t_vec of t_grammar_rule + t_vec states; // t_vec of t_parser_state +} t_parsing_table; + +#endif // FT_PARSE_H -- 2.30.2