aboutsummaryrefslogtreecommitdiff
path: root/src/print_ast.c
diff options
context:
space:
mode:
authorcuhlig2024-12-17 15:22:32 +0100
committerGitHub2024-12-17 15:22:32 +0100
commita93558047c6d04ca4181fa84229d82b09dd7def2 (patch)
treea0b67075c625731e1e1d526db46eb5dec81b5616 /src/print_ast.c
parent8cbba6da72ddd04e358bdb893e700702f92adacd (diff)
parentae5512ea0d6d8be833ca3a9b39f93239109f45b4 (diff)
downloadminishell-a93558047c6d04ca4181fa84229d82b09dd7def2.tar.gz
minishell-a93558047c6d04ca4181fa84229d82b09dd7def2.zip
Merge branch 'main' into bugfix-tokenizer
Diffstat (limited to 'src/print_ast.c')
-rw-r--r--src/print_ast.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/print_ast.c b/src/print_ast.c
new file mode 100644
index 0000000..d42a67d
--- /dev/null
+++ b/src/print_ast.c
@@ -0,0 +1,59 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* print_ast.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2024/07/22 15:16:53 by dkaiser #+# #+# */
+/* Updated: 2024/09/17 15:09:04 by dkaiser ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "minishell.h"
+
+static void print_ast_rec(t_node *ast, int indent);
+static void print_cmd_node(t_node *ast, int indent);
+
+void print_ast(t_node *ast)
+{
+ if (DEBUG)
+ {
+ printf("\e[94m[AST]\n");
+ print_ast_rec(ast, 0);
+ printf("\e[0m\n");
+ }
+}
+
+static void print_ast_rec(t_node *ast, int indent)
+{
+ if (!ast)
+ panic("Can't print AST!");
+ else if (ast->type == CMD_NODE)
+ print_cmd_node(ast, indent);
+ else if (ast->type == PIPE_NODE)
+ {
+ printf("\n%*s%s", indent, "", "* PIPE");
+ print_ast_rec(ast->content.pipe.left, indent + 2);
+ print_ast_rec(ast->content.pipe.right, indent + 2);
+ }
+}
+
+static void print_cmd_node(t_node *ast, int indent)
+{
+ int i;
+
+ printf("\n%*s%s", indent, "", "* CMD");
+ i = 0;
+ printf("\n%*sARGS:", indent + 2, "");
+ while (ast->content.cmd.args != NULL && ast->content.cmd.args[i] != NULL)
+ {
+ printf(" '%s'", ast->content.cmd.args[i]);
+ i++;
+ }
+ printf("\n%*sREDIRS:", indent + 2, "");
+ printf("\n%*sIN: %d %s", indent + 4, "", ast->content.cmd.redirs[0].type,
+ ast->content.cmd.redirs[0].specifier);
+ printf("\n%*sOUT: %d %s", indent + 4, "", ast->content.cmd.redirs[1].type,
+ ast->content.cmd.redirs[1].specifier);
+}