aboutsummaryrefslogtreecommitdiff
path: root/src/lexer
diff options
context:
space:
mode:
Diffstat (limited to 'src/lexer')
-rw-r--r--src/lexer/.DS_Storebin6148 -> 0 bytes
-rw-r--r--src/lexer/lexer.c37
-rw-r--r--src/lexer/lexer_count_nb_element.c31
-rw-r--r--src/lexer/lexer_len_element_and_mall.c58
-rw-r--r--src/lexer/lexer_utils.c10
-rw-r--r--src/lexer/main.c29
-rw-r--r--src/lexer/token.c35
7 files changed, 145 insertions, 55 deletions
diff --git a/src/lexer/.DS_Store b/src/lexer/.DS_Store
deleted file mode 100644
index fcaf8ef..0000000
--- a/src/lexer/.DS_Store
+++ /dev/null
Binary files differ
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);
+}