From b44464fd8a061d8259e107dfee65eb55fccd58ed Mon Sep 17 00:00:00 2001 From: Maieul BOYER Date: Wed, 9 Oct 2024 12:46:41 +0200 Subject: [PATCH] update: not using yarn until it is complete. added new files --- parser/Filelist.parser.mk | 2 ++ parser/src/yarn/ast_cmd.c | 27 +++++++++++++++++++++++++++ parser/src/yarn/ast_op.c | 28 ++++++++++++++++++++++++++++ parser/src/yarn/yarn.c | 7 ++++++- sources/main.c | 6 +++--- 5 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 parser/src/yarn/ast_cmd.c create mode 100644 parser/src/yarn/ast_op.c diff --git a/parser/Filelist.parser.mk b/parser/Filelist.parser.mk index aa97e534..e89c173e 100644 --- a/parser/Filelist.parser.mk +++ b/parser/Filelist.parser.mk @@ -21,6 +21,8 @@ token_utils \ tokenizer \ tokenizer_utils \ ts_print \ +yarn/ast_cmd \ +yarn/ast_op \ yarn/yarn \ GEN_FILES = \ diff --git a/parser/src/yarn/ast_cmd.c b/parser/src/yarn/ast_cmd.c new file mode 100644 index 00000000..dc69f5a1 --- /dev/null +++ b/parser/src/yarn/ast_cmd.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ast_cmd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: maiboyer +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/10/09 12:44:53 by maiboyer #+# #+# */ +/* Updated: 2024/10/09 12:45:32 by maiboyer ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ast/ast.h" +#include "parser/token.h" +#include "me/vec/vec_ast.h" +#include "me/vec/vec_token.h" + +/// la fonction doit prendre une t_token de type TOK_CMD qui contient que deux type de subtokens TOK_WORD ou TOK_REDIR +/// un TOK_WORD == un arguemnt +/// un TOK_REDIR == une redirection +/// les deux sont dans le bonne ordre. +/// il faut push les TOK_REDIR dans ast_node->data.command.prefix; +/// let TOK_WORD dans ast_node->data.command.arguements; +/// les noms peuvent etre different idk +/// a terme la fonction utilisera t_error et tt; +/// struct s_ast_command `ast/include/ast/_raw_structs.h` +t_ast_node ast_from_cmd(t_token tok); diff --git a/parser/src/yarn/ast_op.c b/parser/src/yarn/ast_op.c new file mode 100644 index 00000000..22192600 --- /dev/null +++ b/parser/src/yarn/ast_op.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ast_op.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: maiboyer +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/10/09 12:44:53 by maiboyer #+# #+# */ +/* Updated: 2024/10/09 12:46:06 by maiboyer ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ast/ast.h" +#include "parser/token.h" +#include "me/vec/vec_ast.h" +#include "me/vec/vec_token.h" + +/// en fonction de op, qui peut etre: TOK_AND TOK_PIPE TOK_OR +/// choisir le bon ast_node a faire (t_ast_node->data.list + set operator ou t_asdt_node->data.pipeline) +/// pop deux element de output_queue. pour l'instant la fonction doit print une error si il n'y as pas asser d'element +/// utilise me_abort(MSG) pour faire un abort et print le msg + la stacktrace. +/// +/// a terme la fonction utilisera t_error et tt; +/// +/// struct s_ast_list if (tok.type == TOK_AND || tok.type == TOK_OR) +/// struct s_ast_pipeline if (tok.type == TOK_PIPE) +/// `ast/include/ast/_raw_structs.h` +t_ast_node ast_from_op(t_token tok, t_vec_ast *output_queue); diff --git a/parser/src/yarn/yarn.c b/parser/src/yarn/yarn.c index d823e464..d56bdd0c 100644 --- a/parser/src/yarn/yarn.c +++ b/parser/src/yarn/yarn.c @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/10/07 18:04:13 by rparodi #+# #+# */ -/* Updated: 2024/10/08 15:47:39 by maiboyer ### ########.fr */ +/* Updated: 2024/10/09 12:44:24 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -36,6 +36,7 @@ t_str token_name(t_token *token); /// let TOK_WORD dans ast_node->data.command.arguements; /// les noms peuvent etre different idk /// a terme la fonction utilisera t_error et tt; +/// struct s_ast_command `ast/include/ast/_raw_structs.h` t_ast_node ast_from_cmd(t_token tok); /// en fonction de op, qui peut etre: TOK_AND TOK_PIPE TOK_OR @@ -44,6 +45,10 @@ t_ast_node ast_from_cmd(t_token tok); /// utilise me_abort(MSG) pour faire un abort et print le msg + la stacktrace. /// /// a terme la fonction utilisera t_error et tt; +/// +/// struct s_ast_list if (tok.type == TOK_AND || tok.type == TOK_OR) +/// struct s_ast_pipeline if (tok.type == TOK_PIPE) +/// `ast/include/ast/_raw_structs.h` t_ast_node ast_from_op(t_token tok, t_vec_ast *output_queue); t_error yarn(t_vec_token ts, t_vec_ast *out) diff --git a/sources/main.c b/sources/main.c index 5b268589..dcf7228e 100644 --- a/sources/main.c +++ b/sources/main.c @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/28 14:40:38 by rparodi #+# #+# */ -/* Updated: 2024/10/08 14:41:06 by maiboyer ### ########.fr */ +/* Updated: 2024/10/09 12:40:13 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -111,8 +111,8 @@ void parse_str(t_state *state) return ; if (ts_apply_passes(tokens, &tokens)) return ; - if (yarn(tokens, &tokens)) - return ; + //if (yarn(tokens, &tokens)) + // return ; printf("\n\nEND TOKENS\n"); ts_print(&tokens); vec_token_free(tokens);