aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornass1pro <nass1pro@gmail.com>2020-04-12 17:53:30 +0200
committerCharles <sircharlesaze@gmail.com>2020-06-09 10:53:38 +0200
commit9dca7dc98e46d5b29e236f2970072ffaf582e13e (patch)
treeba7b93052ff9d01c549ad5d16e7ba66daeacd686
parentf66cb8f28a2779159baeef6ea91a7684d59cc295 (diff)
downloadminishell-9dca7dc98e46d5b29e236f2970072ffaf582e13e.tar.gz
minishell-9dca7dc98e46d5b29e236f2970072ffaf582e13e.tar.bz2
minishell-9dca7dc98e46d5b29e236f2970072ffaf582e13e.zip
Added lexer draft
-rw-r--r--include/lexer.h10
-rw-r--r--src/.DS_Storebin0 -> 6148 bytes
-rw-r--r--src/lexer/lexer.c19
-rw-r--r--src/lexer/lexer_count_nb_element.c31
-rw-r--r--src/lexer/lexer_len_element_and_mall.c57
-rw-r--r--src/lexer/lexer_utils.c28
-rw-r--r--src/lexer/main.c15
-rw-r--r--src/parse/lexer.c15
-rw-r--r--src/parse/parse.c12
9 files changed, 178 insertions, 9 deletions
diff --git a/include/lexer.h b/include/lexer.h
new file mode 100644
index 0000000..e7a6cdf
--- /dev/null
+++ b/include/lexer.h
@@ -0,0 +1,10 @@
+
+#include "minishell.h"
+
+char **lexer(char *input);
+int lexer_sep(char input);
+int lexer_verif_entre_cote(char *input, int i);
+int lexer_verif_entre_cote22(char *input, int i);
+int lexer_count_nb_element(char *input);
+int lexer_count_len_element(char *input, int i);
+char **lexer_malloc_len_elem(char *input, int i, char **out);
diff --git a/src/.DS_Store b/src/.DS_Store
new file mode 100644
index 0000000..cd95961
--- /dev/null
+++ b/src/.DS_Store
Binary files differ
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')
+ {
+
+ }
}