syntax error + coordination parser etat
This commit is contained in:
parent
5976d0d281
commit
268c5fb46e
7 changed files with 132 additions and 9 deletions
|
|
@ -48,7 +48,7 @@ int handle_instruction(int fd)
|
|||
if (get_lexer_stack(lexer))
|
||||
continue ;
|
||||
lexer.state = DEFAULT;
|
||||
token_print(token);
|
||||
// token_print(token);
|
||||
if (get_reserved_words(&token))
|
||||
return (1);
|
||||
if (insert_newline(&token))
|
||||
|
|
@ -57,8 +57,9 @@ int handle_instruction(int fd)
|
|||
continue ;
|
||||
if (parser.state == SUCCESS)
|
||||
break ;
|
||||
else if (parser.state == ERROR)
|
||||
return (error_syntax(&token));
|
||||
else if (parser.state == ERROR)
|
||||
error_syntax(&token);
|
||||
token = NULL;
|
||||
}
|
||||
DG("succesful parsing:");
|
||||
// btree_print(STDBUG, ast, &ft_putast);
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ t_aggrematch g_aggrematch[] =
|
|||
{LINEBREAK, CMD_SUPERIOR, SEPARATOR_OP, 0},
|
||||
{LINEBREAK, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE},
|
||||
{LINEBREAK, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST},
|
||||
{LINEBREAK, COMPLETE_COMMANDS, PROGRAM, LINEBREAK},
|
||||
{NEWLINE_LIST, CMD_NAME, CMD_SUPERIOR, CMD_NAME},
|
||||
{NEWLINE_LIST, TK_DO, TK_DO, TK_DO},
|
||||
{NEWLINE_LIST, TK_IN, TK_IN, TK_IN},
|
||||
|
|
@ -72,6 +73,8 @@ t_aggrematch g_aggrematch[] =
|
|||
{NEWLINE_LIST, COMPOUND_LIST, SEPARATOR, 0},
|
||||
{NEWLINE_LIST, COMPLETE_CONDITION, COMPLETE_CONDITION, COMPLETE_CONDITION},
|
||||
{NEWLINE_LIST, CONDITION, CONDITION, CONDITION},
|
||||
{NEWLINE_LIST, COMPLETE_COMMANDS, LINEBREAK, 0},
|
||||
{NEWLINE_LIST, LINEBREAK, PROGRAM, LINEBREAK},
|
||||
|
||||
//to check
|
||||
{IO_HERE, TK_IO_NUMBER, IO_REDIRECT, TK_IO_NUMBER},
|
||||
|
|
@ -96,6 +99,7 @@ t_aggrematch g_aggrematch[] =
|
|||
{IO_REDIRECT, CMD_WORD, CMD_SUFFIX, 0},
|
||||
{IO_REDIRECT, CMD_PREFIX, CMD_PREFIX, CMD_PREFIX},
|
||||
{IO_REDIRECT, LINEBREAK, CMD_PREFIX, 0},
|
||||
{IO_REDIRECT, COMPLETE_COMMANDS, CMD_PREFIX, 0},
|
||||
{IO_REDIRECT, TK_BANG, CMD_PREFIX, 0},
|
||||
{IO_REDIRECT, SEPARATOR_OP, CMD_PREFIX, 0},
|
||||
{IO_REDIRECT, NEWLINE_LIST, CMD_PREFIX, 0},
|
||||
|
|
@ -105,6 +109,7 @@ t_aggrematch g_aggrematch[] =
|
|||
{CMD_SUFFIX, CMD_SUPERIOR, SIMPLE_COMMAND, CMD_SUPERIOR},
|
||||
//to abstract
|
||||
{CMD_PREFIX, LINEBREAK, SIMPLE_COMMAND, 0},
|
||||
{CMD_PREFIX, COMPLETE_COMMANDS, SIMPLE_COMMAND, 0},
|
||||
{CMD_PREFIX, TK_BANG, SIMPLE_COMMAND, 0},
|
||||
{CMD_PREFIX, SEPARATOR_OP, SIMPLE_COMMAND, 0},
|
||||
{CMD_PREFIX, NEWLINE_LIST, SIMPLE_COMMAND, 0},
|
||||
|
|
@ -112,6 +117,7 @@ t_aggrematch g_aggrematch[] =
|
|||
{CMD_WORD, CMD_PREFIX, SIMPLE_COMMAND, CMD_PREFIX},
|
||||
//to check
|
||||
{CMD_NAME, LINEBREAK, CMD_SUPERIOR, 0},
|
||||
{CMD_NAME, COMPLETE_COMMANDS, CMD_SUPERIOR, 0},
|
||||
{CMD_NAME, TK_BANG, CMD_SUPERIOR, 0},
|
||||
{CMD_NAME, SEPARATOR_OP, CMD_SUPERIOR, 0},
|
||||
{CMD_NAME, NEWLINE_LIST, CMD_SUPERIOR, 0},
|
||||
|
|
@ -161,6 +167,7 @@ t_aggrematch g_aggrematch[] =
|
|||
{COMPOUND_COMMAND, ALL, COMMAND, 0},
|
||||
{AND_OR_MINOR, PIPE_SEMI_SEQUENCE, AND_OR_MAJOR, PIPE_SEMI_SEQUENCE},
|
||||
{AND_OR_MINOR, LINEBREAK, AND_OR_MAJOR, 0},
|
||||
{AND_OR_MINOR, COMPLETE_COMMANDS, AND_OR_MAJOR, 0},
|
||||
{AND_OR_MINOR, AND_OR_MAJOR, AND_OR_MAJOR, 0},
|
||||
{COMMAND, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE},
|
||||
{COMMAND, COMPOUND_LIST, PIPE_SEMI_SEQUENCE, 0},
|
||||
|
|
@ -175,12 +182,18 @@ t_aggrematch g_aggrematch[] =
|
|||
{COMMAND, SEPARATOR_OP, PIPE_SEMI_SEQUENCE, 0},
|
||||
{COMMAND, NEWLINE_LIST, PIPE_SEMI_SEQUENCE, 0},
|
||||
{COMMAND, LINEBREAK, PIPE_SEMI_SEQUENCE, 0},
|
||||
{COMMAND, COMPLETE_COMMANDS, PIPE_SEMI_SEQUENCE, 0},
|
||||
{COMMAND, AND_OR_MAJOR, PIPE_SEMI_SEQUENCE, 0},
|
||||
{COMMAND, AND_OR_MAJOR, PIPE_SEMI_SEQUENCE, 0},
|
||||
{COMMAND, COMPLETE_CONDITION, PIPE_SEMI_SEQUENCE, 0},
|
||||
{END_COMMAND, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE},
|
||||
{END_COMMAND, AND_OR_MAJOR, LIST, AND_OR_MAJOR},
|
||||
{END_COMMAND, TK_WHILE, PIPE_SEQUENCE, 0},
|
||||
{END_COMMAND, TK_WHILE, PIPE_SEQUENCE, 0},
|
||||
{END_COMMAND, TK_UNTIL, PIPE_SEQUENCE, 0},
|
||||
{END_COMMAND, LINEBREAK, PIPE_SEQUENCE, 0},
|
||||
{END_COMMAND, COMPLETE_COMMANDS, PIPE_SEQUENCE, 0},
|
||||
{END_COMMAND, TK_DO, PIPE_SEQUENCE, 0},
|
||||
{END_COMMAND, TK_DO, PIPE_SEQUENCE, 0},
|
||||
{END_COMMAND, TK_IF, PIPE_SEQUENCE, 0},
|
||||
{END_COMMAND, TK_ELIF, PIPE_SEQUENCE, 0},
|
||||
|
|
@ -194,6 +207,7 @@ t_aggrematch g_aggrematch[] =
|
|||
{PIPE_SEQUENCE, SEPARATOR_OP, PIPELINE, 0},
|
||||
{PIPE_SEQUENCE, NEWLINE_LIST, PIPELINE, 0},
|
||||
{PIPE_SEQUENCE, LINEBREAK, PIPELINE, 0},
|
||||
{PIPE_SEQUENCE, COMPLETE_COMMANDS, PIPELINE, 0},
|
||||
{PIPE_SEQUENCE, AND_OR_MAJOR, PIPELINE, 0},
|
||||
{PIPE_SEQUENCE, TK_DO, PIPELINE, 0},
|
||||
{PIPE_SEQUENCE, TK_IF, PIPELINE, 0},
|
||||
|
|
@ -211,6 +225,7 @@ t_aggrematch g_aggrematch[] =
|
|||
{PIPELINE, TK_ELSE, AND_OR, 0},
|
||||
{PIPELINE, COMPOUND_LIST, AND_OR, 0},
|
||||
{PIPELINE, LINEBREAK, AND_OR, 0},
|
||||
{PIPELINE, COMPLETE_COMMANDS, AND_OR, 0},
|
||||
// {PIPELINE, LINEBREAK, AND_OR, AND_OR},
|
||||
{PIPELINE, SEPARATOR_OP, AND_OR, 0},
|
||||
{PIPELINE, COMPLETE_CONDITION, AND_OR, 0},
|
||||
|
|
@ -228,11 +243,14 @@ t_aggrematch g_aggrematch[] =
|
|||
{AND_OR, SEPARATOR_OP, LIST, LIST},
|
||||
{AND_OR, NEWLINE_LIST, LIST, 0},
|
||||
{AND_OR, LINEBREAK, LIST, 0},
|
||||
{AND_OR, COMPLETE_COMMANDS, LIST, 0},
|
||||
{LIST, NEWLINE_LIST, COMPLETE_COMMAND, 0},
|
||||
{LIST, LINEBREAK, COMPLETE_COMMAND, 0},
|
||||
{LIST, COMPLETE_COMMANDS, COMPLETE_COMMAND, 0},
|
||||
{COMPLETE_COMMAND, NEWLINE_LIST, COMPLETE_COMMANDS, COMPLETE_COMMANDS},
|
||||
{COMPLETE_COMMAND, LINEBREAK, COMPLETE_COMMANDS, 0},
|
||||
{COMPLETE_COMMANDS, LINEBREAK, PROGRAM, LINEBREAK},
|
||||
{COMPLETE_COMMAND, COMPLETE_COMMANDS, COMPLETE_COMMANDS, 0},
|
||||
{COMPLETE_COMMANDS, COMPLETE_COMMANDS, COMPLETE_COMMANDS, COMPLETE_COMMANDS},
|
||||
{0, 0, 0, 0},
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -60,9 +60,9 @@ int error_syntax(t_list **lst)
|
|||
{
|
||||
if (g_errormatch[i].token == token->type)
|
||||
{
|
||||
ft_putstr_fd("syntax error near unexpetcted token `", 2);
|
||||
ft_putstr_fd("syntax error near unexpected token `", 2);
|
||||
ft_putstr_fd(g_errormatch[i].error, 2);
|
||||
ft_putstr_fd("'", 2);
|
||||
ft_putstr_fd("'\n", 2);
|
||||
return (1);
|
||||
}
|
||||
i++;
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_WORD, TK_CASE},
|
||||
{TK_WORD, WORDLIST},
|
||||
{TK_WORD, LINEBREAK},
|
||||
{TK_WORD, COMPLETE_COMMANDS},
|
||||
{TK_ASSIGNEMENT_WORD, CMD_PREFIX},
|
||||
{TK_IO_NUMBER, REDIRECT_LIST},
|
||||
{TK_IO_NUMBER, CMD_SUFFIX},
|
||||
|
|
@ -25,6 +26,7 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_IO_NUMBER, CMD_NAME},
|
||||
{TK_IO_NUMBER, CMD_WORD},
|
||||
{TK_IO_NUMBER, LINEBREAK},
|
||||
{TK_IO_NUMBER, COMPLETE_COMMANDS},
|
||||
{TK_IO_NUMBER, TK_BANG},
|
||||
{TK_IO_NUMBER, SEPARATOR_OP},
|
||||
{TK_IO_NUMBER, NEWLINE_LIST},
|
||||
|
|
@ -37,6 +39,7 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_OR_IF, CMD_SUPERIOR},
|
||||
{TK_OR_IF, AND_OR},
|
||||
{TK_DSEMI, LINEBREAK},
|
||||
{TK_DSEMI, COMPLETE_COMMANDS},
|
||||
{TK_DSEMI, COMPOUND_LIST},
|
||||
{TK_LESS, TK_IO_NUMBER},
|
||||
{TK_LESS, REDIRECT_LIST},
|
||||
|
|
@ -45,6 +48,7 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_LESS, CMD_WORD},
|
||||
{TK_LESS, CMD_NAME},
|
||||
{TK_LESS, LINEBREAK},
|
||||
{TK_LESS, COMPLETE_COMMANDS},
|
||||
{TK_LESS, TK_BANG},
|
||||
{TK_LESS, SEPARATOR_OP},
|
||||
{TK_LESS, NEWLINE_LIST},
|
||||
|
|
@ -58,6 +62,7 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_GREAT, CMD_WORD},
|
||||
{TK_GREAT, CMD_NAME},
|
||||
{TK_GREAT, LINEBREAK},
|
||||
{TK_GREAT, COMPLETE_COMMANDS},
|
||||
{TK_GREAT, TK_BANG},
|
||||
{TK_GREAT, SEPARATOR_OP},
|
||||
{TK_GREAT, NEWLINE_LIST},
|
||||
|
|
@ -73,6 +78,7 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_DLESS, CMD_WORD},
|
||||
{TK_DLESS, CMD_NAME},
|
||||
{TK_DLESS, LINEBREAK},
|
||||
{TK_DLESS, COMPLETE_COMMANDS},
|
||||
{TK_DLESS, TK_BANG},
|
||||
{TK_DLESS, SEPARATOR_OP},
|
||||
{TK_DLESS, NEWLINE_LIST},
|
||||
|
|
@ -87,6 +93,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_DLESSDASH, CMD_WORD},
|
||||
{TK_DLESSDASH, CMD_NAME},
|
||||
{TK_DLESSDASH, LINEBREAK},
|
||||
{TK_DLESSDASH, COMPLETE_COMMANDS},
|
||||
{TK_DLESSDASH, TK_BANG},
|
||||
{TK_DLESSDASH, TK_BANG},
|
||||
{TK_DLESSDASH, SEPARATOR_OP},
|
||||
{TK_DLESSDASH, NEWLINE_LIST},
|
||||
|
|
@ -101,6 +109,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_DGREAT, CMD_WORD},
|
||||
{TK_DGREAT, CMD_NAME},
|
||||
{TK_DGREAT, LINEBREAK},
|
||||
{TK_DGREAT, COMPLETE_COMMANDS},
|
||||
{TK_DGREAT, TK_BANG},
|
||||
{TK_DGREAT, TK_BANG},
|
||||
{TK_DGREAT, SEPARATOR_OP},
|
||||
{TK_DGREAT, NEWLINE_LIST},
|
||||
|
|
@ -115,6 +125,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_LESSAND, CMD_WORD},
|
||||
{TK_LESSAND, CMD_NAME},
|
||||
{TK_LESSAND, LINEBREAK},
|
||||
{TK_LESSAND, COMPLETE_COMMANDS},
|
||||
{TK_LESSAND, TK_BANG},
|
||||
{TK_LESSAND, TK_BANG},
|
||||
{TK_LESSAND, SEPARATOR_OP},
|
||||
{TK_LESSAND, NEWLINE_LIST},
|
||||
|
|
@ -129,6 +141,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_GREATAND, CMD_WORD},
|
||||
{TK_GREATAND, CMD_NAME},
|
||||
{TK_GREATAND, LINEBREAK},
|
||||
{TK_GREATAND, COMPLETE_COMMANDS},
|
||||
{TK_LESSAND, TK_BANG},
|
||||
{TK_GREATAND, TK_BANG},
|
||||
{TK_GREATAND, SEPARATOR_OP},
|
||||
{TK_GREATAND, NEWLINE_LIST},
|
||||
|
|
@ -143,6 +157,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_LESSGREAT, CMD_WORD},
|
||||
{TK_LESSGREAT, CMD_NAME},
|
||||
{TK_LESSGREAT, LINEBREAK},
|
||||
{TK_LESSGREAT, COMPLETE_COMMANDS},
|
||||
{TK_LESSGREAT, TK_BANG},
|
||||
{TK_LESSGREAT, TK_BANG},
|
||||
{TK_LESSGREAT, SEPARATOR_OP},
|
||||
{TK_LESSGREAT, NEWLINE_LIST},
|
||||
|
|
@ -157,6 +173,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_CLOBBER, CMD_WORD},
|
||||
{TK_CLOBBER, CMD_NAME},
|
||||
{TK_CLOBBER, LINEBREAK},
|
||||
{TK_CLOBBER, COMPLETE_COMMANDS},
|
||||
{TK_CLOBBER, TK_BANG},
|
||||
{TK_CLOBBER, TK_BANG},
|
||||
{TK_CLOBBER, SEPARATOR_OP},
|
||||
{TK_CLOBBER, NEWLINE_LIST},
|
||||
|
|
@ -165,6 +183,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_CLOBBER, AND_OR_MAJOR},
|
||||
|
||||
{TK_IF, LINEBREAK},
|
||||
{TK_IF, COMPLETE_COMMANDS},
|
||||
{TK_IF, TK_BANG},
|
||||
{TK_IF, TK_BANG},
|
||||
{TK_IF, SEPARATOR_OP},
|
||||
{TK_IF, NEWLINE_LIST},
|
||||
|
|
@ -199,6 +219,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_DONE, COMPOUND_LIST},
|
||||
{TK_DONE, END_COMMAND},
|
||||
{TK_CASE, LINEBREAK},
|
||||
{TK_CASE, COMPLETE_COMMANDS},
|
||||
{TK_CASE, TK_BANG},
|
||||
{TK_CASE, TK_BANG},
|
||||
{TK_CASE, NEWLINE_LIST},
|
||||
{TK_CASE, SEPARATOR_OP},
|
||||
|
|
@ -208,6 +230,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_ESAC, CASE_LIST_NS},
|
||||
{TK_ESAC, LINEBREAK},
|
||||
{TK_WHILE, LINEBREAK},
|
||||
{TK_WHILE, COMPLETE_COMMANDS},
|
||||
{TK_WHILE, TK_BANG},
|
||||
{TK_WHILE, TK_BANG},
|
||||
{TK_WHILE, SEPARATOR_OP},
|
||||
{TK_WHILE, NEWLINE_LIST},
|
||||
|
|
@ -220,6 +244,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_WHILE, TK_THEN},
|
||||
{TK_WHILE, COMPLETE_CONDITION},
|
||||
{TK_UNTIL, LINEBREAK},
|
||||
{TK_UNTIL, COMPLETE_COMMANDS},
|
||||
{TK_UNTIL, TK_BANG},
|
||||
{TK_UNTIL, TK_BANG},
|
||||
{TK_UNTIL, SEPARATOR_OP},
|
||||
{TK_UNTIL, NEWLINE_LIST},
|
||||
|
|
@ -232,17 +258,23 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_UNTIL, TK_THEN},
|
||||
{TK_UNTIL, COMPLETE_CONDITION},
|
||||
{TK_FOR, LINEBREAK},
|
||||
{TK_FOR, COMPLETE_COMMANDS},
|
||||
{TK_FOR, TK_BANG},
|
||||
{TK_FOR, TK_BANG},
|
||||
{TK_FOR, SEPARATOR_OP},
|
||||
{TK_FOR, NEWLINE_LIST},
|
||||
{TK_FOR, PIPE_SEMI_SEQUENCE},
|
||||
{TK_LBRACE, LINEBREAK},
|
||||
{TK_LBRACE, COMPLETE_COMMANDS},
|
||||
{TK_LBRACE, TK_BANG},
|
||||
{TK_LBRACE, TK_BANG},
|
||||
{TK_LBRACE, SEPARATOR_OP},
|
||||
{TK_LBRACE, NEWLINE_LIST},
|
||||
{TK_LBRACE, PIPE_SEMI_SEQUENCE},
|
||||
{TK_RBRACE, COMPOUND_LIST},
|
||||
{TK_BANG, LINEBREAK},
|
||||
{TK_BANG, COMPLETE_COMMANDS},
|
||||
{TK_BANG, SEPARATOR_OP},
|
||||
{TK_BANG, SEPARATOR_OP},
|
||||
{TK_BANG, NEWLINE_LIST},
|
||||
{TK_IN, LINEBREAK},
|
||||
|
|
@ -260,6 +292,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{TK_PAREN_OPEN, FNAME},
|
||||
{TK_PAREN_OPEN, CASE_LIST},
|
||||
{TK_PAREN_OPEN, LINEBREAK},
|
||||
{TK_PAREN_OPEN, COMPLETE_COMMANDS},
|
||||
{TK_PAREN_OPEN, TK_BANG},
|
||||
{TK_PAREN_OPEN, TK_BANG},
|
||||
{TK_PAREN_OPEN, SEPARATOR_OP},
|
||||
{TK_PAREN_OPEN, NEWLINE_LIST},
|
||||
|
|
@ -271,6 +305,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{SEQUENTIAL_SEP, IN},
|
||||
{SEQUENTIAL_SEP, WORDLIST},
|
||||
{END_COMMAND, PIPE_SEMI_SEQUENCE},
|
||||
{END_COMMAND, AND_OR_MAJOR},
|
||||
{END_COMMAND, TK_WHILE},
|
||||
{END_COMMAND, TK_WHILE},
|
||||
{END_COMMAND, TK_UNTIL},
|
||||
{END_COMMAND, TK_DO},
|
||||
|
|
@ -279,6 +315,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{END_COMMAND, TK_ELIF},
|
||||
{END_COMMAND, TK_ELSE},
|
||||
{END_COMMAND, LINEBREAK},
|
||||
{END_COMMAND, COMPLETE_COMMANDS},
|
||||
{END_COMMAND, COMPOUND_LIST},
|
||||
{END_COMMAND, COMPOUND_LIST},
|
||||
{END_COMMAND, COMPLETE_CONDITION},
|
||||
{SEPARATOR, CMD_SUPERIOR},
|
||||
|
|
@ -291,6 +329,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{SEPARATOR_OP, COMPOUND_LIST},
|
||||
{SEPARATOR_OP, PIPE_SEMI_SEQUENCE},
|
||||
{LINEBREAK, TK_SEMI},
|
||||
{LINEBREAK, END_COMMAND},
|
||||
{LINEBREAK, SEPARATOR_OP},
|
||||
{LINEBREAK, SEPARATOR_OP},
|
||||
{LINEBREAK, TK_PAREN_CLOSE},
|
||||
{LINEBREAK, WORD},
|
||||
|
|
@ -322,6 +362,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{NEWLINE_LIST, COMPLETE_COMMANDS},
|
||||
{NEWLINE_LIST, COMPLETE_CONDITION},
|
||||
{NEWLINE_LIST, CONDITION},
|
||||
{NEWLINE_LIST, LINEBREAK},
|
||||
{HERE_END, TK_DLESS},
|
||||
{HERE_END, TK_DLESS},
|
||||
{HERE_END, TK_DLESSDASH},
|
||||
{IO_HERE, TK_IO_NUMBER},
|
||||
|
|
@ -332,6 +374,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{IO_HERE, CMD_WORD},
|
||||
{IO_HERE, CMD_NAME},
|
||||
{IO_HERE, LINEBREAK},
|
||||
{IO_HERE, COMPLETE_COMMANDS},
|
||||
{IO_HERE, TK_BANG},
|
||||
{IO_HERE, TK_BANG},
|
||||
{IO_HERE, SEPARATOR_OP},
|
||||
{IO_HERE, NEWLINE_LIST},
|
||||
|
|
@ -351,6 +395,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{IO_FILE, CMD_WORD},
|
||||
{IO_FILE, CMD_NAME},
|
||||
{IO_FILE, LINEBREAK},
|
||||
{IO_FILE, COMPLETE_COMMANDS},
|
||||
{IO_FILE, TK_BANG},
|
||||
{IO_FILE, TK_BANG},
|
||||
{IO_FILE, SEPARATOR_OP},
|
||||
{IO_FILE, NEWLINE_LIST},
|
||||
|
|
@ -362,6 +408,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{IO_REDIRECT, CMD_WORD},
|
||||
{IO_REDIRECT, CMD_NAME},
|
||||
{IO_REDIRECT, LINEBREAK},
|
||||
{IO_REDIRECT, COMPLETE_COMMANDS},
|
||||
{IO_REDIRECT, TK_BANG},
|
||||
{IO_REDIRECT, TK_BANG},
|
||||
{IO_REDIRECT, SEPARATOR_OP},
|
||||
{IO_REDIRECT, NEWLINE_LIST},
|
||||
|
|
@ -371,13 +419,17 @@ t_stackmatch g_stackmatch[] =
|
|||
{CMD_SUFFIX, CMD_NAME},
|
||||
{CMD_SUFFIX, CMD_SUPERIOR},
|
||||
{CMD_PREFIX, LINEBREAK},
|
||||
{CMD_PREFIX, COMPLETE_COMMANDS},
|
||||
{CMD_PREFIX, TK_BANG},
|
||||
{CMD_PREFIX, TK_BANG},
|
||||
{CMD_PREFIX, SEPARATOR_OP},
|
||||
{CMD_PREFIX, NEWLINE_LIST},
|
||||
{CMD_PREFIX, PIPE_SEMI_SEQUENCE},
|
||||
{CMD_WORD, CMD_PREFIX},
|
||||
{CMD_NAME, COMPLETE_COMMANDS},
|
||||
{CMD_NAME, LINEBREAK},
|
||||
{CMD_NAME, TK_BANG},
|
||||
{CMD_NAME, TK_BANG},
|
||||
{CMD_NAME, SEPARATOR_OP},
|
||||
{CMD_NAME, NEWLINE_LIST},
|
||||
{CMD_NAME, PIPE_SEMI_SEQUENCE},
|
||||
|
|
@ -401,7 +453,9 @@ t_stackmatch g_stackmatch[] =
|
|||
{CMD_SUPERIOR, TK_ELSE},
|
||||
{CMD_SUPERIOR, COMPOUND_LIST},
|
||||
{CMD_SUPERIOR, COMPLETE_CONDITION},
|
||||
{CMD_SUPERIOR, LINEBREAK,},
|
||||
{CMD_SUPERIOR, LINEBREAK},
|
||||
{CMD_SUPERIOR, COMPLETE_COMMANDS},
|
||||
{CMD_SUPERIOR, TK_BANG},
|
||||
{CMD_SUPERIOR, TK_BANG},
|
||||
{CMD_SUPERIOR, SEPARATOR_OP},
|
||||
{CMD_SUPERIOR, NEWLINE_LIST},
|
||||
|
|
@ -419,6 +473,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{SIMPLE_COMMAND, COMPOUND_LIST},
|
||||
{SIMPLE_COMMAND, COMPLETE_CONDITION},
|
||||
{SIMPLE_COMMAND, LINEBREAK},
|
||||
{SIMPLE_COMMAND, COMPLETE_COMMANDS},
|
||||
{SIMPLE_COMMAND, TK_BANG},
|
||||
{SIMPLE_COMMAND, TK_BANG},
|
||||
{SIMPLE_COMMAND, SEPARATOR_OP},
|
||||
{SIMPLE_COMMAND, NEWLINE_LIST},
|
||||
|
|
@ -431,27 +487,39 @@ t_stackmatch g_stackmatch[] =
|
|||
{LOOP, TK_WHILE},
|
||||
{LOOP, TK_UNTIL},
|
||||
{CONDITION, LINEBREAK},
|
||||
{CONDITION, COMPLETE_COMMANDS},
|
||||
{CONDITION, COMPOUND_LIST},
|
||||
{CONDITION, COMPOUND_LIST},
|
||||
{CONDITION, COMPLETE_CONDITION},
|
||||
{COMPLETE_CONDITION, LINEBREAK},
|
||||
{COMPLETE_CONDITION, COMPLETE_COMMANDS},
|
||||
{COMPLETE_CONDITION, COMPLETE_CONDITION},
|
||||
{COMPLETE_CONDITION, COMPLETE_CONDITION},
|
||||
{BRACE_GROUP, LINEBREAK},
|
||||
{BRACE_GROUP, COMPLETE_COMMANDS},
|
||||
{BRACE_GROUP, TK_BANG},
|
||||
{BRACE_GROUP, TK_BANG},
|
||||
{BRACE_GROUP, SEPARATOR_OP},
|
||||
{BRACE_GROUP, NEWLINE_LIST},
|
||||
{BRACE_GROUP, PIPE_SEMI_SEQUENCE},
|
||||
{FNAME, LINEBREAK},
|
||||
{FNAME, COMPLETE_COMMANDS},
|
||||
{FNAME, TK_BANG},
|
||||
{FNAME, TK_BANG},
|
||||
{FNAME, SEPARATOR_OP},
|
||||
{FNAME, NEWLINE_LIST},
|
||||
{FNAME, PIPE_SEMI_SEQUENCE},
|
||||
{FUNCTION_BODY, FUNC},
|
||||
{FUNCTION_DEFINITION, LINEBREAK},
|
||||
{FUNCTION_DEFINITION, COMPLETE_COMMANDS},
|
||||
{FUNCTION_DEFINITION, TK_BANG},
|
||||
{FUNCTION_DEFINITION, TK_BANG},
|
||||
{FUNCTION_DEFINITION, SEPARATOR_OP},
|
||||
{FUNCTION_DEFINITION, NEWLINE_LIST},
|
||||
{FUNCTION_DEFINITION, PIPE_SEMI_SEQUENCE},
|
||||
{UNTIL_CLAUSE, LINEBREAK},
|
||||
{UNTIL_CLAUSE, COMPLETE_COMMANDS},
|
||||
{UNTIL_CLAUSE, TK_BANG},
|
||||
{UNTIL_CLAUSE, TK_BANG},
|
||||
{UNTIL_CLAUSE, SEPARATOR_OP},
|
||||
{UNTIL_CLAUSE, NEWLINE_LIST},
|
||||
|
|
@ -466,6 +534,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{UNTIL_CLAUSE, COMPOUND_LIST},
|
||||
{UNTIL_CLAUSE, COMPLETE_CONDITION},
|
||||
{WHILE_CLAUSE, LINEBREAK},
|
||||
{WHILE_CLAUSE, COMPLETE_COMMANDS},
|
||||
{WHILE_CLAUSE, TK_BANG},
|
||||
{WHILE_CLAUSE, TK_BANG},
|
||||
{WHILE_CLAUSE, SEPARATOR_OP},
|
||||
{WHILE_CLAUSE, NEWLINE_LIST},
|
||||
|
|
@ -482,6 +552,8 @@ t_stackmatch g_stackmatch[] =
|
|||
// {ELSE_PART, COMPOUND_LIST},
|
||||
// {ELSE_PART, COMPLETE_CONDITION},
|
||||
{IF_CLAUSE, LINEBREAK},
|
||||
{IF_CLAUSE, COMPLETE_COMMANDS},
|
||||
{IF_CLAUSE, TK_BANG},
|
||||
{IF_CLAUSE, TK_BANG},
|
||||
{IF_CLAUSE, SEPARATOR_OP},
|
||||
{IF_CLAUSE, NEWLINE_LIST},
|
||||
|
|
@ -508,6 +580,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{CASE_LIST, LINEBREAK},
|
||||
{CASE_LIST_NS, LINEBREAK},
|
||||
{CASE_CLAUSE, LINEBREAK},
|
||||
{CASE_CLAUSE, COMPLETE_COMMANDS},
|
||||
{CASE_CLAUSE, TK_BANG},
|
||||
{CASE_CLAUSE, TK_BANG},
|
||||
{CASE_CLAUSE, SEPARATOR_OP},
|
||||
{CASE_CLAUSE, NEWLINE_LIST},
|
||||
|
|
@ -516,11 +590,15 @@ t_stackmatch g_stackmatch[] =
|
|||
{IN, LINEBREAK},
|
||||
{NAME, TK_FOR},
|
||||
{FOR_CLAUSE, LINEBREAK},
|
||||
{FOR_CLAUSE, COMPLETE_COMMANDS},
|
||||
{FOR_CLAUSE, TK_BANG},
|
||||
{FOR_CLAUSE, TK_BANG},
|
||||
{FOR_CLAUSE, SEPARATOR_OP},
|
||||
{FOR_CLAUSE, NEWLINE_LIST},
|
||||
{FOR_CLAUSE, PIPE_SEMI_SEQUENCE},
|
||||
{TERM, LINEBREAK},
|
||||
{TERM, COMPLETE_COMMANDS},
|
||||
{COMPOUND_LIST, TK_DO},
|
||||
{COMPOUND_LIST, TK_DO},
|
||||
{COMPOUND_LIST, TK_LBRACE},
|
||||
{COMPOUND_LIST, TK_WHILE},
|
||||
|
|
@ -533,11 +611,15 @@ t_stackmatch g_stackmatch[] =
|
|||
{COMPOUND_LIST, COMPOUND_LIST},
|
||||
{COMPOUND_LIST, COMPLETE_CONDITION},
|
||||
{SUBSHELL, LINEBREAK},
|
||||
{SUBSHELL, COMPLETE_COMMANDS},
|
||||
{SUBSHELL, TK_BANG},
|
||||
{SUBSHELL, TK_BANG},
|
||||
{SUBSHELL, SEPARATOR_OP},
|
||||
{SUBSHELL, NEWLINE_LIST},
|
||||
{SUBSHELL, PIPE_SEMI_SEQUENCE},
|
||||
{COMPOUND_COMMAND, LINEBREAK},
|
||||
{COMPOUND_COMMAND, COMPLETE_COMMANDS},
|
||||
{COMPOUND_COMMAND, TK_BANG},
|
||||
{COMPOUND_COMMAND, TK_BANG},
|
||||
{COMPOUND_COMMAND, SEPARATOR_OP},
|
||||
{COMPOUND_COMMAND, NEWLINE_LIST},
|
||||
|
|
@ -555,6 +637,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{COMMAND, TK_WHILE},
|
||||
{COMMAND, TK_UNTIL},
|
||||
{COMMAND, LINEBREAK},
|
||||
{COMMAND, COMPLETE_COMMANDS},
|
||||
{COMMAND, TK_DO},
|
||||
{COMMAND, TK_DO},
|
||||
{COMMAND, TK_IF},
|
||||
{COMMAND, TK_ELIF},
|
||||
|
|
@ -569,6 +653,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{COMMAND, AND_OR_MAJOR},
|
||||
{AND_OR_MINOR, PIPE_SEMI_SEQUENCE},
|
||||
{AND_OR_MINOR, LINEBREAK},
|
||||
{AND_OR_MINOR, COMPLETE_COMMANDS},
|
||||
{AND_OR_MINOR, AND_OR_MAJOR},
|
||||
{AND_OR_MINOR, AND_OR_MAJOR},
|
||||
{PIPE_SEQUENCE, TK_WHILE},
|
||||
{PIPE_SEQUENCE, TK_UNTIL},
|
||||
|
|
@ -580,6 +666,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{PIPE_SEQUENCE, COMPOUND_LIST},
|
||||
{PIPE_SEQUENCE, COMPLETE_CONDITION},
|
||||
{PIPE_SEQUENCE, LINEBREAK},
|
||||
{PIPE_SEQUENCE, COMPLETE_COMMANDS},
|
||||
{PIPE_SEQUENCE, TK_BANG},
|
||||
{PIPE_SEQUENCE, TK_BANG},
|
||||
{PIPE_SEQUENCE, SEPARATOR_OP},
|
||||
{PIPE_SEQUENCE, NEWLINE_LIST},
|
||||
|
|
@ -594,6 +682,8 @@ t_stackmatch g_stackmatch[] =
|
|||
{PIPE_SEMI_SEQUENCE, COMPOUND_LIST},
|
||||
{PIPE_SEMI_SEQUENCE, COMPLETE_CONDITION},
|
||||
{PIPE_SEMI_SEQUENCE, LINEBREAK},
|
||||
{PIPE_SEMI_SEQUENCE, COMPLETE_COMMANDS},
|
||||
{PIPE_SEMI_SEQUENCE, TK_BANG},
|
||||
{PIPE_SEMI_SEQUENCE, TK_BANG},
|
||||
{PIPE_SEMI_SEQUENCE, SEPARATOR_OP},
|
||||
{PIPE_SEMI_SEQUENCE, NEWLINE_LIST},
|
||||
|
|
@ -608,10 +698,14 @@ t_stackmatch g_stackmatch[] =
|
|||
{PIPELINE, COMPOUND_LIST},
|
||||
{PIPELINE, COMPLETE_CONDITION},
|
||||
{PIPELINE, LINEBREAK},
|
||||
{PIPELINE, COMPLETE_COMMANDS},
|
||||
{PIPELINE, SEPARATOR_OP},
|
||||
{PIPELINE, SEPARATOR_OP},
|
||||
{PIPELINE, NEWLINE_LIST},
|
||||
{PIPELINE, AND_OR_MAJOR},
|
||||
{AND_OR_MAJOR, LINEBREAK},
|
||||
{AND_OR_MAJOR, COMPLETE_COMMANDS},
|
||||
{AND_OR_MAJOR, AND_OR_MAJOR},
|
||||
{AND_OR_MAJOR, AND_OR_MAJOR},
|
||||
{AND_OR, TK_DO},
|
||||
{AND_OR, TK_WHILE},
|
||||
|
|
@ -623,13 +717,18 @@ t_stackmatch g_stackmatch[] =
|
|||
{AND_OR, COMPOUND_LIST},
|
||||
{AND_OR, COMPLETE_CONDITION},
|
||||
{AND_OR, LINEBREAK},
|
||||
{AND_OR, COMPLETE_COMMANDS},
|
||||
{AND_OR, SEPARATOR_OP},
|
||||
{AND_OR, SEPARATOR_OP},
|
||||
{AND_OR, NEWLINE_LIST},
|
||||
{LIST, LINEBREAK},
|
||||
{LIST, COMPLETE_COMMANDS},
|
||||
{LIST, NEWLINE_LIST},
|
||||
{COMPLETE_COMMAND, LINEBREAK},
|
||||
{COMPLETE_COMMAND, COMPLETE_COMMANDS},
|
||||
{COMPLETE_COMMAND, NEWLINE_LIST},
|
||||
{COMPLETE_COMMANDS, LINEBREAK},
|
||||
{COMPLETE_COMMANDS, COMPLETE_COMMANDS},
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@ static void insert_linebreak(t_list **lst)
|
|||
|
||||
static int end_instruction(t_sym sym)
|
||||
{
|
||||
if (sym == CMD_SUPERIOR || sym == PIPE_SEMI_SEQUENCE)
|
||||
if (sym == CMD_SUPERIOR || sym == PIPE_SEMI_SEQUENCE
|
||||
|| sym == COMPLETE_COMMANDS || sym == END_COMMAND)
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -29,6 +30,8 @@ static int end_instruction(t_sym sym)
|
|||
int ft_parse(t_btree **ast, t_list **token, t_parser *parser)
|
||||
{
|
||||
(void)ast;
|
||||
if (parser->state == SUCCESS || parser->state == ERROR)
|
||||
parser_init(parser);
|
||||
while (*token)
|
||||
{
|
||||
produce_sym(*parser->stack, parser->new_sym, token);
|
||||
|
|
@ -49,7 +52,6 @@ int ft_parse(t_btree **ast, t_list **token, t_parser *parser)
|
|||
// build_tree(ast, token);
|
||||
// btree_print(STDBUG, *ast, &ft_putast);
|
||||
if ((end_instruction(*parser->stack) && !(*token)->next))
|
||||
/* || *parser->stack == PROGRAM) */
|
||||
insert_linebreak(token);
|
||||
else
|
||||
ft_lst_delif(token, (*token)->content, &ft_addrcmp, &token_free);
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ t_prodmatch g_prodmatch[] =
|
|||
{TK_WORD, TK_IN, PATTERN},
|
||||
{TK_WORD, CASE_LIST, PATTERN},
|
||||
{TK_WORD, TK_PAREN_OPEN, PATTERN},
|
||||
{TK_WORD, COMPLETE_COMMANDS, CMD_NAME},
|
||||
{TK_ASSIGNEMENT_WORD, LINEBREAK, CMD_PREFIX},
|
||||
{TK_ASSIGNEMENT_WORD, TK_BANG, CMD_PREFIX},
|
||||
{TK_ASSIGNEMENT_WORD, SEPARATOR_OP, CMD_PREFIX},
|
||||
|
|
|
|||
2
42sh/test.sh
Normal file
2
42sh/test.sh
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
> >
|
||||
ls | cat
|
||||
Loading…
Reference in a new issue