updated stuff in ast

This commit is contained in:
Maieul BOYER 2024-08-02 17:05:20 +02:00
parent 27067e158e
commit 7ac90bac55
No known key found for this signature in database
20 changed files with 171 additions and 150 deletions

View file

@ -1,11 +1,11 @@
SRC_FILES = \ SRC_FILES = \
_not_done_function \
_not_done_print \
ast_alloc/ast_alloc \ ast_alloc/ast_alloc \
ast_alloc/ast_alloc_scripting \ ast_alloc/ast_alloc_scripting \
ast_free/ast_free \ ast_free/ast_free \
ast_free/ast_free_scripting \ ast_free/ast_free_scripting \
from_node/from_node \ from_node/from_node \
not_done_function \
not_done_print \
print_ast/ast_print_command \ print_ast/ast_print_command \
print_ast/ast_print_global \ print_ast/ast_print_global \
print_ast/ast_print_node \ print_ast/ast_print_node \

View file

@ -1,17 +1,17 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* ::: :::::::: */ /* ::: :::::::: */
/* ast_forward_def.h :+: :+: :+: */ /* _forward_def.h :+: :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ +:+ +:+ */
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */ /* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/11 14:24:24 by maiboyer #+# #+# */ /* Created: 2024/06/11 14:24:24 by maiboyer #+# #+# */
/* Updated: 2024/07/22 16:52:42 by rparodi ### ########.fr */ /* Updated: 2024/08/02 17:04:12 by maiboyer ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#ifndef AST_FORWARD_DEF_H #ifndef _FORWARD_DEF_H
# define AST_FORWARD_DEF_H # define _FORWARD_DEF_H
typedef enum e_ast_node_kind t_ast_node_kind; typedef enum e_ast_node_kind t_ast_node_kind;
typedef enum e_ast_word_kind t_ast_word_kind; typedef enum e_ast_word_kind t_ast_word_kind;

View file

@ -0,0 +1,128 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* _from_node.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/08/02 16:54:31 by maiboyer #+# #+# */
/* Updated: 2024/08/02 17:00:38 by maiboyer ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef _FROM_NODE_H
# define _FROM_NODE_H
# include "ast/ast.h"
# include "me/types.h"
# include "parser/api.h"
void _add_negation(t_ast_node *node);
void _append_redirection(t_ast_node node,
t_ast_node redirection);
t_ast_expansion_operator _extract_exp_op(t_parse_node self);
t_str _extract_str(t_parse_node self, t_const_str input);
t_ast_redirection_kind _get_redirection_op(t_parse_node self);
t_ast_arithmetic_operator _parse_operator(t_parse_node self);
t_ast_terminator_kind _select_term(t_parse_node node);
t_vec_ast *_vec_command(t_ast_command *val, t_usize i);
t_error ast_from_node(t_parse_node node, t_const_str input,
t_ast_node *out);
void ast_set_term(t_ast_node *node,
t_ast_terminator_kind term);
t_error build_sym__case_item_last(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_binary_expression(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_expansion(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_literal(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_parenthesized_expression(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_postfix_expression(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_ternary_expression(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_unary_expression(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_case_item(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_case_statement(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_command(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_command_name(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_command_substitution(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_comment(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_compound_statement(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_concatenation(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_do_group(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_elif_clause(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_else_clause(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_expansion(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_extglob_pattern(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_file_descriptor(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_file_redirect(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_for_statement(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_function_definition(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_if_statement(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_heredoc_redirect(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_simple_heredoc_body(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_heredoc_body(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_heredoc_content(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_heredoc_end(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_heredoc_start(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_list(t_parse_node self, t_const_str input,
t_ast_node *out);
t_error build_sym_negated_command(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_number(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_pipeline(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_program(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_raw_string(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_redirected_statement(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_regex(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_simple_expansion(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_string(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_string_content(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_subshell(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_variable_assignment(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_while_statement(t_parse_node self,
t_const_str input, t_ast_node *out);
t_error build_sym_word(t_parse_node self, t_const_str input,
t_ast_node *out);
#endif /* _FROM_NODE_H */

View file

@ -1,17 +1,17 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* ::: :::::::: */ /* ::: :::::::: */
/* _function_declaration.h :+: :+: :+: */ /* _print_ast.h :+: :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ +:+ +:+ */
/* By: rparodi <rparodi@student.42.fr> +#+ +:+ +#+ */ /* By: rparodi <rparodi@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/26 11:30:24 by rparodi #+# #+# */ /* Created: 2024/07/26 11:30:24 by rparodi #+# #+# */
/* Updated: 2024/07/30 16:59:21 by maiboyer ### ########.fr */ /* Updated: 2024/08/02 17:04:04 by maiboyer ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#ifndef _FUNCTION_DECLARATION_H #ifndef _PRINT_AST_H
# define _FUNCTION_DECLARATION_H # define _PRINT_AST_H
# include "ast/ast.h" # include "ast/ast.h"
# include "me/types.h" # include "me/types.h"

View file

@ -1,19 +1,19 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* ::: :::::::: */ /* ::: :::::::: */
/* ast_raw_structs.h :+: :+: :+: */ /* _raw_structs.h :+: :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ +:+ +:+ */
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */ /* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/14 17:46:58 by maiboyer #+# #+# */ /* Created: 2024/06/14 17:46:58 by maiboyer #+# #+# */
/* Updated: 2024/08/01 09:34:59 by maiboyer ### ########.fr */ /* Updated: 2024/08/02 17:03:50 by maiboyer ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#ifndef AST_RAW_STRUCTS_H #ifndef _RAW_STRUCTS_H
# define AST_RAW_STRUCTS_H # define _RAW_STRUCTS_H
# include "ast/ast_forward_def.h" # include "ast/_forward_def.h"
# include "me/types.h" # include "me/types.h"
# include "me/vec/vec_ast.h" # include "me/vec/vec_ast.h"

View file

@ -6,15 +6,15 @@
/* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */ /* By: maiboyer <maiboyer@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/11 14:23:40 by maiboyer #+# #+# */ /* Created: 2024/06/11 14:23:40 by maiboyer #+# #+# */
/* Updated: 2024/07/30 18:41:40 by maiboyer ### ########.fr */ /* Updated: 2024/08/02 17:02:03 by maiboyer ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#ifndef AST_H #ifndef AST_H
# define AST_H # define AST_H
# include "ast/ast_forward_def.h" // IWYU pragma: keep # include "ast/_forward_def.h" // IWYU pragma: keep
# include "ast/ast_raw_structs.h" // IWYU pragma: keep # include "ast/_raw_structs.h" // IWYU pragma: keep
enum e_ast_node_kind enum e_ast_node_kind
{ {
@ -93,5 +93,6 @@ struct s_ast_node
}; };
void ast_free(t_ast_node self); void ast_free(t_ast_node self);
t_ast_node ast_alloc(t_ast_node_kind kind);
#endif /* AST_H */ #endif /* AST_H */

View file

@ -10,7 +10,7 @@
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ast/_function_declaration.h" #include "ast/_print_ast.h"
void ast_print_node_if(t_ast_node self) void ast_print_node_if(t_ast_node self)
{ {

View file

@ -6,11 +6,21 @@
/* By: rparodi <rparodi@student.42.fr> +#+ +:+ +#+ */ /* By: rparodi <rparodi@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2024/07/26 10:55:52 by rparodi #+# #+# */ /* Created: 2024/07/26 10:55:52 by rparodi #+# #+# */
/* Updated: 2024/08/02 15:48:33 by rparodi ### ########.fr */ /* Updated: 2024/08/02 16:58:13 by maiboyer ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "./from_node.h" #include "ast/_from_node.h"
#include "ast/ast.h"
#include "gmr/field_identifiers.h"
#include "gmr/field_identifiers.h"
#include "gmr/symbols.h"
#include "gmr/symbols.h"
#include "me/str/str.h"
#include "me/types.h"
#include "me/vec/vec_ast.h"
#include "parser/api.h"
#include <stdio.h>
/* /*
sym_arithmetic_binary_expression sym_arithmetic_binary_expression

View file

@ -1,118 +0,0 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* from_node.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: rparodi <rparodi@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/08/02 14:47:50 by rparodi #+# #+# */
/* Updated: 2024/08/02 15:47:55 by rparodi ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FROM_NODE_H
# define FROM_NODE_H
# include "ast/ast.h"
# include "gmr/field_identifiers.h"
# include "gmr/symbols.h"
# include "me/mem/mem.h"
# include "me/str/str.h"
# include "me/types.h"
# include "me/vec/vec_ast.h"
# include "parser/api.h"
# include <inttypes.h>
# include <stdio.h>
t_ast_node ast_alloc(t_ast_node_kind kind);
t_error build_sym_case_item(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_case_statement(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_command(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_command_name(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_comment(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_compound_statement(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_elif_clause(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_else_clause(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_extglob_pattern(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_file_redirect(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_for_statement(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_function_definition(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_if_statement(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_list(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_negated_command(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_number(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_pipeline(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_program(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_raw_string(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_redirected_statement(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_regex(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_simple_expansion(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_string_content(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_subshell(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_variable_assignment(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_while_statement(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_word(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_expansion(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_command_substitution(\
t_parse_node self, t_const_str input, t_ast_node *out);
/* FUNCTION DONE BUT BY RAPH */
t_error build_sym_arithmetic_binary_expression(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_literal(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_parenthesized_expression(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_postfix_expression(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_ternary_expression(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_unary_expression(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_arithmetic_expansion(\
t_parse_node self, t_const_str input, t_ast_node *out);
// TODO: This is my homework,
// it'll need to be handled in a special way I feel...
t_error build_sym_heredoc_redirect(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_simple_heredoc_body(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_heredoc_body(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_heredoc_content(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_heredoc_end(\
t_parse_node self, t_const_str input, t_ast_node *out);
t_error build_sym_heredoc_start(\
t_parse_node self, t_const_str input, t_ast_node *out);
#endif

View file

@ -10,7 +10,7 @@
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ast/_function_declaration.h" #include "ast/_print_ast.h"
void ast_print_node_command_substitution(t_ast_node self) void ast_print_node_command_substitution(t_ast_node self)
{ {

View file

@ -10,7 +10,7 @@
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ast/_function_declaration.h" #include "ast/_print_ast.h"
void ast_print_node_empty(t_ast_node self) void ast_print_node_empty(t_ast_node self)
{ {

View file

@ -10,7 +10,7 @@
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ast/_function_declaration.h" #include "ast/_print_ast.h"
void ast_print_node_variable_assignment(t_ast_node self) void ast_print_node_variable_assignment(t_ast_node self)
{ {

View file

@ -10,7 +10,7 @@
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ast/_function_declaration.h" #include "ast/_print_ast.h"
void ast_print_node_file_redirection_heredoc(t_ast_node self) void ast_print_node_file_redirection_heredoc(t_ast_node self)
{ {

View file

@ -10,7 +10,7 @@
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ast/_function_declaration.h" #include "ast/_print_ast.h"
void ast_print_node_subshell(t_ast_node self) void ast_print_node_subshell(t_ast_node self)
{ {

View file

@ -10,7 +10,7 @@
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ast/_function_declaration.h" #include "ast/_print_ast.h"
void _print_term(t_ast_terminator_kind term) void _print_term(t_ast_terminator_kind term)
{ {

View file

@ -10,7 +10,7 @@
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ast/_function_declaration.h" #include "ast/_print_ast.h"
void ast_print_node_arithmetic_expansion(t_ast_node self) void ast_print_node_arithmetic_expansion(t_ast_node self)
{ {

View file

@ -10,7 +10,7 @@
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "ast/_function_declaration.h" #include "ast/_print_ast.h"
/* /*
t_ast_arithmetic_expansion arithmetic_expansion; t_ast_arithmetic_expansion arithmetic_expansion;

View file

@ -60,7 +60,7 @@ replace.C__PREFIXUP__ = "ENV"
sources_output = "src/vec/C__PREFIX__/" sources_output = "src/vec/C__PREFIX__/"
headers_output = "include/me/vec/" headers_output = "include/me/vec/"
replace.C__TYPENAME__ = "t_ast_node" replace.C__TYPENAME__ = "t_ast_node"
replace.C__TYPEHEADER__ = '#include "ast/ast_forward_def.h"' replace.C__TYPEHEADER__ = '#include "ast/_forward_def.h"'
replace.C__PREFIX__ = "ast" replace.C__PREFIX__ = "ast"
replace.C__PREFIXUP__ = "AST" replace.C__PREFIXUP__ = "AST"

View file

@ -13,7 +13,7 @@
#ifndef VEC_AST_H #ifndef VEC_AST_H
#define VEC_AST_H #define VEC_AST_H
#include "ast/ast_forward_def.h" #include "ast/_forward_def.h"
#include "me/types.h" #include "me/types.h"
/// @brief A function that takes two t_ast_node and compare them /// @brief A function that takes two t_ast_node and compare them