assignement word lexing parsing
This commit is contained in:
parent
a3c750494f
commit
f703185a3a
17 changed files with 67 additions and 14 deletions
|
|
@ -6,7 +6,7 @@
|
||||||
# By: wescande <wescande@student.42.fr> +#+ +:+ +#+ #
|
# By: wescande <wescande@student.42.fr> +#+ +:+ +#+ #
|
||||||
# +#+#+#+#+#+ +#+ #
|
# +#+#+#+#+#+ +#+ #
|
||||||
# Created: 2016/08/29 21:32:58 by wescande #+# #+# #
|
# Created: 2016/08/29 21:32:58 by wescande #+# #+# #
|
||||||
# Updated: 2017/02/24 18:49:55 by ariard ### ########.fr #
|
# Updated: 2017/02/24 20:51:33 by ariard ### ########.fr #
|
||||||
# #
|
# #
|
||||||
# **************************************************************************** #
|
# **************************************************************************** #
|
||||||
|
|
||||||
|
|
@ -189,6 +189,7 @@ lexer/lexer_lex.c\
|
||||||
lexer/lexer_newline.c\
|
lexer/lexer_newline.c\
|
||||||
lexer/lexer_number.c\
|
lexer/lexer_number.c\
|
||||||
lexer/lexer_paren.c\
|
lexer/lexer_paren.c\
|
||||||
|
lexer/lexer_assignement_word.c\
|
||||||
lexer/lexer_quote.c\
|
lexer/lexer_quote.c\
|
||||||
lexer/lexer_sep.c\
|
lexer/lexer_sep.c\
|
||||||
lexer/lexer_word.c\
|
lexer/lexer_word.c\
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/01 12:15:50 by jhalford #+# #+# */
|
/* Created: 2016/12/01 12:15:50 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/21 21:12:01 by ariard ### ########.fr */
|
/* Updated: 2017/02/24 20:45:05 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -40,6 +40,7 @@ enum e_lexstate
|
||||||
DQUOTE_BQUOTE,
|
DQUOTE_BQUOTE,
|
||||||
BACKSLASH,
|
BACKSLASH,
|
||||||
PAREN,
|
PAREN,
|
||||||
|
ASSIGNEMENT_WORD,
|
||||||
// VAR,
|
// VAR,
|
||||||
// SPECIAL,
|
// SPECIAL,
|
||||||
COMMENT,
|
COMMENT,
|
||||||
|
|
@ -111,6 +112,7 @@ int lexer_dquote(t_list **alst, t_lexer *lexer);
|
||||||
int lexer_bquote(t_list **alst, t_lexer *lexer);
|
int lexer_bquote(t_list **alst, t_lexer *lexer);
|
||||||
int lexer_backslash(t_list **alst, t_lexer *lexer);
|
int lexer_backslash(t_list **alst, t_lexer *lexer);
|
||||||
int lexer_paren(t_list **alst, t_lexer *lexer);
|
int lexer_paren(t_list **alst, t_lexer *lexer);
|
||||||
|
int lexer_assignement_word(t_list **alst, t_lexer *lexer);
|
||||||
int lexer_comment(t_list **alst, t_lexer *lexer);
|
int lexer_comment(t_list **alst, t_lexer *lexer);
|
||||||
int lexer_end(t_list **alst, t_lexer *lexer);
|
int lexer_end(t_list **alst, t_lexer *lexer);
|
||||||
|
|
||||||
|
|
|
||||||
1
42sh/sample/assignement/var_01.sh
Normal file
1
42sh/sample/assignement/var_01.sh
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
HELLO=WORLD
|
||||||
4
42sh/sample/func/func01.sh
Normal file
4
42sh/sample/func/func01.sh
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
hello() {
|
||||||
|
ls | cat
|
||||||
|
pwd ; cd
|
||||||
|
}
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/09 20:39:06 by jhalford #+# #+# */
|
/* Created: 2017/02/09 20:39:06 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/20 20:48:53 by ariard ### ########.fr */
|
/* Updated: 2017/02/24 20:45:37 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -33,6 +33,8 @@ t_lexstate get_state_global(t_lexer *lexer)
|
||||||
return (BQUOTE);
|
return (BQUOTE);
|
||||||
else if (c == '(' || c == ')')
|
else if (c == '(' || c == ')')
|
||||||
return (PAREN);
|
return (PAREN);
|
||||||
|
else if (c == '=')
|
||||||
|
return (ASSIGNEMENT_WORD);
|
||||||
else if (c == 0)
|
else if (c == 0)
|
||||||
return (END);
|
return (END);
|
||||||
return (0);
|
return (0);
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/09 20:37:28 by jhalford #+# #+# */
|
/* Created: 2017/02/09 20:37:28 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/09 20:39:11 by jhalford ### ########.fr */
|
/* Updated: 2017/02/24 20:44:40 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
37
42sh/src/lexer/lexer_assignement_word.c
Normal file
37
42sh/src/lexer/lexer_assignement_word.c
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
/* ************************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* ::: :::::::: */
|
||||||
|
/* lexer_assignement_word.c :+: :+: :+: */
|
||||||
|
/* +:+ +:+ +:+ */
|
||||||
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
|
/* +#+#+#+#+#+ +#+ */
|
||||||
|
/* Created: 2017/02/24 20:28:13 by ariard #+# #+# */
|
||||||
|
/* Updated: 2017/02/24 21:00:13 by ariard ### ########.fr */
|
||||||
|
/* */
|
||||||
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
#include "lexer.h"
|
||||||
|
|
||||||
|
int lexer_assignement_word(t_list **alst, t_lexer *lexer)
|
||||||
|
{
|
||||||
|
t_token *token;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
token = (*alst)->content;
|
||||||
|
if (token->type != TK_WORD && token->type != TK_ASSIGNEMENT_WORD)
|
||||||
|
{
|
||||||
|
token_append(token, lexer, 0, 0);
|
||||||
|
lexer->pos++;
|
||||||
|
return (lexer_lex(alst, lexer));
|
||||||
|
}
|
||||||
|
token->type = TK_ASSIGNEMENT_WORD;
|
||||||
|
token_append(token, lexer, 0, 0);
|
||||||
|
lexer->pos++;
|
||||||
|
c = lexer->str[lexer->pos];
|
||||||
|
if ((lexer->state = get_state_global(lexer)))
|
||||||
|
return (lexer_lex(alst, lexer));
|
||||||
|
if ((lexer->state = get_state_redir(lexer)))
|
||||||
|
return (lexer_lex(alst, lexer));
|
||||||
|
lexer->state = ft_isdigit(c) ? NUMBER : ASSIGNEMENT_WORD;
|
||||||
|
return(lexer_lex(alst, lexer));
|
||||||
|
}
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/28 18:36:21 by jhalford #+# #+# */
|
/* Created: 2016/11/28 18:36:21 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/21 22:40:44 by ariard ### ########.fr */
|
/* Updated: 2017/02/24 20:43:56 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/09 17:08:51 by jhalford #+# #+# */
|
/* Created: 2017/02/09 17:08:51 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/21 22:44:37 by ariard ### ########.fr */
|
/* Updated: 2017/02/24 20:51:04 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -31,6 +31,7 @@ int (*g_lexer[])(t_list **alst, t_lexer *lexer) =
|
||||||
&lexer_bquote,
|
&lexer_bquote,
|
||||||
&lexer_backslash,
|
&lexer_backslash,
|
||||||
&lexer_paren,
|
&lexer_paren,
|
||||||
|
&lexer_assignement_word,
|
||||||
&lexer_comment,
|
&lexer_comment,
|
||||||
&lexer_end,
|
&lexer_end,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/03 12:07:11 by jhalford #+# #+# */
|
/* Created: 2016/12/03 12:07:11 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/20 20:54:32 by ariard ### ########.fr */
|
/* Updated: 2017/02/24 21:00:15 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/11 17:18:42 by jhalford #+# #+# */
|
/* Created: 2016/11/11 17:18:42 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/21 21:34:55 by ariard ### ########.fr */
|
/* Updated: 2017/02/24 20:33:59 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <marvin@42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/11/14 18:18:04 by jhalford #+# #+# */
|
/* Created: 2016/11/14 18:18:04 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/24 19:06:19 by ariard ### ########.fr */
|
/* Updated: 2017/02/24 20:59:07 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -16,6 +16,8 @@ char *ft_putast(void *nodein)
|
||||||
{
|
{
|
||||||
t_astnode *node;
|
t_astnode *node;
|
||||||
node = nodein;
|
node = nodein;
|
||||||
|
if (node->type == TK_ASSIGNEMENT_WORD)
|
||||||
|
return ("ASSIGNEMENT_WORD");
|
||||||
if (node->type == SUBSHELL)
|
if (node->type == SUBSHELL)
|
||||||
return ("SUBSHELL");
|
return ("SUBSHELL");
|
||||||
if (node->type == TK_NAME)
|
if (node->type == TK_NAME)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
/* By: jhalford <jhalford@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
|
/* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/24 18:39:09 by ariard ### ########.fr */
|
/* Updated: 2017/02/24 20:58:33 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/15 20:49:15 by ariard #+# #+# */
|
/* Created: 2017/02/15 20:49:15 by ariard #+# #+# */
|
||||||
/* Updated: 2017/02/24 19:31:18 by ariard ### ########.fr */
|
/* Updated: 2017/02/24 19:40:07 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/15 19:12:07 by ariard #+# #+# */
|
/* Created: 2017/02/15 19:12:07 by ariard #+# #+# */
|
||||||
/* Updated: 2017/02/24 18:54:09 by ariard ### ########.fr */
|
/* Updated: 2017/02/24 19:40:12 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/15 18:32:59 by ariard #+# #+# */
|
/* Created: 2017/02/15 18:32:59 by ariard #+# #+# */
|
||||||
/* Updated: 2017/02/24 19:27:32 by ariard ### ########.fr */
|
/* Updated: 2017/02/24 20:59:49 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -38,6 +38,7 @@ t_treematch g_treematch[] =
|
||||||
{TK_PAREN_OPEN, &add_cmd},
|
{TK_PAREN_OPEN, &add_cmd},
|
||||||
{TK_PAREN_CLOSE, &add_cmd},
|
{TK_PAREN_CLOSE, &add_cmd},
|
||||||
{TK_FOR, &add_cmd},
|
{TK_FOR, &add_cmd},
|
||||||
|
{TK_ASSIGNEMENT_WORD, &add_cmd},
|
||||||
{SUBSHELL, &add_cmd},
|
{SUBSHELL, &add_cmd},
|
||||||
{0, NULL},
|
{0, NULL},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/09 15:32:10 by ariard #+# #+# */
|
/* Created: 2017/02/09 15:32:10 by ariard #+# #+# */
|
||||||
/* Updated: 2017/02/21 20:39:13 by ariard ### ########.fr */
|
/* Updated: 2017/02/24 20:57:40 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -14,6 +14,8 @@
|
||||||
|
|
||||||
char *read_state(t_sym current)
|
char *read_state(t_sym current)
|
||||||
{
|
{
|
||||||
|
if (current == TK_ASSIGNEMENT_WORD)
|
||||||
|
return ("TK_ASSIGNEMENT_WORD");
|
||||||
if (current == CASE_CLAUSE)
|
if (current == CASE_CLAUSE)
|
||||||
return ("CASE_CLAUSE");
|
return ("CASE_CLAUSE");
|
||||||
if (current == CASE_LIST_NS)
|
if (current == CASE_LIST_NS)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue