An draft of some parsing functions and structures
authorLukas Jiriste <ljiriste@student.42prague.com>
Thu, 30 May 2024 04:49:03 +0000 (06:49 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Thu, 30 May 2024 04:49:03 +0000 (06:49 +0200)
ft_parse/ft_parse.c [new file with mode: 0644]
inc/ft_parse.h [new file with mode: 0644]

diff --git a/ft_parse/ft_parse.c b/ft_parse/ft_parse.c
new file mode 100644 (file)
index 0000000..767bc1b
--- /dev/null
@@ -0,0 +1,48 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_parse.c                                         :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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 (file)
index 0000000..d34bd6a
--- /dev/null
@@ -0,0 +1,48 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*                                                        :::      ::::::::   */
+/*   ft_parse.h                                         :+:      :+:    :+:   */
+/*                                                    +:+ +:+         +:+     */
+/*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
+/*                                                +#+#+#+#+#+   +#+           */
+/*   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