diff options
| author | nass1pro <nass1pro@gmail.com> | 2020-04-12 17:53:30 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-06-09 10:53:38 +0200 |
| commit | 9dca7dc98e46d5b29e236f2970072ffaf582e13e (patch) | |
| tree | ba7b93052ff9d01c549ad5d16e7ba66daeacd686 /src | |
| parent | f66cb8f28a2779159baeef6ea91a7684d59cc295 (diff) | |
| download | minishell-9dca7dc98e46d5b29e236f2970072ffaf582e13e.tar.gz minishell-9dca7dc98e46d5b29e236f2970072ffaf582e13e.tar.bz2 minishell-9dca7dc98e46d5b29e236f2970072ffaf582e13e.zip | |
Added lexer draft
Diffstat (limited to 'src')
| -rw-r--r-- | src/.DS_Store | bin | 0 -> 6148 bytes | |||
| -rw-r--r-- | src/lexer/lexer.c | 19 | ||||
| -rw-r--r-- | src/lexer/lexer_count_nb_element.c | 31 | ||||
| -rw-r--r-- | src/lexer/lexer_len_element_and_mall.c | 57 | ||||
| -rw-r--r-- | src/lexer/lexer_utils.c | 28 | ||||
| -rw-r--r-- | src/lexer/main.c | 15 | ||||
| -rw-r--r-- | src/parse/lexer.c | 15 | ||||
| -rw-r--r-- | src/parse/parse.c | 12 |
8 files changed, 168 insertions, 9 deletions
diff --git a/src/.DS_Store b/src/.DS_Store Binary files differnew file mode 100644 index 0000000..cd95961 --- /dev/null +++ b/src/.DS_Store diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c new file mode 100644 index 0000000..7332b86 --- /dev/null +++ b/src/lexer/lexer.c @@ -0,0 +1,19 @@ + +#include "lexer.h" + + +char **lexer(char *input) +{ + char **out; + int i; + + if (!input) + return (0); + i = lexer_count_nb_element(input); + if (!(out = malloc(sizeof(char *) * i + 1))) + return (0); + out[i + 1] = NULL; + out = lexer_malloc_len_elem(input,i, out); + return(out); + +} diff --git a/src/lexer/lexer_count_nb_element.c b/src/lexer/lexer_count_nb_element.c new file mode 100644 index 0000000..1455d5e --- /dev/null +++ b/src/lexer/lexer_count_nb_element.c @@ -0,0 +1,31 @@ + +#include "lexer.h" + +int lexer_count_nb_element(char *input) +{ + int i; + int j; + + i = 0; + j = 1; + while(input[i] != '\0') + { + if (lexer_sep(input[i]) || input[i] == '"' || input[i] == '\'') + { + if (input[i] == '"' || input[i] == '\'') + { + i = lexer_verif_entre_cote(input,i); + j++; + } + if (lexer_sep(input[i])) + { + while (lexer_sep(input[i]) || input[i] == ' ') + ++i; + j++; + } + j++; + } + i++; + } + return (j); +} diff --git a/src/lexer/lexer_len_element_and_mall.c b/src/lexer/lexer_len_element_and_mall.c new file mode 100644 index 0000000..30ebc7b --- /dev/null +++ b/src/lexer/lexer_len_element_and_mall.c @@ -0,0 +1,57 @@ + +#include "lexer.h" + +int lexer_count_len_element(char *input, int i) +{ + int j = -1; + if (input[i] == '"' || input[i] == '\'') + { + return(j = lexer_verif_entre_cote(input,i)); + } + else if (lexer_sep(input[i]) || input[i] == ' ') + { + while(lexer_sep(input[i]) || input[i] == ' ') + { + if(input[j] == '\0') + return(j); + ++i; + ++j; + } + } + else + { + while (!lexer_sep(input[i]) && input[i] != ' ') + { + if(input[j] == '\0') + return(j); + ++i; + ++j; + } + } + ++j; + return(j); +} + +char **lexer_malloc_len_elem(char *input, int i, char **out) +{ + int j = 0; + int k = 0; + int temp = 0; + + j += lexer_count_len_element(&input[j], 0); + k = j; + out[temp] = malloc(sizeof(char) * k); + ft_strlcpy(out[temp], input, k + 1); + while (input[j] != '\0') + { + temp++; + j += lexer_count_len_element(&input[j], 0); + k -= j; + if (k < 0) + k *= -1; + out[temp] = malloc(sizeof(char) * j - k + 1); + ft_strlcpy(out[temp], &input[j - k], k + 1); + k = j; + } + return(out); +} diff --git a/src/lexer/lexer_utils.c b/src/lexer/lexer_utils.c new file mode 100644 index 0000000..f028113 --- /dev/null +++ b/src/lexer/lexer_utils.c @@ -0,0 +1,28 @@ + +#include "lexer.h" + +int lexer_sep(char input) +{ + char *sep; + int i; + + i = 0; + sep = ";&<>|"; + while(sep[i] != '\0') + { + if(sep[i] == input) + return(1); + i++; + } + return (0); +} + +int lexer_verif_entre_cote(char *input, int i) +{ + while((input[++i] != '"' || input[i] == '\'') && (input[i] != '\0')) + ; + i++; + if(input[i] == '"' || input[i] == '\'') + return(lexer_verif_entre_cote(input, i)); + return(i); +} diff --git a/src/lexer/main.c b/src/lexer/main.c new file mode 100644 index 0000000..b660f55 --- /dev/null +++ b/src/lexer/main.c @@ -0,0 +1,15 @@ + +#include "lexer.h" + +int main(void) +{ + char **out; + int i = -1; + + out = lexer("\"echo\" \"* login_x\"<<AUTHORS; echo && ; salut;\"echo\"\"* login_x\""); + //out = lexer("echo * login_x << AUTHORS&&cd Desktop"); + while(out[++i]) + printf("%s\n", out[i]);; + exit(0); + return (0); +} diff --git a/src/parse/lexer.c b/src/parse/lexer.c index 74a3bd4..584ecd7 100644 --- a/src/parse/lexer.c +++ b/src/parse/lexer.c @@ -5,12 +5,23 @@ #include "minishell.h" -char **lexer(char *input) +static char **lex_len(char *input) { - char **out_lex; + int i; + i = 0; + while(input[i] != '\0') + { + lex_comp_cmd(input); + i++; + } +} + +char **lexer(char *input) +{ (void)out_lex; if (!input) return (NULL); + lex_len(input); return (NULL); } diff --git a/src/parse/parse.c b/src/parse/parse.c index ed1aa28..3aa2a30 100644 --- a/src/parse/parse.c +++ b/src/parse/parse.c @@ -5,12 +5,10 @@ #include "parse.h" -t_ast *parse(char *input) +t_ast *parse(char **input) { -/* char **out_lex; */ -/* if (!(out_lex = lexer(input))) */ -/* return (NULL); */ - - (void)input; - return (NULL); + while (input[i] != '\0') + { + + } } |
