diff options
Diffstat (limited to 'src/lexer')
| -rw-r--r-- | src/lexer/.DS_Store | bin | 6148 -> 0 bytes | |||
| -rw-r--r-- | src/lexer/lexer.c | 37 | ||||
| -rw-r--r-- | src/lexer/lexer_count_nb_element.c | 31 | ||||
| -rw-r--r-- | src/lexer/lexer_len_element_and_mall.c | 58 | ||||
| -rw-r--r-- | src/lexer/lexer_utils.c | 10 | ||||
| -rw-r--r-- | src/lexer/main.c | 29 | ||||
| -rw-r--r-- | src/lexer/token.c | 35 |
7 files changed, 145 insertions, 55 deletions
diff --git a/src/lexer/.DS_Store b/src/lexer/.DS_Store Binary files differdeleted file mode 100644 index fcaf8ef..0000000 --- a/src/lexer/.DS_Store +++ /dev/null diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c index 185ff83..92cd34a 100644 --- a/src/lexer/lexer.c +++ b/src/lexer/lexer.c @@ -1,4 +1,3 @@ - #include "lexer.h" int len_is_not_sep(char *input) @@ -76,16 +75,16 @@ t_token *lexer_lst_token_str(char *input, int i, int j) if (!(lst_token = malloc(sizeof(t_token) * 1))) return (NULL); - lst_token->token = 0; - lst_token->value = NULL; - if (!(lst_token->value = malloc(sizeof(char) * j + 1))) + lst_token->tag = 0; + lst_token->content = NULL; + if (!(lst_token->content = malloc(sizeof(char) * j + 1))) return(0); - if (!(ft_strlcpy(lst_token->value, &input[i], j + 1))) + if (!(ft_strlcpy(lst_token->content, &input[i], j + 1))) { free(lst_token); return(0); } - //printf("%s-\n", lst_token->value); + //printf("%s-\n", lst_token->content); return (lst_token); } @@ -93,11 +92,11 @@ enum e_token_tag token_verif_stick(t_token *lst_token) { int i; - i = ft_strlen(lst_token->value); + i = ft_strlen(lst_token->content); - if (lst_token->value[i - 1] == ' ') - return(lst_token->token); - return(lst_token->token | LTAG_STICK); + if (lst_token->content[i - 1] == ' ') + return(lst_token->tag); + return(lst_token->tag | LTAG_STICK); } enum e_token_tag token_str_or_cote(t_token *lst_token) @@ -105,21 +104,21 @@ enum e_token_tag token_str_or_cote(t_token *lst_token) int i; i = 0; - while(lst_token->value[i] != '\0') + while(lst_token->content[i] != '\0') { - if(lst_token->value[i] == '\'') + if(lst_token->content[i] == '\'') { - lst_token->token = LTAG_STR_SINGLE; + lst_token->tag = LTAG_STR_SINGLE; return(token_verif_stick(lst_token)); } - if(lst_token->value[i] == '"') + if(lst_token->content[i] == '"') { - lst_token->token = LTAG_STR_DOUBLE; + lst_token->tag = LTAG_STR_DOUBLE; return(token_verif_stick(lst_token)); } else { - lst_token->token = LTAG_STR; + lst_token->tag = LTAG_STR; return(token_verif_stick(lst_token)); } i++; @@ -131,12 +130,12 @@ t_token *push_token_enum_and_trim(t_token *lst_token) { enum e_token_tag tk; - tk = ret_token(lst_token->value, 0); + tk = ret_token(lst_token->content, 0); if (tk == 0) { - lst_token->token = token_str_or_cote(lst_token); + lst_token->tag = token_str_or_cote(lst_token); } - printf("%s-, %d\n",lst_token->value, (int)lst_token->token); + /* printf("%s-, %d\n",lst_token->content, (int)lst_token->tag); */ return (lst_token); } 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..e0e1132 --- /dev/null +++ b/src/lexer/lexer_len_element_and_mall.c @@ -0,0 +1,58 @@ + +#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; + + (void)i; + 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 index 72d8288..986db50 100644 --- a/src/lexer/lexer_utils.c +++ b/src/lexer/lexer_utils.c @@ -1,8 +1,5 @@ - #include "lexer.h" - - enum e_token_tag ret_token_sep_redir_append(char *input, int i) { if (input[i + 1] == '>') @@ -33,8 +30,7 @@ enum e_token_tag ret_token(char *input, int i) } - -int lexer_sep(char input) +int lexer_sep(char input) { char *sep; int i; @@ -50,7 +46,7 @@ int lexer_sep(char input) return (0); } -int lexe_space(char *input) +int lexe_space(char *input) { int i; @@ -75,7 +71,7 @@ static int lex_verif_simple_cote(char *input, int i) return(i + 1); } -int lexer_verif_entre_cote(char *input, int i) +int lexer_verif_entre_cote(char *input, int i) { if(input[i] == '\'') return(lex_verif_simple_cote(input, i)); diff --git a/src/lexer/main.c b/src/lexer/main.c deleted file mode 100644 index 753969d..0000000 --- a/src/lexer/main.c +++ /dev/null @@ -1,29 +0,0 @@ - -#include "lexer.h" - -/*int main(int argc, char **argv) -{ - char *input; - - if (!(input = malloc(sizeof(char) * ft_strlen(argv[1]) + 1))) - return(0); - ft_strlcpy(input, argv[1], ft_strlen(argv[1]) + 1); - - lexer(input); - free(input); - exit(0); - return (0); -}*/ -/* -#include <stdio.h> -int main(int argc, char **argv, char **envp) -{ - printf("ARGV:\n"); - for (int i = 0; i < argc; i++) - printf("[%d] %s\n", i, argv[i]); - printf("\nENV:\n"); - for (int i = 0; envp[i] != NULL && i < 10; i++) - printf("[%d] %s\n", i, envp[i]); - return 0; -} -*/ diff --git a/src/lexer/token.c b/src/lexer/token.c new file mode 100644 index 0000000..6c6a184 --- /dev/null +++ b/src/lexer/token.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* token.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/06/09 13:38:08 by charles #+# #+# */ +/* Updated: 2020/06/09 17:55:23 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "lexer.h" + +t_token *token_new(enum e_token_tag tag, char *content) +{ + t_token *token; + + if (content == NULL + || (token = (t_token*)malloc(sizeof(t_token))) == NULL) + return (NULL); + if ((token->content = ft_strdup(content)) == NULL) + { + free(token); + return (NULL); + } + token->tag = tag; + return token; +} + +void token_destroy(t_token *token) +{ + free(token->content); + free(token); +} |
