maxishell
Implementation of a shell for Linux-like systems
Loading...
Searching...
No Matches
tokens.h
Go to the documentation of this file.
1/* ************************************************************************** */
2/* */
3/* ::: :::::::: */
4/* tokens.h :+: :+: :+: */
5/* +:+ +:+ +:+ */
6/* By: rmikhayl <marvin@42.fr> +#+ +:+ +#+ */
7/* +#+#+#+#+#+ +#+ */
8/* Created: 2024/05/31 20:53:51 by rmikhayl #+# #+# */
9/* Updated: 2024/09/06 12:29:14 by dmdemirk ### ########.fr */
10/* */
11/* ************************************************************************** */
12
13#ifndef TOKENS_H
14# define TOKENS_H
15
16# include "../lib/libft/inc/libft.h"
17# include <stdlib.h>
18# include <stdio.h>
19# include <stdio.h>
20# include <unistd.h>
21# include <readline/readline.h>
22# include <readline/history.h>
23# include <pwd.h>
24# include "shell.h"
25# include "env.h"
26
27# define HISTORY_PATH "./src/utils/.maxishell_history"
28
40
41typedef struct s_token
42{
44 char *data;
45 struct s_token *next;
46 struct s_token *prev;
48
49typedef struct s_ast
50{
52 char **args;
53 struct s_ast *left;
54 struct s_ast *right;
56
65
66void final_quote_removal(int arg_count, t_ast *command_node);
67char *expand_env_var(char *arg, t_ms_data *data);
68void post_process_command_args(t_ast *command_node, int arg_count, \
69 t_ms_data *data);
70void add_node(t_token **head, char *str);
71void print_stack(t_token **stack);
72void free_stack(t_token **stack);
73int calc_stack_size(t_token *stack);
74char **list_to_array(t_token *head);
75void build_linked_list(t_token **tokens, char **argv);
76void handle_quotes(char **tokens, int *pos, char **input);
77char *handle_special_chars(char *str, t_token **tokens);
78void skip_delimiters(char **input, char *delim);
79void reallocate_tokens(char ***tokens, int *bufsize);
80void parse_loop(char **input, char **tokens, int *pos, int *bufsize);
81char **parse_input(char *input);
82char *generate_prompt(t_ms_data *data);
83void make_history(char *line);
84void loop_cleanup(t_loop_data *loop_data, t_token *tokens_head);
85void free_ms_data(t_ms_data *data);
86char *check_heredoc(char *line);
87char *heredoc(char *eof);
88void init_ms_data(t_ms_data *data, char **argv, char **envp);
89void initialise(int argc, char **argv);
90void execute_command(char **parsed_text, t_token **tokens);
91void print_maxishell(void);
92int input_error_checks(t_loop_data *loop_data);
93t_token *tokenise(char *str);
94void print_tokens(t_token *tokens, char *name);
95t_ast *parse_tokens(t_token **tokens, t_ms_data *data);
96void visualize_ast(t_ast *root);
97void free_ast(t_ast *node);
98void free_all_tokens(t_token *tokens);
99t_token *new_token(char *value, t_token_type type);
100void append_token(t_token **tokens, t_token *new_token);
101int valid_operator(const char **str);
102t_ast *new_ast_node(void);
104int arg_len(t_token *current);
105void set_command_args(t_ast *command_node, t_token **tokens, \
106 int arg_count);
107t_ast *manage_commands(t_token **tokens, t_ms_data *data);
108void handle_local_vars(t_ms_data *data, char *arg);
110int is_redir_node(t_token *tokens);
111t_ast *manage_redirs(t_token **tokens, t_ms_data *data);
112t_ast *manage_pipe(t_token **tokens, t_ms_data *data);
113char *trim_input(char *str);
114void print_ast_root(t_ast *root);
115void execute_tree(t_ast *node, t_ms_data *data);
116char *expand_env_and_loc_var(char *arg, t_ms_data *data);
117char *append_literal(char **start, char *processed_arg);
118char *process_argument(char *arg, t_ms_data *data);
119char *expand_variable(char **start, t_ms_data *data);
120void clear_history_file(void);
121int is_in_single_quotes(char *arg);
122void print_ast_args(t_ast *node);
123void append_word_if_valid(char *start, char *str, t_token **tokens);
124char *exit_status_adj(char *arg);
125char *str_start_adj(char *arg);
126char *tmp_adj(char *arg);
127int cmd_arg_len(t_token *current);
128char *exit_status_adj(char *arg);
129int is_in_single_quotes(char *arg);
130char *str_start_adj(char *arg);
131char *tmp_adj(char *arg);
132char *append_literal(char **start, char *processed_arg);
133char *expand_variable(char **start, t_ms_data *data);
134char *expand_env_and_loc_var(char *arg, t_ms_data *data);
135void final_quote_removal(int arg_count, t_ast *command_node);
136
137#endif
Definition tokens.h:50
char ** args
Definition tokens.h:52
struct s_ast * right
Definition tokens.h:54
struct s_ast * left
Definition tokens.h:53
t_token_type type
Definition tokens.h:51
char * prompt
Definition tokens.h:59
char * trimmed_input
Definition tokens.h:61
t_token * tokens
Definition tokens.h:62
char * input
Definition tokens.h:60
t_ast * tree
Definition tokens.h:63
t_token_type type
Definition tokens.h:43
struct s_token * prev
Definition tokens.h:46
struct s_token * next
Definition tokens.h:45
char * data
Definition tokens.h:44
t_ast * manage_pipe(t_token **tokens, t_ms_data *data)
Definition AST_utils.c:56
int valid_operator(const char **str)
t_token * new_token(char *value, t_token_type type)
Definition tokeniser.c:67
void free_ast(t_ast *node)
Definition clean.c:74
t_ast * new_ast_node(void)
Definition AST.c:89
void skip_delimiters(char **input, char *delim)
char * heredoc(char *eof)
void print_ast_root(t_ast *root)
Definition visualiser.c:103
void loop_cleanup(t_loop_data *loop_data, t_token *tokens_head)
Definition clean.c:67
char * expand_env_var(char *arg, t_ms_data *data)
char * str_start_adj(char *arg)
t_ast * parse_tokens(t_token **tokens, t_ms_data *data)
Definition AST_utils.c:23
int cmd_arg_len(t_token *current)
Definition AST_utils.c:88
void initialise(int argc, char **argv)
Definition initialise.c:36
void execute_command(char **parsed_text, t_token **tokens)
char * check_heredoc(char *line)
void print_maxishell(void)
Definition prompt.c:56
int arg_len(t_token *current)
t_token * tokenise(char *str)
Definition tokeniser.c:22
struct s_ast t_ast
void free_all_tokens(t_token *tokens)
Definition clean_utils.c:17
t_ast * create_redir_node(t_token *token)
Definition AST.c:62
void execute_tree(t_ast *node, t_ms_data *data)
int input_error_checks(t_loop_data *loop_data)
void append_token(t_token **tokens, t_token *new_token)
Definition tokeniser.c:85
void handle_local_vars(t_ms_data *data, char *arg)
e_token_type
Definition tokens.h:30
@ REDIR_IN
Definition tokens.h:34
@ PHRASE
Definition tokens.h:31
@ REDIR_HEREDOC
Definition tokens.h:37
@ PIPE
Definition tokens.h:32
@ NONE
Definition tokens.h:38
@ REDIR_OUT
Definition tokens.h:35
@ REDIR_APPEND
Definition tokens.h:36
@ ENV_VAR
Definition tokens.h:33
void append_word_if_valid(char *start, char *str, t_token **tokens)
char * append_literal(char **start, char *processed_arg)
char * handle_special_chars(char *str, t_token **tokens)
Definition tokeniser.c:39
char * exit_status_adj(char *arg)
void reallocate_tokens(char ***tokens, int *bufsize)
void handle_quotes(char **tokens, int *pos, char **input)
t_ast * create_redir(t_token **tokens, t_token *tmp, t_ms_data *data)
void make_history(char *line)
Definition aux.c:15
char ** list_to_array(t_token *head)
int calc_stack_size(t_token *stack)
int is_redir_node(t_token *tokens)
Definition AST.c:79
t_ast * manage_redirs(t_token **tokens, t_ms_data *data)
Definition AST.c:20
void parse_loop(char **input, char **tokens, int *pos, int *bufsize)
char * generate_prompt(t_ms_data *data)
Definition prompt.c:20
void init_ms_data(t_ms_data *data, char **argv, char **envp)
Definition initialise.c:20
char * expand_variable(char **start, t_ms_data *data)
char * expand_env_and_loc_var(char *arg, t_ms_data *data)
void print_tokens(t_token *tokens, char *name)
enum e_token_type t_token_type
struct s_loop_data t_loop_data
void set_command_args(t_ast *command_node, t_token **tokens, int arg_count)
Definition AST.c:48
char * tmp_adj(char *arg)
int is_in_single_quotes(char *arg)
char ** parse_input(char *input)
void build_linked_list(t_token **tokens, char **argv)
void add_node(t_token **head, char *str)
char * trim_input(char *str)
void print_ast_args(t_ast *node)
t_ast * manage_commands(t_token **tokens, t_ms_data *data)
Definition AST_utils.c:72
void final_quote_removal(int arg_count, t_ast *command_node)
void clear_history_file(void)
Definition exit.c:28
void post_process_command_args(t_ast *command_node, int arg_count, t_ms_data *data)
void visualize_ast(t_ast *root)
void free_stack(t_token **stack)
struct s_token t_token
void free_ms_data(t_ms_data *data)
Definition clean.c:51
char * process_argument(char *arg, t_ms_data *data)
void print_stack(t_token **stack)