Skip to content

Commit

Permalink
Feat: ability to pretty-printer the shell ast when parsing arguments.
Browse files Browse the repository at this point in the history
  • Loading branch information
SizzleUnrlsd committed Jul 26, 2023
1 parent ab3870a commit 2ae3e27
Showing 1 changed file with 80 additions and 0 deletions.
80 changes: 80 additions & 0 deletions src/ast/ast_printable.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
/**
* Copyright (C) 2023 hugo
*
* This file is part of TekSH.
*
* TekSH is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* TekSH is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with TekSH. If not, see <http://www.gnu.org/licenses/>.
*/

#include "shell.h"

void
ast_printable(node_t *node, shell_t *shell)
{
if (node == NULL) return;
switch (node->type) {
case NODE_SEMICOLON:
ast_printable(node->left, shell);
_print(" ; ");
ast_printable(node->right, shell);
break;
case NODE_PIPE:
ast_printable(node->left, shell);
_print(" | ")
ast_printable(node->right, shell);
break;
case NODE_REDIRECT_IN:
case NODE_REDIRECT_OUT:
case NODE_REDIRECT_APPEND:
ast_printable(node->left, shell);
if (node->type == NODE_REDIRECT_IN)
_print(" < ");
if (node->type == NODE_REDIRECT_OUT)
_print(" > ");
if (node->type == NODE_REDIRECT_APPEND)
_print(" >> ");
ast_printable(node->right, shell);
break;
case NODE_REDIRECT_HEREDOC:
ast_printable(node->left, shell);
_print(" << ");
ast_printable(node->right, shell);
break;
case NODE_AND:
ast_printable(node->left, shell);
_print(" && ");
ast_printable(node->right, shell);
break;
case NODE_OR:
ast_printable(node->left, shell);
_print(" || ");
ast_printable(node->right, shell);
break;
case NODE_BACK:
ast_printable(node->left, shell);
_print(" & ");
ast_printable(node->right, shell);
break;
case NODE_SUBSHELL:
break;
case NODE_ARGUMENT:
{
_printf("%s", node->value);
break;
}
default:
exit_shell(shell);
}
return;
}

0 comments on commit 2ae3e27

Please sign in to comment.