diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-06-15 13:12:34 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-06-15 13:12:34 +0200 |
| commit | b8623ff168880845c745da62f7e9a840f0541809 (patch) | |
| tree | 23ca8f41c6bdeb5f4fb3a229ee03a7f76c931eb0 /src/main.c | |
| parent | 11a719bab26b3ccccbd219decab2d0cf77021004 (diff) | |
| parent | a7dae7d30b7087bcd9972792a2ee1248e081cfce (diff) | |
| download | minishell-b8623ff168880845c745da62f7e9a840f0541809.tar.gz minishell-b8623ff168880845c745da62f7e9a840f0541809.tar.bz2 minishell-b8623ff168880845c745da62f7e9a840f0541809.zip | |
Merge branch 'parser'
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 244 |
1 files changed, 136 insertions, 108 deletions
@@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/28 11:45:44 by cacharle #+# #+# */ -/* Updated: 2020/06/15 11:19:23 by charles ### ########.fr */ +/* Updated: 2020/06/15 13:12:21 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,136 +17,164 @@ #include "minishell.h" #include "ast.h" -/* #include "lexer.h" */ -/* #include "parser.h" */ +#include "lexer.h" +#include "parser.h" #include "eval.h" int main(int argc, char **argv, char **envp) { - (void)argc; - (void)argv; - /* (void)envp; */ t_path path; t_env env; - /* char *line; */ - /* int ret; */ + env = env_from_array(envp); path = path_update(NULL, env_search(env, "PATH")); - /* */ - /* t_ast *ast; */ - /* t_line line; */ - /* t_cmd cmd; */ - /* t_eval_state state; */ - /* */ - /* cmd.argv = ft_split("ls -l", ' '); */ - /* cmd.in = NULL; */ - /* cmd.out = NULL; */ - /* cmd.is_append = false; */ - /* */ - /* line.left = ast_new(TAG_CMD, &cmd); */ - /* line.right = NULL; */ - /* line.sep = SEP_END; */ - /* ast = ast_new(TAG_LINE, &line); */ - /* printf("%p\n", ast); */ - /* printf("%d\n", ast->tag); */ - /* printf("%p\n", ast->data.line.left); */ - /* printf("%p\n", ast->data.line.right); */ - /* printf("%d\n", ast->data.line.left->tag); */ - /* printf("%p\n", ast->data.line.left->data.cmd.argv); */ - /* printf("%s\n", ast->data.line.left->data.cmd.argv[0]); */ - /* printf("%s\n", ast->data.line.left->data.cmd.argv[1]); */ - /* state.pipe_in[0] = -1; */ - /* state.pipe_in[1] = -1; */ - /* state.pipe_out[0] = -1; */ - /* state.pipe_out[1] = -1; */ - /* state.path = path; */ - /* state.env = env; */ - /* t_io_frame frame; */ - /* io_frame_init(&frame); */ - /* printf("ret: %d %s\n", eval(&frame,&state, ast), strerror(errno)); */ - /* char buf[2048]; */ - /* printf("%s\n", getcwd(buf, 2048)); */ - /* builtin_env(NULL, state.env); */ - /* ast_destroy(ast); */ - /* while ((ret = ft_next_line(STDIN_FILENO, &line)) == 1) */ - /* { */ - /* if (eval(parse(line)) == -1) */ - /* continue ; // and display error */ - /* free(line); */ - /* } */ - /* free(line); */ - /* ms_glob("src#<{(|"); */ - /* char *j = ms_glob("|)}>#*.c"); */ - /* printf("%s\n", j); */ - /* free(j); */ - - t_ftlst *args = NULL; - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "echo"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "bonjour"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "je"))); */ - - ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "cat"))); - ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-e"))); - - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "ls"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-a"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-l"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$$LFS$TERM$TERM."))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "|)}>#*.c"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "src#<{(|.c include#<{(|.h"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$A$B"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "\\$TERM"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$TER\\M"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "\\\\"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_SINGLE, "''''$TEST\\TEST"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE, ",$TEST,$B,"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE , "$TEST"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); */ - /* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_SINGLE, "$TEST"))); */ - - t_ftlst *redirs = NULL; - ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_IN, NULL))); - ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "bonjour"))); - ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_APPEND, NULL))); - ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "yo"))); - ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_OUT, NULL))); - ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "yo1"))); - t_ast *ast = ast_new(AST_CMD); - ast->cmd_argv = args; - ast->redirs = redirs; + if (argc == 3 && ft_strcmp(argv[1], "-c") == 0) + { + t_ftlst *lex_out = lexer(argv[2]); - printf("eval %d\n", eval_cmd(env, path, ast)); - ast_destroy(ast); + t_ret *parser_out = parse(lex_out); + int eval_out = eval_cmd(env, path, parser_out->ast); + (void)eval_out; + } - /* char **as = preprocess(l, env); */ - /* printf("%p\n", as); */ - /* printf("%p\n", *as); */ - /* char **tmp = as; */ - /* while (*as != NULL) */ - /* puts(*as++); */ - /* ft_split_destroy(tmp); */ ft_htdestroy(path, free); ft_vecdestroy(env, free); return (0); } +/* int main(int argc, char **argv, char **envp) */ +/* { */ +/* (void)argc; */ +/* (void)argv; */ +/* #<{(| (void)envp; |)}># */ +/* t_path path; */ +/* t_env env; */ +/* #<{(| char *line; |)}># */ +/* #<{(| int ret; |)}># */ +/* env = env_from_array(envp); */ +/* path = path_update(NULL, env_search(env, "PATH")); */ +/* #<{(| |)}># */ +/* #<{(| t_ast *ast; |)}># */ +/* #<{(| t_line line; |)}># */ +/* #<{(| t_cmd cmd; |)}># */ +/* #<{(| t_eval_state state; |)}># */ +/* #<{(| |)}># */ +/* #<{(| cmd.argv = ft_split("ls -l", ' '); |)}># */ +/* #<{(| cmd.in = NULL; |)}># */ +/* #<{(| cmd.out = NULL; |)}># */ +/* #<{(| cmd.is_append = false; |)}># */ +/* #<{(| |)}># */ +/* #<{(| line.left = ast_new(TAG_CMD, &cmd); |)}># */ +/* #<{(| line.right = NULL; |)}># */ +/* #<{(| line.sep = SEP_END; |)}># */ +/* #<{(| ast = ast_new(TAG_LINE, &line); |)}># */ +/* #<{(| printf("%p\n", ast); |)}># */ +/* #<{(| printf("%d\n", ast->tag); |)}># */ +/* #<{(| printf("%p\n", ast->data.line.left); |)}># */ +/* #<{(| printf("%p\n", ast->data.line.right); |)}># */ +/* #<{(| printf("%d\n", ast->data.line.left->tag); |)}># */ +/* #<{(| printf("%p\n", ast->data.line.left->data.cmd.argv); |)}># */ +/* #<{(| printf("%s\n", ast->data.line.left->data.cmd.argv[0]); |)}># */ +/* #<{(| printf("%s\n", ast->data.line.left->data.cmd.argv[1]); |)}># */ +/* #<{(| state.pipe_in[0] = -1; |)}># */ +/* #<{(| state.pipe_in[1] = -1; |)}># */ +/* #<{(| state.pipe_out[0] = -1; |)}># */ +/* #<{(| state.pipe_out[1] = -1; |)}># */ +/* #<{(| state.path = path; |)}># */ +/* #<{(| state.env = env; |)}># */ +/* #<{(| t_io_frame frame; |)}># */ +/* #<{(| io_frame_init(&frame); |)}># */ +/* #<{(| printf("ret: %d %s\n", eval(&frame,&state, ast), strerror(errno)); |)}># */ +/* #<{(| char buf[2048]; |)}># */ +/* #<{(| printf("%s\n", getcwd(buf, 2048)); |)}># */ +/* #<{(| builtin_env(NULL, state.env); |)}># */ +/* #<{(| ast_destroy(ast); |)}># */ +/* #<{(| while ((ret = ft_next_line(STDIN_FILENO, &line)) == 1) |)}># */ +/* #<{(| { |)}># */ +/* #<{(| if (eval(parse(line)) == -1) |)}># */ +/* #<{(| continue ; // and display error |)}># */ +/* #<{(| free(line); |)}># */ +/* #<{(| } |)}># */ +/* #<{(| free(line); |)}># */ +/* #<{(| ms_glob("src#<{(|"); |)}># */ +/* #<{(| char *j = ms_glob("|)}>#*.c"); |)}># */ +/* #<{(| printf("%s\n", j); |)}># */ +/* #<{(| free(j); |)}># */ +/* */ +/* t_ftlst *args = NULL; */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "echo"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "bonjour"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "je"))); |)}># */ +/* */ +/* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "cat"))); */ +/* ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-e"))); */ +/* */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "ls"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-a"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "-l"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$$LFS$TERM$TERM."))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "|)}>#*.c"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "src#<{(|.c include#<{(|.h"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$A$B"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "\\$TERM"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "$TER\\M"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR, "\\\\"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_SINGLE, "''''$TEST\\TEST"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE, ",$TEST,$B,"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE , "$TEST"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_DOUBLE | TAG_STICK, "$TEST"))); |)}># */ +/* #<{(| ft_lstpush_back(&args, ft_lstnew(token_new(TAG_STR_SINGLE, "$TEST"))); |)}># */ +/* */ +/* t_ftlst *redirs = NULL; */ +/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_IN, NULL))); */ +/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "bonjour"))); */ +/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_APPEND, NULL))); */ +/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "yo"))); */ +/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_REDIR_OUT, NULL))); */ +/* ft_lstpush_back(&redirs, ft_lstnew(token_new(TAG_STR, "yo1"))); */ +/* */ +/* t_ast *ast = ast_new(AST_CMD); */ +/* ast->cmd_argv = args; */ +/* ast->redirs = redirs; */ +/* */ +/* printf("eval %d\n", eval_cmd(env, path, ast)); */ +/* ast_destroy(ast); */ +/* */ +/* */ +/* #<{(| char **as = preprocess(l, env); |)}># */ +/* #<{(| printf("%p\n", as); |)}># */ +/* #<{(| printf("%p\n", *as); |)}># */ +/* #<{(| char **tmp = as; |)}># */ +/* #<{(| while (*as != NULL) |)}># */ +/* #<{(| puts(*as++); |)}># */ +/* #<{(| ft_split_destroy(tmp); |)}># */ +/* ft_htdestroy(path, free); */ +/* ft_vecdestroy(env, free); */ +/* return (0); */ +/* } */ + ///////////////////////////////////////////////////////////////////////////////////////// // lexer main ///////////////////////////////////////////////////////////////////////////////////////// -/* int main(void) */ +/* int main(int argc, char **argv) */ /* { */ -/* char *input; */ +/* char *input; */ +/* t_ftlst *lst; */ /* */ -/* if (!(input = malloc(sizeof(char) * ft_strlen(argv[1]) + 1))) */ -/* return(0); */ -/* ft_strlcpy(input, argv[1], ft_strlen(argv[1]) + 1); */ +/* if (argv[1] == NULL) */ +/* return (0); */ +/* if (!(input = malloc(sizeof(char) * ft_strlen(argv[1]) + 1))) */ +/* return(0); */ +/* ft_strlcpy(input, argv[1], ft_strlen(argv[1]) + 1); */ /* */ -/* lexer(input); */ +/* lst = lexer(input); */ +/* parse(lst); */ +/* free(input); */ /* exit(0); */ -/* return (0); */ +/* return (0); */ /* } */ |
