syntax error + coordination parser etat

This commit is contained in:
AntoHesse 2017-02-22 18:36:32 +01:00
parent 5976d0d281
commit 268c5fb46e
7 changed files with 132 additions and 9 deletions

View file

@ -48,7 +48,7 @@ int handle_instruction(int fd)
if (get_lexer_stack(lexer)) if (get_lexer_stack(lexer))
continue ; continue ;
lexer.state = DEFAULT; lexer.state = DEFAULT;
token_print(token); // token_print(token);
if (get_reserved_words(&token)) if (get_reserved_words(&token))
return (1); return (1);
if (insert_newline(&token)) if (insert_newline(&token))
@ -57,8 +57,9 @@ int handle_instruction(int fd)
continue ; continue ;
if (parser.state == SUCCESS) if (parser.state == SUCCESS)
break ; break ;
else if (parser.state == ERROR) else if (parser.state == ERROR)
return (error_syntax(&token)); error_syntax(&token);
token = NULL;
} }
DG("succesful parsing:"); DG("succesful parsing:");
// btree_print(STDBUG, ast, &ft_putast); // btree_print(STDBUG, ast, &ft_putast);

View file

@ -55,6 +55,7 @@ t_aggrematch g_aggrematch[] =
{LINEBREAK, CMD_SUPERIOR, SEPARATOR_OP, 0}, {LINEBREAK, CMD_SUPERIOR, SEPARATOR_OP, 0},
{LINEBREAK, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE}, {LINEBREAK, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE},
{LINEBREAK, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST}, {LINEBREAK, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST},
{LINEBREAK, COMPLETE_COMMANDS, PROGRAM, LINEBREAK},
{NEWLINE_LIST, CMD_NAME, CMD_SUPERIOR, CMD_NAME}, {NEWLINE_LIST, CMD_NAME, CMD_SUPERIOR, CMD_NAME},
{NEWLINE_LIST, TK_DO, TK_DO, TK_DO}, {NEWLINE_LIST, TK_DO, TK_DO, TK_DO},
{NEWLINE_LIST, TK_IN, TK_IN, TK_IN}, {NEWLINE_LIST, TK_IN, TK_IN, TK_IN},
@ -72,6 +73,8 @@ t_aggrematch g_aggrematch[] =
{NEWLINE_LIST, COMPOUND_LIST, SEPARATOR, 0}, {NEWLINE_LIST, COMPOUND_LIST, SEPARATOR, 0},
{NEWLINE_LIST, COMPLETE_CONDITION, COMPLETE_CONDITION, COMPLETE_CONDITION}, {NEWLINE_LIST, COMPLETE_CONDITION, COMPLETE_CONDITION, COMPLETE_CONDITION},
{NEWLINE_LIST, CONDITION, CONDITION, CONDITION}, {NEWLINE_LIST, CONDITION, CONDITION, CONDITION},
{NEWLINE_LIST, COMPLETE_COMMANDS, LINEBREAK, 0},
{NEWLINE_LIST, LINEBREAK, PROGRAM, LINEBREAK},
//to check //to check
{IO_HERE, TK_IO_NUMBER, IO_REDIRECT, TK_IO_NUMBER}, {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_WORD, CMD_SUFFIX, 0},
{IO_REDIRECT, CMD_PREFIX, CMD_PREFIX, CMD_PREFIX}, {IO_REDIRECT, CMD_PREFIX, CMD_PREFIX, CMD_PREFIX},
{IO_REDIRECT, LINEBREAK, CMD_PREFIX, 0}, {IO_REDIRECT, LINEBREAK, CMD_PREFIX, 0},
{IO_REDIRECT, COMPLETE_COMMANDS, CMD_PREFIX, 0},
{IO_REDIRECT, TK_BANG, CMD_PREFIX, 0}, {IO_REDIRECT, TK_BANG, CMD_PREFIX, 0},
{IO_REDIRECT, SEPARATOR_OP, CMD_PREFIX, 0}, {IO_REDIRECT, SEPARATOR_OP, CMD_PREFIX, 0},
{IO_REDIRECT, NEWLINE_LIST, 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}, {CMD_SUFFIX, CMD_SUPERIOR, SIMPLE_COMMAND, CMD_SUPERIOR},
//to abstract //to abstract
{CMD_PREFIX, LINEBREAK, SIMPLE_COMMAND, 0}, {CMD_PREFIX, LINEBREAK, SIMPLE_COMMAND, 0},
{CMD_PREFIX, COMPLETE_COMMANDS, SIMPLE_COMMAND, 0},
{CMD_PREFIX, TK_BANG, SIMPLE_COMMAND, 0}, {CMD_PREFIX, TK_BANG, SIMPLE_COMMAND, 0},
{CMD_PREFIX, SEPARATOR_OP, SIMPLE_COMMAND, 0}, {CMD_PREFIX, SEPARATOR_OP, SIMPLE_COMMAND, 0},
{CMD_PREFIX, NEWLINE_LIST, 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}, {CMD_WORD, CMD_PREFIX, SIMPLE_COMMAND, CMD_PREFIX},
//to check //to check
{CMD_NAME, LINEBREAK, CMD_SUPERIOR, 0}, {CMD_NAME, LINEBREAK, CMD_SUPERIOR, 0},
{CMD_NAME, COMPLETE_COMMANDS, CMD_SUPERIOR, 0},
{CMD_NAME, TK_BANG, CMD_SUPERIOR, 0}, {CMD_NAME, TK_BANG, CMD_SUPERIOR, 0},
{CMD_NAME, SEPARATOR_OP, CMD_SUPERIOR, 0}, {CMD_NAME, SEPARATOR_OP, CMD_SUPERIOR, 0},
{CMD_NAME, NEWLINE_LIST, CMD_SUPERIOR, 0}, {CMD_NAME, NEWLINE_LIST, CMD_SUPERIOR, 0},
@ -161,6 +167,7 @@ t_aggrematch g_aggrematch[] =
{COMPOUND_COMMAND, ALL, COMMAND, 0}, {COMPOUND_COMMAND, ALL, COMMAND, 0},
{AND_OR_MINOR, PIPE_SEMI_SEQUENCE, AND_OR_MAJOR, PIPE_SEMI_SEQUENCE}, {AND_OR_MINOR, PIPE_SEMI_SEQUENCE, AND_OR_MAJOR, PIPE_SEMI_SEQUENCE},
{AND_OR_MINOR, LINEBREAK, AND_OR_MAJOR, 0}, {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}, {AND_OR_MINOR, AND_OR_MAJOR, AND_OR_MAJOR, 0},
{COMMAND, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE}, {COMMAND, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE},
{COMMAND, COMPOUND_LIST, PIPE_SEMI_SEQUENCE, 0}, {COMMAND, COMPOUND_LIST, PIPE_SEMI_SEQUENCE, 0},
@ -175,12 +182,18 @@ t_aggrematch g_aggrematch[] =
{COMMAND, SEPARATOR_OP, PIPE_SEMI_SEQUENCE, 0}, {COMMAND, SEPARATOR_OP, PIPE_SEMI_SEQUENCE, 0},
{COMMAND, NEWLINE_LIST, PIPE_SEMI_SEQUENCE, 0}, {COMMAND, NEWLINE_LIST, PIPE_SEMI_SEQUENCE, 0},
{COMMAND, LINEBREAK, 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, AND_OR_MAJOR, PIPE_SEMI_SEQUENCE, 0},
{COMMAND, COMPLETE_CONDITION, PIPE_SEMI_SEQUENCE, 0}, {COMMAND, COMPLETE_CONDITION, PIPE_SEMI_SEQUENCE, 0},
{END_COMMAND, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE}, {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_WHILE, PIPE_SEQUENCE, 0},
{END_COMMAND, TK_UNTIL, PIPE_SEQUENCE, 0}, {END_COMMAND, TK_UNTIL, PIPE_SEQUENCE, 0},
{END_COMMAND, LINEBREAK, 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_DO, PIPE_SEQUENCE, 0},
{END_COMMAND, TK_IF, PIPE_SEQUENCE, 0}, {END_COMMAND, TK_IF, PIPE_SEQUENCE, 0},
{END_COMMAND, TK_ELIF, 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, SEPARATOR_OP, PIPELINE, 0},
{PIPE_SEQUENCE, NEWLINE_LIST, PIPELINE, 0}, {PIPE_SEQUENCE, NEWLINE_LIST, PIPELINE, 0},
{PIPE_SEQUENCE, LINEBREAK, PIPELINE, 0}, {PIPE_SEQUENCE, LINEBREAK, PIPELINE, 0},
{PIPE_SEQUENCE, COMPLETE_COMMANDS, PIPELINE, 0},
{PIPE_SEQUENCE, AND_OR_MAJOR, PIPELINE, 0}, {PIPE_SEQUENCE, AND_OR_MAJOR, PIPELINE, 0},
{PIPE_SEQUENCE, TK_DO, PIPELINE, 0}, {PIPE_SEQUENCE, TK_DO, PIPELINE, 0},
{PIPE_SEQUENCE, TK_IF, PIPELINE, 0}, {PIPE_SEQUENCE, TK_IF, PIPELINE, 0},
@ -211,6 +225,7 @@ t_aggrematch g_aggrematch[] =
{PIPELINE, TK_ELSE, AND_OR, 0}, {PIPELINE, TK_ELSE, AND_OR, 0},
{PIPELINE, COMPOUND_LIST, AND_OR, 0}, {PIPELINE, COMPOUND_LIST, AND_OR, 0},
{PIPELINE, LINEBREAK, AND_OR, 0}, {PIPELINE, LINEBREAK, AND_OR, 0},
{PIPELINE, COMPLETE_COMMANDS, AND_OR, 0},
// {PIPELINE, LINEBREAK, AND_OR, AND_OR}, // {PIPELINE, LINEBREAK, AND_OR, AND_OR},
{PIPELINE, SEPARATOR_OP, AND_OR, 0}, {PIPELINE, SEPARATOR_OP, AND_OR, 0},
{PIPELINE, COMPLETE_CONDITION, 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, SEPARATOR_OP, LIST, LIST},
{AND_OR, NEWLINE_LIST, LIST, 0}, {AND_OR, NEWLINE_LIST, LIST, 0},
{AND_OR, LINEBREAK, LIST, 0}, {AND_OR, LINEBREAK, LIST, 0},
{AND_OR, COMPLETE_COMMANDS, LIST, 0},
{LIST, NEWLINE_LIST, COMPLETE_COMMAND, 0}, {LIST, NEWLINE_LIST, COMPLETE_COMMAND, 0},
{LIST, LINEBREAK, COMPLETE_COMMAND, 0}, {LIST, LINEBREAK, COMPLETE_COMMAND, 0},
{LIST, COMPLETE_COMMANDS, COMPLETE_COMMAND, 0},
{COMPLETE_COMMAND, NEWLINE_LIST, COMPLETE_COMMANDS, COMPLETE_COMMANDS}, {COMPLETE_COMMAND, NEWLINE_LIST, COMPLETE_COMMANDS, COMPLETE_COMMANDS},
{COMPLETE_COMMAND, LINEBREAK, COMPLETE_COMMANDS, 0}, {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}, {0, 0, 0, 0},
}; };

View file

@ -60,9 +60,9 @@ int error_syntax(t_list **lst)
{ {
if (g_errormatch[i].token == token->type) 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(g_errormatch[i].error, 2);
ft_putstr_fd("'", 2); ft_putstr_fd("'\n", 2);
return (1); return (1);
} }
i++; i++;

View file

@ -18,6 +18,7 @@ t_stackmatch g_stackmatch[] =
{TK_WORD, TK_CASE}, {TK_WORD, TK_CASE},
{TK_WORD, WORDLIST}, {TK_WORD, WORDLIST},
{TK_WORD, LINEBREAK}, {TK_WORD, LINEBREAK},
{TK_WORD, COMPLETE_COMMANDS},
{TK_ASSIGNEMENT_WORD, CMD_PREFIX}, {TK_ASSIGNEMENT_WORD, CMD_PREFIX},
{TK_IO_NUMBER, REDIRECT_LIST}, {TK_IO_NUMBER, REDIRECT_LIST},
{TK_IO_NUMBER, CMD_SUFFIX}, {TK_IO_NUMBER, CMD_SUFFIX},
@ -25,6 +26,7 @@ t_stackmatch g_stackmatch[] =
{TK_IO_NUMBER, CMD_NAME}, {TK_IO_NUMBER, CMD_NAME},
{TK_IO_NUMBER, CMD_WORD}, {TK_IO_NUMBER, CMD_WORD},
{TK_IO_NUMBER, LINEBREAK}, {TK_IO_NUMBER, LINEBREAK},
{TK_IO_NUMBER, COMPLETE_COMMANDS},
{TK_IO_NUMBER, TK_BANG}, {TK_IO_NUMBER, TK_BANG},
{TK_IO_NUMBER, SEPARATOR_OP}, {TK_IO_NUMBER, SEPARATOR_OP},
{TK_IO_NUMBER, NEWLINE_LIST}, {TK_IO_NUMBER, NEWLINE_LIST},
@ -37,6 +39,7 @@ t_stackmatch g_stackmatch[] =
{TK_OR_IF, CMD_SUPERIOR}, {TK_OR_IF, CMD_SUPERIOR},
{TK_OR_IF, AND_OR}, {TK_OR_IF, AND_OR},
{TK_DSEMI, LINEBREAK}, {TK_DSEMI, LINEBREAK},
{TK_DSEMI, COMPLETE_COMMANDS},
{TK_DSEMI, COMPOUND_LIST}, {TK_DSEMI, COMPOUND_LIST},
{TK_LESS, TK_IO_NUMBER}, {TK_LESS, TK_IO_NUMBER},
{TK_LESS, REDIRECT_LIST}, {TK_LESS, REDIRECT_LIST},
@ -45,6 +48,7 @@ t_stackmatch g_stackmatch[] =
{TK_LESS, CMD_WORD}, {TK_LESS, CMD_WORD},
{TK_LESS, CMD_NAME}, {TK_LESS, CMD_NAME},
{TK_LESS, LINEBREAK}, {TK_LESS, LINEBREAK},
{TK_LESS, COMPLETE_COMMANDS},
{TK_LESS, TK_BANG}, {TK_LESS, TK_BANG},
{TK_LESS, SEPARATOR_OP}, {TK_LESS, SEPARATOR_OP},
{TK_LESS, NEWLINE_LIST}, {TK_LESS, NEWLINE_LIST},
@ -58,6 +62,7 @@ t_stackmatch g_stackmatch[] =
{TK_GREAT, CMD_WORD}, {TK_GREAT, CMD_WORD},
{TK_GREAT, CMD_NAME}, {TK_GREAT, CMD_NAME},
{TK_GREAT, LINEBREAK}, {TK_GREAT, LINEBREAK},
{TK_GREAT, COMPLETE_COMMANDS},
{TK_GREAT, TK_BANG}, {TK_GREAT, TK_BANG},
{TK_GREAT, SEPARATOR_OP}, {TK_GREAT, SEPARATOR_OP},
{TK_GREAT, NEWLINE_LIST}, {TK_GREAT, NEWLINE_LIST},
@ -73,6 +78,7 @@ t_stackmatch g_stackmatch[] =
{TK_DLESS, CMD_WORD}, {TK_DLESS, CMD_WORD},
{TK_DLESS, CMD_NAME}, {TK_DLESS, CMD_NAME},
{TK_DLESS, LINEBREAK}, {TK_DLESS, LINEBREAK},
{TK_DLESS, COMPLETE_COMMANDS},
{TK_DLESS, TK_BANG}, {TK_DLESS, TK_BANG},
{TK_DLESS, SEPARATOR_OP}, {TK_DLESS, SEPARATOR_OP},
{TK_DLESS, NEWLINE_LIST}, {TK_DLESS, NEWLINE_LIST},
@ -87,6 +93,8 @@ t_stackmatch g_stackmatch[] =
{TK_DLESSDASH, CMD_WORD}, {TK_DLESSDASH, CMD_WORD},
{TK_DLESSDASH, CMD_NAME}, {TK_DLESSDASH, CMD_NAME},
{TK_DLESSDASH, LINEBREAK}, {TK_DLESSDASH, LINEBREAK},
{TK_DLESSDASH, COMPLETE_COMMANDS},
{TK_DLESSDASH, TK_BANG},
{TK_DLESSDASH, TK_BANG}, {TK_DLESSDASH, TK_BANG},
{TK_DLESSDASH, SEPARATOR_OP}, {TK_DLESSDASH, SEPARATOR_OP},
{TK_DLESSDASH, NEWLINE_LIST}, {TK_DLESSDASH, NEWLINE_LIST},
@ -101,6 +109,8 @@ t_stackmatch g_stackmatch[] =
{TK_DGREAT, CMD_WORD}, {TK_DGREAT, CMD_WORD},
{TK_DGREAT, CMD_NAME}, {TK_DGREAT, CMD_NAME},
{TK_DGREAT, LINEBREAK}, {TK_DGREAT, LINEBREAK},
{TK_DGREAT, COMPLETE_COMMANDS},
{TK_DGREAT, TK_BANG},
{TK_DGREAT, TK_BANG}, {TK_DGREAT, TK_BANG},
{TK_DGREAT, SEPARATOR_OP}, {TK_DGREAT, SEPARATOR_OP},
{TK_DGREAT, NEWLINE_LIST}, {TK_DGREAT, NEWLINE_LIST},
@ -115,6 +125,8 @@ t_stackmatch g_stackmatch[] =
{TK_LESSAND, CMD_WORD}, {TK_LESSAND, CMD_WORD},
{TK_LESSAND, CMD_NAME}, {TK_LESSAND, CMD_NAME},
{TK_LESSAND, LINEBREAK}, {TK_LESSAND, LINEBREAK},
{TK_LESSAND, COMPLETE_COMMANDS},
{TK_LESSAND, TK_BANG},
{TK_LESSAND, TK_BANG}, {TK_LESSAND, TK_BANG},
{TK_LESSAND, SEPARATOR_OP}, {TK_LESSAND, SEPARATOR_OP},
{TK_LESSAND, NEWLINE_LIST}, {TK_LESSAND, NEWLINE_LIST},
@ -129,6 +141,8 @@ t_stackmatch g_stackmatch[] =
{TK_GREATAND, CMD_WORD}, {TK_GREATAND, CMD_WORD},
{TK_GREATAND, CMD_NAME}, {TK_GREATAND, CMD_NAME},
{TK_GREATAND, LINEBREAK}, {TK_GREATAND, LINEBREAK},
{TK_GREATAND, COMPLETE_COMMANDS},
{TK_LESSAND, TK_BANG},
{TK_GREATAND, TK_BANG}, {TK_GREATAND, TK_BANG},
{TK_GREATAND, SEPARATOR_OP}, {TK_GREATAND, SEPARATOR_OP},
{TK_GREATAND, NEWLINE_LIST}, {TK_GREATAND, NEWLINE_LIST},
@ -143,6 +157,8 @@ t_stackmatch g_stackmatch[] =
{TK_LESSGREAT, CMD_WORD}, {TK_LESSGREAT, CMD_WORD},
{TK_LESSGREAT, CMD_NAME}, {TK_LESSGREAT, CMD_NAME},
{TK_LESSGREAT, LINEBREAK}, {TK_LESSGREAT, LINEBREAK},
{TK_LESSGREAT, COMPLETE_COMMANDS},
{TK_LESSGREAT, TK_BANG},
{TK_LESSGREAT, TK_BANG}, {TK_LESSGREAT, TK_BANG},
{TK_LESSGREAT, SEPARATOR_OP}, {TK_LESSGREAT, SEPARATOR_OP},
{TK_LESSGREAT, NEWLINE_LIST}, {TK_LESSGREAT, NEWLINE_LIST},
@ -157,6 +173,8 @@ t_stackmatch g_stackmatch[] =
{TK_CLOBBER, CMD_WORD}, {TK_CLOBBER, CMD_WORD},
{TK_CLOBBER, CMD_NAME}, {TK_CLOBBER, CMD_NAME},
{TK_CLOBBER, LINEBREAK}, {TK_CLOBBER, LINEBREAK},
{TK_CLOBBER, COMPLETE_COMMANDS},
{TK_CLOBBER, TK_BANG},
{TK_CLOBBER, TK_BANG}, {TK_CLOBBER, TK_BANG},
{TK_CLOBBER, SEPARATOR_OP}, {TK_CLOBBER, SEPARATOR_OP},
{TK_CLOBBER, NEWLINE_LIST}, {TK_CLOBBER, NEWLINE_LIST},
@ -165,6 +183,8 @@ t_stackmatch g_stackmatch[] =
{TK_CLOBBER, AND_OR_MAJOR}, {TK_CLOBBER, AND_OR_MAJOR},
{TK_IF, LINEBREAK}, {TK_IF, LINEBREAK},
{TK_IF, COMPLETE_COMMANDS},
{TK_IF, TK_BANG},
{TK_IF, TK_BANG}, {TK_IF, TK_BANG},
{TK_IF, SEPARATOR_OP}, {TK_IF, SEPARATOR_OP},
{TK_IF, NEWLINE_LIST}, {TK_IF, NEWLINE_LIST},
@ -199,6 +219,8 @@ t_stackmatch g_stackmatch[] =
{TK_DONE, COMPOUND_LIST}, {TK_DONE, COMPOUND_LIST},
{TK_DONE, END_COMMAND}, {TK_DONE, END_COMMAND},
{TK_CASE, LINEBREAK}, {TK_CASE, LINEBREAK},
{TK_CASE, COMPLETE_COMMANDS},
{TK_CASE, TK_BANG},
{TK_CASE, TK_BANG}, {TK_CASE, TK_BANG},
{TK_CASE, NEWLINE_LIST}, {TK_CASE, NEWLINE_LIST},
{TK_CASE, SEPARATOR_OP}, {TK_CASE, SEPARATOR_OP},
@ -208,6 +230,8 @@ t_stackmatch g_stackmatch[] =
{TK_ESAC, CASE_LIST_NS}, {TK_ESAC, CASE_LIST_NS},
{TK_ESAC, LINEBREAK}, {TK_ESAC, LINEBREAK},
{TK_WHILE, LINEBREAK}, {TK_WHILE, LINEBREAK},
{TK_WHILE, COMPLETE_COMMANDS},
{TK_WHILE, TK_BANG},
{TK_WHILE, TK_BANG}, {TK_WHILE, TK_BANG},
{TK_WHILE, SEPARATOR_OP}, {TK_WHILE, SEPARATOR_OP},
{TK_WHILE, NEWLINE_LIST}, {TK_WHILE, NEWLINE_LIST},
@ -220,6 +244,8 @@ t_stackmatch g_stackmatch[] =
{TK_WHILE, TK_THEN}, {TK_WHILE, TK_THEN},
{TK_WHILE, COMPLETE_CONDITION}, {TK_WHILE, COMPLETE_CONDITION},
{TK_UNTIL, LINEBREAK}, {TK_UNTIL, LINEBREAK},
{TK_UNTIL, COMPLETE_COMMANDS},
{TK_UNTIL, TK_BANG},
{TK_UNTIL, TK_BANG}, {TK_UNTIL, TK_BANG},
{TK_UNTIL, SEPARATOR_OP}, {TK_UNTIL, SEPARATOR_OP},
{TK_UNTIL, NEWLINE_LIST}, {TK_UNTIL, NEWLINE_LIST},
@ -232,17 +258,23 @@ t_stackmatch g_stackmatch[] =
{TK_UNTIL, TK_THEN}, {TK_UNTIL, TK_THEN},
{TK_UNTIL, COMPLETE_CONDITION}, {TK_UNTIL, COMPLETE_CONDITION},
{TK_FOR, LINEBREAK}, {TK_FOR, LINEBREAK},
{TK_FOR, COMPLETE_COMMANDS},
{TK_FOR, TK_BANG},
{TK_FOR, TK_BANG}, {TK_FOR, TK_BANG},
{TK_FOR, SEPARATOR_OP}, {TK_FOR, SEPARATOR_OP},
{TK_FOR, NEWLINE_LIST}, {TK_FOR, NEWLINE_LIST},
{TK_FOR, PIPE_SEMI_SEQUENCE}, {TK_FOR, PIPE_SEMI_SEQUENCE},
{TK_LBRACE, LINEBREAK}, {TK_LBRACE, LINEBREAK},
{TK_LBRACE, COMPLETE_COMMANDS},
{TK_LBRACE, TK_BANG},
{TK_LBRACE, TK_BANG}, {TK_LBRACE, TK_BANG},
{TK_LBRACE, SEPARATOR_OP}, {TK_LBRACE, SEPARATOR_OP},
{TK_LBRACE, NEWLINE_LIST}, {TK_LBRACE, NEWLINE_LIST},
{TK_LBRACE, PIPE_SEMI_SEQUENCE}, {TK_LBRACE, PIPE_SEMI_SEQUENCE},
{TK_RBRACE, COMPOUND_LIST}, {TK_RBRACE, COMPOUND_LIST},
{TK_BANG, LINEBREAK}, {TK_BANG, LINEBREAK},
{TK_BANG, COMPLETE_COMMANDS},
{TK_BANG, SEPARATOR_OP},
{TK_BANG, SEPARATOR_OP}, {TK_BANG, SEPARATOR_OP},
{TK_BANG, NEWLINE_LIST}, {TK_BANG, NEWLINE_LIST},
{TK_IN, LINEBREAK}, {TK_IN, LINEBREAK},
@ -260,6 +292,8 @@ t_stackmatch g_stackmatch[] =
{TK_PAREN_OPEN, FNAME}, {TK_PAREN_OPEN, FNAME},
{TK_PAREN_OPEN, CASE_LIST}, {TK_PAREN_OPEN, CASE_LIST},
{TK_PAREN_OPEN, LINEBREAK}, {TK_PAREN_OPEN, LINEBREAK},
{TK_PAREN_OPEN, COMPLETE_COMMANDS},
{TK_PAREN_OPEN, TK_BANG},
{TK_PAREN_OPEN, TK_BANG}, {TK_PAREN_OPEN, TK_BANG},
{TK_PAREN_OPEN, SEPARATOR_OP}, {TK_PAREN_OPEN, SEPARATOR_OP},
{TK_PAREN_OPEN, NEWLINE_LIST}, {TK_PAREN_OPEN, NEWLINE_LIST},
@ -271,6 +305,8 @@ t_stackmatch g_stackmatch[] =
{SEQUENTIAL_SEP, IN}, {SEQUENTIAL_SEP, IN},
{SEQUENTIAL_SEP, WORDLIST}, {SEQUENTIAL_SEP, WORDLIST},
{END_COMMAND, PIPE_SEMI_SEQUENCE}, {END_COMMAND, PIPE_SEMI_SEQUENCE},
{END_COMMAND, AND_OR_MAJOR},
{END_COMMAND, TK_WHILE},
{END_COMMAND, TK_WHILE}, {END_COMMAND, TK_WHILE},
{END_COMMAND, TK_UNTIL}, {END_COMMAND, TK_UNTIL},
{END_COMMAND, TK_DO}, {END_COMMAND, TK_DO},
@ -279,6 +315,8 @@ t_stackmatch g_stackmatch[] =
{END_COMMAND, TK_ELIF}, {END_COMMAND, TK_ELIF},
{END_COMMAND, TK_ELSE}, {END_COMMAND, TK_ELSE},
{END_COMMAND, LINEBREAK}, {END_COMMAND, LINEBREAK},
{END_COMMAND, COMPLETE_COMMANDS},
{END_COMMAND, COMPOUND_LIST},
{END_COMMAND, COMPOUND_LIST}, {END_COMMAND, COMPOUND_LIST},
{END_COMMAND, COMPLETE_CONDITION}, {END_COMMAND, COMPLETE_CONDITION},
{SEPARATOR, CMD_SUPERIOR}, {SEPARATOR, CMD_SUPERIOR},
@ -291,6 +329,8 @@ t_stackmatch g_stackmatch[] =
{SEPARATOR_OP, COMPOUND_LIST}, {SEPARATOR_OP, COMPOUND_LIST},
{SEPARATOR_OP, PIPE_SEMI_SEQUENCE}, {SEPARATOR_OP, PIPE_SEMI_SEQUENCE},
{LINEBREAK, TK_SEMI}, {LINEBREAK, TK_SEMI},
{LINEBREAK, END_COMMAND},
{LINEBREAK, SEPARATOR_OP},
{LINEBREAK, SEPARATOR_OP}, {LINEBREAK, SEPARATOR_OP},
{LINEBREAK, TK_PAREN_CLOSE}, {LINEBREAK, TK_PAREN_CLOSE},
{LINEBREAK, WORD}, {LINEBREAK, WORD},
@ -322,6 +362,8 @@ t_stackmatch g_stackmatch[] =
{NEWLINE_LIST, COMPLETE_COMMANDS}, {NEWLINE_LIST, COMPLETE_COMMANDS},
{NEWLINE_LIST, COMPLETE_CONDITION}, {NEWLINE_LIST, COMPLETE_CONDITION},
{NEWLINE_LIST, CONDITION}, {NEWLINE_LIST, CONDITION},
{NEWLINE_LIST, LINEBREAK},
{HERE_END, TK_DLESS},
{HERE_END, TK_DLESS}, {HERE_END, TK_DLESS},
{HERE_END, TK_DLESSDASH}, {HERE_END, TK_DLESSDASH},
{IO_HERE, TK_IO_NUMBER}, {IO_HERE, TK_IO_NUMBER},
@ -332,6 +374,8 @@ t_stackmatch g_stackmatch[] =
{IO_HERE, CMD_WORD}, {IO_HERE, CMD_WORD},
{IO_HERE, CMD_NAME}, {IO_HERE, CMD_NAME},
{IO_HERE, LINEBREAK}, {IO_HERE, LINEBREAK},
{IO_HERE, COMPLETE_COMMANDS},
{IO_HERE, TK_BANG},
{IO_HERE, TK_BANG}, {IO_HERE, TK_BANG},
{IO_HERE, SEPARATOR_OP}, {IO_HERE, SEPARATOR_OP},
{IO_HERE, NEWLINE_LIST}, {IO_HERE, NEWLINE_LIST},
@ -351,6 +395,8 @@ t_stackmatch g_stackmatch[] =
{IO_FILE, CMD_WORD}, {IO_FILE, CMD_WORD},
{IO_FILE, CMD_NAME}, {IO_FILE, CMD_NAME},
{IO_FILE, LINEBREAK}, {IO_FILE, LINEBREAK},
{IO_FILE, COMPLETE_COMMANDS},
{IO_FILE, TK_BANG},
{IO_FILE, TK_BANG}, {IO_FILE, TK_BANG},
{IO_FILE, SEPARATOR_OP}, {IO_FILE, SEPARATOR_OP},
{IO_FILE, NEWLINE_LIST}, {IO_FILE, NEWLINE_LIST},
@ -362,6 +408,8 @@ t_stackmatch g_stackmatch[] =
{IO_REDIRECT, CMD_WORD}, {IO_REDIRECT, CMD_WORD},
{IO_REDIRECT, CMD_NAME}, {IO_REDIRECT, CMD_NAME},
{IO_REDIRECT, LINEBREAK}, {IO_REDIRECT, LINEBREAK},
{IO_REDIRECT, COMPLETE_COMMANDS},
{IO_REDIRECT, TK_BANG},
{IO_REDIRECT, TK_BANG}, {IO_REDIRECT, TK_BANG},
{IO_REDIRECT, SEPARATOR_OP}, {IO_REDIRECT, SEPARATOR_OP},
{IO_REDIRECT, NEWLINE_LIST}, {IO_REDIRECT, NEWLINE_LIST},
@ -371,13 +419,17 @@ t_stackmatch g_stackmatch[] =
{CMD_SUFFIX, CMD_NAME}, {CMD_SUFFIX, CMD_NAME},
{CMD_SUFFIX, CMD_SUPERIOR}, {CMD_SUFFIX, CMD_SUPERIOR},
{CMD_PREFIX, LINEBREAK}, {CMD_PREFIX, LINEBREAK},
{CMD_PREFIX, COMPLETE_COMMANDS},
{CMD_PREFIX, TK_BANG},
{CMD_PREFIX, TK_BANG}, {CMD_PREFIX, TK_BANG},
{CMD_PREFIX, SEPARATOR_OP}, {CMD_PREFIX, SEPARATOR_OP},
{CMD_PREFIX, NEWLINE_LIST}, {CMD_PREFIX, NEWLINE_LIST},
{CMD_PREFIX, PIPE_SEMI_SEQUENCE}, {CMD_PREFIX, PIPE_SEMI_SEQUENCE},
{CMD_WORD, CMD_PREFIX}, {CMD_WORD, CMD_PREFIX},
{CMD_NAME, COMPLETE_COMMANDS},
{CMD_NAME, LINEBREAK}, {CMD_NAME, LINEBREAK},
{CMD_NAME, TK_BANG}, {CMD_NAME, TK_BANG},
{CMD_NAME, TK_BANG},
{CMD_NAME, SEPARATOR_OP}, {CMD_NAME, SEPARATOR_OP},
{CMD_NAME, NEWLINE_LIST}, {CMD_NAME, NEWLINE_LIST},
{CMD_NAME, PIPE_SEMI_SEQUENCE}, {CMD_NAME, PIPE_SEMI_SEQUENCE},
@ -401,7 +453,9 @@ t_stackmatch g_stackmatch[] =
{CMD_SUPERIOR, TK_ELSE}, {CMD_SUPERIOR, TK_ELSE},
{CMD_SUPERIOR, COMPOUND_LIST}, {CMD_SUPERIOR, COMPOUND_LIST},
{CMD_SUPERIOR, COMPLETE_CONDITION}, {CMD_SUPERIOR, COMPLETE_CONDITION},
{CMD_SUPERIOR, LINEBREAK,}, {CMD_SUPERIOR, LINEBREAK},
{CMD_SUPERIOR, COMPLETE_COMMANDS},
{CMD_SUPERIOR, TK_BANG},
{CMD_SUPERIOR, TK_BANG}, {CMD_SUPERIOR, TK_BANG},
{CMD_SUPERIOR, SEPARATOR_OP}, {CMD_SUPERIOR, SEPARATOR_OP},
{CMD_SUPERIOR, NEWLINE_LIST}, {CMD_SUPERIOR, NEWLINE_LIST},
@ -419,6 +473,8 @@ t_stackmatch g_stackmatch[] =
{SIMPLE_COMMAND, COMPOUND_LIST}, {SIMPLE_COMMAND, COMPOUND_LIST},
{SIMPLE_COMMAND, COMPLETE_CONDITION}, {SIMPLE_COMMAND, COMPLETE_CONDITION},
{SIMPLE_COMMAND, LINEBREAK}, {SIMPLE_COMMAND, LINEBREAK},
{SIMPLE_COMMAND, COMPLETE_COMMANDS},
{SIMPLE_COMMAND, TK_BANG},
{SIMPLE_COMMAND, TK_BANG}, {SIMPLE_COMMAND, TK_BANG},
{SIMPLE_COMMAND, SEPARATOR_OP}, {SIMPLE_COMMAND, SEPARATOR_OP},
{SIMPLE_COMMAND, NEWLINE_LIST}, {SIMPLE_COMMAND, NEWLINE_LIST},
@ -431,27 +487,39 @@ t_stackmatch g_stackmatch[] =
{LOOP, TK_WHILE}, {LOOP, TK_WHILE},
{LOOP, TK_UNTIL}, {LOOP, TK_UNTIL},
{CONDITION, LINEBREAK}, {CONDITION, LINEBREAK},
{CONDITION, COMPLETE_COMMANDS},
{CONDITION, COMPOUND_LIST},
{CONDITION, COMPOUND_LIST}, {CONDITION, COMPOUND_LIST},
{CONDITION, COMPLETE_CONDITION}, {CONDITION, COMPLETE_CONDITION},
{COMPLETE_CONDITION, LINEBREAK}, {COMPLETE_CONDITION, LINEBREAK},
{COMPLETE_CONDITION, COMPLETE_COMMANDS},
{COMPLETE_CONDITION, COMPLETE_CONDITION},
{COMPLETE_CONDITION, COMPLETE_CONDITION}, {COMPLETE_CONDITION, COMPLETE_CONDITION},
{BRACE_GROUP, LINEBREAK}, {BRACE_GROUP, LINEBREAK},
{BRACE_GROUP, COMPLETE_COMMANDS},
{BRACE_GROUP, TK_BANG},
{BRACE_GROUP, TK_BANG}, {BRACE_GROUP, TK_BANG},
{BRACE_GROUP, SEPARATOR_OP}, {BRACE_GROUP, SEPARATOR_OP},
{BRACE_GROUP, NEWLINE_LIST}, {BRACE_GROUP, NEWLINE_LIST},
{BRACE_GROUP, PIPE_SEMI_SEQUENCE}, {BRACE_GROUP, PIPE_SEMI_SEQUENCE},
{FNAME, LINEBREAK}, {FNAME, LINEBREAK},
{FNAME, COMPLETE_COMMANDS},
{FNAME, TK_BANG},
{FNAME, TK_BANG}, {FNAME, TK_BANG},
{FNAME, SEPARATOR_OP}, {FNAME, SEPARATOR_OP},
{FNAME, NEWLINE_LIST}, {FNAME, NEWLINE_LIST},
{FNAME, PIPE_SEMI_SEQUENCE}, {FNAME, PIPE_SEMI_SEQUENCE},
{FUNCTION_BODY, FUNC}, {FUNCTION_BODY, FUNC},
{FUNCTION_DEFINITION, LINEBREAK}, {FUNCTION_DEFINITION, LINEBREAK},
{FUNCTION_DEFINITION, COMPLETE_COMMANDS},
{FUNCTION_DEFINITION, TK_BANG},
{FUNCTION_DEFINITION, TK_BANG}, {FUNCTION_DEFINITION, TK_BANG},
{FUNCTION_DEFINITION, SEPARATOR_OP}, {FUNCTION_DEFINITION, SEPARATOR_OP},
{FUNCTION_DEFINITION, NEWLINE_LIST}, {FUNCTION_DEFINITION, NEWLINE_LIST},
{FUNCTION_DEFINITION, PIPE_SEMI_SEQUENCE}, {FUNCTION_DEFINITION, PIPE_SEMI_SEQUENCE},
{UNTIL_CLAUSE, LINEBREAK}, {UNTIL_CLAUSE, LINEBREAK},
{UNTIL_CLAUSE, COMPLETE_COMMANDS},
{UNTIL_CLAUSE, TK_BANG},
{UNTIL_CLAUSE, TK_BANG}, {UNTIL_CLAUSE, TK_BANG},
{UNTIL_CLAUSE, SEPARATOR_OP}, {UNTIL_CLAUSE, SEPARATOR_OP},
{UNTIL_CLAUSE, NEWLINE_LIST}, {UNTIL_CLAUSE, NEWLINE_LIST},
@ -466,6 +534,8 @@ t_stackmatch g_stackmatch[] =
{UNTIL_CLAUSE, COMPOUND_LIST}, {UNTIL_CLAUSE, COMPOUND_LIST},
{UNTIL_CLAUSE, COMPLETE_CONDITION}, {UNTIL_CLAUSE, COMPLETE_CONDITION},
{WHILE_CLAUSE, LINEBREAK}, {WHILE_CLAUSE, LINEBREAK},
{WHILE_CLAUSE, COMPLETE_COMMANDS},
{WHILE_CLAUSE, TK_BANG},
{WHILE_CLAUSE, TK_BANG}, {WHILE_CLAUSE, TK_BANG},
{WHILE_CLAUSE, SEPARATOR_OP}, {WHILE_CLAUSE, SEPARATOR_OP},
{WHILE_CLAUSE, NEWLINE_LIST}, {WHILE_CLAUSE, NEWLINE_LIST},
@ -482,6 +552,8 @@ t_stackmatch g_stackmatch[] =
// {ELSE_PART, COMPOUND_LIST}, // {ELSE_PART, COMPOUND_LIST},
// {ELSE_PART, COMPLETE_CONDITION}, // {ELSE_PART, COMPLETE_CONDITION},
{IF_CLAUSE, LINEBREAK}, {IF_CLAUSE, LINEBREAK},
{IF_CLAUSE, COMPLETE_COMMANDS},
{IF_CLAUSE, TK_BANG},
{IF_CLAUSE, TK_BANG}, {IF_CLAUSE, TK_BANG},
{IF_CLAUSE, SEPARATOR_OP}, {IF_CLAUSE, SEPARATOR_OP},
{IF_CLAUSE, NEWLINE_LIST}, {IF_CLAUSE, NEWLINE_LIST},
@ -508,6 +580,8 @@ t_stackmatch g_stackmatch[] =
{CASE_LIST, LINEBREAK}, {CASE_LIST, LINEBREAK},
{CASE_LIST_NS, LINEBREAK}, {CASE_LIST_NS, LINEBREAK},
{CASE_CLAUSE, LINEBREAK}, {CASE_CLAUSE, LINEBREAK},
{CASE_CLAUSE, COMPLETE_COMMANDS},
{CASE_CLAUSE, TK_BANG},
{CASE_CLAUSE, TK_BANG}, {CASE_CLAUSE, TK_BANG},
{CASE_CLAUSE, SEPARATOR_OP}, {CASE_CLAUSE, SEPARATOR_OP},
{CASE_CLAUSE, NEWLINE_LIST}, {CASE_CLAUSE, NEWLINE_LIST},
@ -516,11 +590,15 @@ t_stackmatch g_stackmatch[] =
{IN, LINEBREAK}, {IN, LINEBREAK},
{NAME, TK_FOR}, {NAME, TK_FOR},
{FOR_CLAUSE, LINEBREAK}, {FOR_CLAUSE, LINEBREAK},
{FOR_CLAUSE, COMPLETE_COMMANDS},
{FOR_CLAUSE, TK_BANG},
{FOR_CLAUSE, TK_BANG}, {FOR_CLAUSE, TK_BANG},
{FOR_CLAUSE, SEPARATOR_OP}, {FOR_CLAUSE, SEPARATOR_OP},
{FOR_CLAUSE, NEWLINE_LIST}, {FOR_CLAUSE, NEWLINE_LIST},
{FOR_CLAUSE, PIPE_SEMI_SEQUENCE}, {FOR_CLAUSE, PIPE_SEMI_SEQUENCE},
{TERM, LINEBREAK}, {TERM, LINEBREAK},
{TERM, COMPLETE_COMMANDS},
{COMPOUND_LIST, TK_DO},
{COMPOUND_LIST, TK_DO}, {COMPOUND_LIST, TK_DO},
{COMPOUND_LIST, TK_LBRACE}, {COMPOUND_LIST, TK_LBRACE},
{COMPOUND_LIST, TK_WHILE}, {COMPOUND_LIST, TK_WHILE},
@ -533,11 +611,15 @@ t_stackmatch g_stackmatch[] =
{COMPOUND_LIST, COMPOUND_LIST}, {COMPOUND_LIST, COMPOUND_LIST},
{COMPOUND_LIST, COMPLETE_CONDITION}, {COMPOUND_LIST, COMPLETE_CONDITION},
{SUBSHELL, LINEBREAK}, {SUBSHELL, LINEBREAK},
{SUBSHELL, COMPLETE_COMMANDS},
{SUBSHELL, TK_BANG},
{SUBSHELL, TK_BANG}, {SUBSHELL, TK_BANG},
{SUBSHELL, SEPARATOR_OP}, {SUBSHELL, SEPARATOR_OP},
{SUBSHELL, NEWLINE_LIST}, {SUBSHELL, NEWLINE_LIST},
{SUBSHELL, PIPE_SEMI_SEQUENCE}, {SUBSHELL, PIPE_SEMI_SEQUENCE},
{COMPOUND_COMMAND, LINEBREAK}, {COMPOUND_COMMAND, LINEBREAK},
{COMPOUND_COMMAND, COMPLETE_COMMANDS},
{COMPOUND_COMMAND, TK_BANG},
{COMPOUND_COMMAND, TK_BANG}, {COMPOUND_COMMAND, TK_BANG},
{COMPOUND_COMMAND, SEPARATOR_OP}, {COMPOUND_COMMAND, SEPARATOR_OP},
{COMPOUND_COMMAND, NEWLINE_LIST}, {COMPOUND_COMMAND, NEWLINE_LIST},
@ -555,6 +637,8 @@ t_stackmatch g_stackmatch[] =
{COMMAND, TK_WHILE}, {COMMAND, TK_WHILE},
{COMMAND, TK_UNTIL}, {COMMAND, TK_UNTIL},
{COMMAND, LINEBREAK}, {COMMAND, LINEBREAK},
{COMMAND, COMPLETE_COMMANDS},
{COMMAND, TK_DO},
{COMMAND, TK_DO}, {COMMAND, TK_DO},
{COMMAND, TK_IF}, {COMMAND, TK_IF},
{COMMAND, TK_ELIF}, {COMMAND, TK_ELIF},
@ -569,6 +653,8 @@ t_stackmatch g_stackmatch[] =
{COMMAND, AND_OR_MAJOR}, {COMMAND, AND_OR_MAJOR},
{AND_OR_MINOR, PIPE_SEMI_SEQUENCE}, {AND_OR_MINOR, PIPE_SEMI_SEQUENCE},
{AND_OR_MINOR, LINEBREAK}, {AND_OR_MINOR, LINEBREAK},
{AND_OR_MINOR, COMPLETE_COMMANDS},
{AND_OR_MINOR, AND_OR_MAJOR},
{AND_OR_MINOR, AND_OR_MAJOR}, {AND_OR_MINOR, AND_OR_MAJOR},
{PIPE_SEQUENCE, TK_WHILE}, {PIPE_SEQUENCE, TK_WHILE},
{PIPE_SEQUENCE, TK_UNTIL}, {PIPE_SEQUENCE, TK_UNTIL},
@ -580,6 +666,8 @@ t_stackmatch g_stackmatch[] =
{PIPE_SEQUENCE, COMPOUND_LIST}, {PIPE_SEQUENCE, COMPOUND_LIST},
{PIPE_SEQUENCE, COMPLETE_CONDITION}, {PIPE_SEQUENCE, COMPLETE_CONDITION},
{PIPE_SEQUENCE, LINEBREAK}, {PIPE_SEQUENCE, LINEBREAK},
{PIPE_SEQUENCE, COMPLETE_COMMANDS},
{PIPE_SEQUENCE, TK_BANG},
{PIPE_SEQUENCE, TK_BANG}, {PIPE_SEQUENCE, TK_BANG},
{PIPE_SEQUENCE, SEPARATOR_OP}, {PIPE_SEQUENCE, SEPARATOR_OP},
{PIPE_SEQUENCE, NEWLINE_LIST}, {PIPE_SEQUENCE, NEWLINE_LIST},
@ -594,6 +682,8 @@ t_stackmatch g_stackmatch[] =
{PIPE_SEMI_SEQUENCE, COMPOUND_LIST}, {PIPE_SEMI_SEQUENCE, COMPOUND_LIST},
{PIPE_SEMI_SEQUENCE, COMPLETE_CONDITION}, {PIPE_SEMI_SEQUENCE, COMPLETE_CONDITION},
{PIPE_SEMI_SEQUENCE, LINEBREAK}, {PIPE_SEMI_SEQUENCE, LINEBREAK},
{PIPE_SEMI_SEQUENCE, COMPLETE_COMMANDS},
{PIPE_SEMI_SEQUENCE, TK_BANG},
{PIPE_SEMI_SEQUENCE, TK_BANG}, {PIPE_SEMI_SEQUENCE, TK_BANG},
{PIPE_SEMI_SEQUENCE, SEPARATOR_OP}, {PIPE_SEMI_SEQUENCE, SEPARATOR_OP},
{PIPE_SEMI_SEQUENCE, NEWLINE_LIST}, {PIPE_SEMI_SEQUENCE, NEWLINE_LIST},
@ -608,10 +698,14 @@ t_stackmatch g_stackmatch[] =
{PIPELINE, COMPOUND_LIST}, {PIPELINE, COMPOUND_LIST},
{PIPELINE, COMPLETE_CONDITION}, {PIPELINE, COMPLETE_CONDITION},
{PIPELINE, LINEBREAK}, {PIPELINE, LINEBREAK},
{PIPELINE, COMPLETE_COMMANDS},
{PIPELINE, SEPARATOR_OP},
{PIPELINE, SEPARATOR_OP}, {PIPELINE, SEPARATOR_OP},
{PIPELINE, NEWLINE_LIST}, {PIPELINE, NEWLINE_LIST},
{PIPELINE, AND_OR_MAJOR}, {PIPELINE, AND_OR_MAJOR},
{AND_OR_MAJOR, LINEBREAK}, {AND_OR_MAJOR, LINEBREAK},
{AND_OR_MAJOR, COMPLETE_COMMANDS},
{AND_OR_MAJOR, AND_OR_MAJOR},
{AND_OR_MAJOR, AND_OR_MAJOR}, {AND_OR_MAJOR, AND_OR_MAJOR},
{AND_OR, TK_DO}, {AND_OR, TK_DO},
{AND_OR, TK_WHILE}, {AND_OR, TK_WHILE},
@ -623,13 +717,18 @@ t_stackmatch g_stackmatch[] =
{AND_OR, COMPOUND_LIST}, {AND_OR, COMPOUND_LIST},
{AND_OR, COMPLETE_CONDITION}, {AND_OR, COMPLETE_CONDITION},
{AND_OR, LINEBREAK}, {AND_OR, LINEBREAK},
{AND_OR, COMPLETE_COMMANDS},
{AND_OR, SEPARATOR_OP},
{AND_OR, SEPARATOR_OP}, {AND_OR, SEPARATOR_OP},
{AND_OR, NEWLINE_LIST}, {AND_OR, NEWLINE_LIST},
{LIST, LINEBREAK}, {LIST, LINEBREAK},
{LIST, COMPLETE_COMMANDS},
{LIST, NEWLINE_LIST}, {LIST, NEWLINE_LIST},
{COMPLETE_COMMAND, LINEBREAK}, {COMPLETE_COMMAND, LINEBREAK},
{COMPLETE_COMMAND, COMPLETE_COMMANDS},
{COMPLETE_COMMAND, NEWLINE_LIST}, {COMPLETE_COMMAND, NEWLINE_LIST},
{COMPLETE_COMMANDS, LINEBREAK}, {COMPLETE_COMMANDS, LINEBREAK},
{COMPLETE_COMMANDS, COMPLETE_COMMANDS},
{0, 0}, {0, 0},
}; };

View file

@ -21,7 +21,8 @@ static void insert_linebreak(t_list **lst)
static int end_instruction(t_sym sym) 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 (1);
return (0); 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) int ft_parse(t_btree **ast, t_list **token, t_parser *parser)
{ {
(void)ast; (void)ast;
if (parser->state == SUCCESS || parser->state == ERROR)
parser_init(parser);
while (*token) while (*token)
{ {
produce_sym(*parser->stack, parser->new_sym, 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); // build_tree(ast, token);
// btree_print(STDBUG, *ast, &ft_putast); // btree_print(STDBUG, *ast, &ft_putast);
if ((end_instruction(*parser->stack) && !(*token)->next)) if ((end_instruction(*parser->stack) && !(*token)->next))
/* || *parser->stack == PROGRAM) */
insert_linebreak(token); insert_linebreak(token);
else else
ft_lst_delif(token, (*token)->content, &ft_addrcmp, &token_free); ft_lst_delif(token, (*token)->content, &ft_addrcmp, &token_free);

View file

@ -46,6 +46,7 @@ t_prodmatch g_prodmatch[] =
{TK_WORD, TK_IN, PATTERN}, {TK_WORD, TK_IN, PATTERN},
{TK_WORD, CASE_LIST, PATTERN}, {TK_WORD, CASE_LIST, PATTERN},
{TK_WORD, TK_PAREN_OPEN, PATTERN}, {TK_WORD, TK_PAREN_OPEN, PATTERN},
{TK_WORD, COMPLETE_COMMANDS, CMD_NAME},
{TK_ASSIGNEMENT_WORD, LINEBREAK, CMD_PREFIX}, {TK_ASSIGNEMENT_WORD, LINEBREAK, CMD_PREFIX},
{TK_ASSIGNEMENT_WORD, TK_BANG, CMD_PREFIX}, {TK_ASSIGNEMENT_WORD, TK_BANG, CMD_PREFIX},
{TK_ASSIGNEMENT_WORD, SEPARATOR_OP, CMD_PREFIX}, {TK_ASSIGNEMENT_WORD, SEPARATOR_OP, CMD_PREFIX},

2
42sh/test.sh Normal file
View file

@ -0,0 +1,2 @@
> >
ls | cat