From af311380f49f690026f9cd3c5e2bd916da748613 Mon Sep 17 00:00:00 2001 From: AntoHesse Date: Sat, 4 Mar 2017 01:26:20 +0100 Subject: [PATCH] further streamile grammar around pipe --- 42sh/includes/types.h | 1 + 42sh/src/parser/aggregate_sym.c | 18 +++-- 42sh/src/parser/eval_sym.c | 134 ++++++++++++++++++-------------- 42sh/src/parser/produce_sym.c | 4 +- 42sh/src/parser/read_stack.c | 2 + 5 files changed, 92 insertions(+), 67 deletions(-) diff --git a/42sh/includes/types.h b/42sh/includes/types.h index 29e02f83..202fd14e 100644 --- a/42sh/includes/types.h +++ b/42sh/includes/types.h @@ -149,6 +149,7 @@ enum e_sym FUNC, PIPE_SEMI_SEQUENCE, CMD_SUPERIOR, + SEQUENCE, AND_OR_MAJOR, AND_OR_MINOR, END_COMMAND, diff --git a/42sh/src/parser/aggregate_sym.c b/42sh/src/parser/aggregate_sym.c index 0a47c660..764c1bd5 100644 --- a/42sh/src/parser/aggregate_sym.c +++ b/42sh/src/parser/aggregate_sym.c @@ -24,8 +24,9 @@ t_aggrematch g_aggrematch[] = {TK_PAREN_OPEN, CASE_LIST_NS, PATTERN_CASE, 0}, {TK_PAREN_OPEN, CMD_SUPERIOR, FUNC_NAME, CMD_SUPERIOR}, {TK_ASSIGNEMENT_WORD, CMD_PREFIX,CMD_PREFIX, 0}, - {TK_PIPE, CMD_SUPERIOR, SIMPLE_COMMAND, CMD_SUPERIOR}, - {TK_PIPE, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE}, + {TK_PIPE, CMD_SUPERIOR, SEQUENCE, CMD_SUPERIOR}, + {TK_PIPE, PIPE_SEMI_SEQUENCE, SEQUENCE, PIPE_SEMI_SEQUENCE}, +// {TK_PIPE, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE}, {TK_FI, ELSE_PART, IF_CLAUSE, TK_IF}, {TK_FI, COMPOUND_LIST, IF_CLAUSE, COMPLETE_CONDITION}, {TK_FI, COMPLETE_CONDITION, IF_CLAUSE, COMPLETE_CONDITION}, @@ -61,7 +62,6 @@ t_aggrematch g_aggrematch[] = //to abstract TK_ESAC {LINEBREAK, TK_PAREN_CLOSE, FUNC, FNAME}, //paren open - {LINEBREAK, TK_PIPE, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE}, {LINEBREAK, COMPLETE_COMMANDS, PROGRAM, LINEBREAK}, {LINEBREAK, CMD_SUPERIOR, SEPARATOR_OP, 0}, {LINEBREAK, PIPE_SEMI_SEQUENCE, PIPE_SEQUENCE, PIPE_SEMI_SEQUENCE}, @@ -126,7 +126,7 @@ t_aggrematch g_aggrematch[] = {REDIRECT_LIST, COMPOUND_COMMAND, COMPOUND_COMMAND, COMPOUND_COMMAND}, {CMD_SUFFIX, CMD_WORD, SIMPLE_COMMAND, CMD_PREFIX}, {CMD_SUFFIX, CMD_NAME, SIMPLE_COMMAND, CMD_NAME}, - {CMD_SUFFIX, CMD_SUPERIOR, SIMPLE_COMMAND, CMD_SUPERIOR}, + {CMD_SUFFIX, CMD_SUPERIOR, CMD_SUPERIOR, CMD_SUPERIOR}, //to abstract {CMD_PREFIX, LINEBREAK, SIMPLE_COMMAND, 0}, {CMD_PREFIX, TK_PAREN_OPEN, SIMPLE_COMMAND, 0}, @@ -157,8 +157,10 @@ t_aggrematch g_aggrematch[] = {CMD_NAME, CASE_LIST_NS, CMD_SUPERIOR, 0}, {CMD_NAME, COMPLETE_CONDITION, CMD_SUPERIOR, 0}, {CMD_NAME, TK_PIPE, CMD_SUPERIOR, 0}, - {CMD_NAME, PIPE_SEMI_SEQUENCE, CMD_SUPERIOR, 0}, + {CMD_NAME, SEQUENCE, CMD_SUPERIOR, 0}, +// {CMD_NAME, PIPE_SEMI_SEQUENCE, CMD_SUPERIOR, 0}, {CMD_NAME, AND_OR_MAJOR, CMD_SUPERIOR, 0}, + {CMD_SUPERIOR, SEQUENCE, PIPE_SEMI_SEQUENCE, SEQUENCE}, {SIMPLE_COMMAND, ALL, COMMAND, 0}, {DO_GROUP, NAME, FOR_CLAUSE, TK_FOR}, {DO_GROUP, IN, FOR_CLAUSE, TK_FOR}, @@ -197,7 +199,9 @@ t_aggrematch g_aggrematch[] = {AND_OR_MINOR, TK_LBRACE, 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, SEQUENCE, PIPE_SEMI_SEQUENCE, 0}, +// {COMMAND, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE}, +// watch {COMMAND, COMPOUND_LIST, PIPE_SEMI_SEQUENCE, 0}, {COMMAND, CASE_LIST_NS, PIPE_SEMI_SEQUENCE, 0}, {COMMAND, TK_WHILE, PIPE_SEMI_SEQUENCE, 0}, @@ -217,6 +221,7 @@ t_aggrematch g_aggrematch[] = {COMMAND, COMPLETE_COMMANDS, PIPE_SEMI_SEQUENCE, 0}, {COMMAND, AND_OR_MAJOR, PIPE_SEMI_SEQUENCE, 0}, {COMMAND, COMPLETE_CONDITION, PIPE_SEMI_SEQUENCE, 0}, + {END_COMMAND, SEQUENCE, PIPE_SEQUENCE, 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}, @@ -235,6 +240,7 @@ t_aggrematch g_aggrematch[] = {END_COMMAND, COMPLETE_CONDITION, PIPE_SEQUENCE, 0}, {END_COMMAND, COMPOUND_LIST, COMPOUND_LIST, COMPOUND_LIST}, {END_COMMAND, CASE_LIST_NS, CASE_LIST_NS, CASE_LIST_NS}, + {PIPE_SEMI_SEQUENCE, SEQUENCE, PIPE_SEMI_SEQUENCE, PIPE_SEMI_SEQUENCE}, {PIPE_SEQUENCE, TK_WHILE, PIPELINE, 0}, {PIPE_SEQUENCE, TK_UNTIL, PIPELINE, 0}, {PIPE_SEQUENCE, TK_BANG, PIPELINE, TK_BANG}, diff --git a/42sh/src/parser/eval_sym.c b/42sh/src/parser/eval_sym.c index 8add5de6..38303faf 100644 --- a/42sh/src/parser/eval_sym.c +++ b/42sh/src/parser/eval_sym.c @@ -37,6 +37,8 @@ t_stackmatch g_stackmatch[] = {TK_IO_NUMBER, SEPARATOR_OP}, {TK_IO_NUMBER, NEWLINE_LIST}, {TK_IO_NUMBER, PIPE_SEMI_SEQUENCE}, + {TK_IO_NUMBER, SEQUENCE}, +// watch! {TK_IO_NUMBER, CMD_SUPERIOR}, {TK_IO_NUMBER, AND_OR_MAJOR}, {TK_AND_IF, AND_OR}, @@ -49,6 +51,8 @@ t_stackmatch g_stackmatch[] = {TK_DSEMI, COMPOUND_LIST}, {TK_DSEMI, CASE_LIST_NS}, {TK_DSEMI, PIPE_SEMI_SEQUENCE}, + {TK_DSEMI, SEQUENCE}, +// watch! {TK_LESS, TK_IO_NUMBER}, {TK_LESS, REDIRECT_LIST}, {TK_LESS, CMD_SUFFIX}, @@ -63,6 +67,8 @@ t_stackmatch g_stackmatch[] = {TK_LESS, SEPARATOR_OP}, {TK_LESS, NEWLINE_LIST}, {TK_LESS, PIPE_SEMI_SEQUENCE}, + {TK_LESS, SEQUENCE}, +// watch ! {TK_LESS, CMD_SUPERIOR}, {TK_LESS, AND_OR_MAJOR}, {TK_GREAT, TK_IO_NUMBER}, @@ -79,6 +85,8 @@ t_stackmatch g_stackmatch[] = {TK_GREAT, SEPARATOR_OP}, {TK_GREAT, NEWLINE_LIST}, {TK_GREAT, PIPE_SEMI_SEQUENCE}, + {TK_GREAT, SEQUENCE}, +// watch ! //duplicate and extend {TK_GREAT, CMD_SUPERIOR}, {TK_GREAT, AND_OR_MAJOR}, @@ -97,6 +105,8 @@ t_stackmatch g_stackmatch[] = {TK_DLESS, SEPARATOR_OP}, {TK_DLESS, NEWLINE_LIST}, {TK_DLESS, PIPE_SEMI_SEQUENCE}, + {TK_DLESS, SEQUENCE}, +// watch ! {TK_DLESS, CMD_SUPERIOR}, {TK_DLESS, AND_OR_MAJOR}, @@ -115,6 +125,8 @@ t_stackmatch g_stackmatch[] = {TK_DLESSDASH, SEPARATOR_OP}, {TK_DLESSDASH, NEWLINE_LIST}, {TK_DLESSDASH, PIPE_SEMI_SEQUENCE}, + {TK_DLESSDASH, SEQUENCE}, +// watch ! {TK_DLESSDASH, CMD_SUPERIOR}, {TK_DLESSDASH, AND_OR_MAJOR}, @@ -133,6 +145,8 @@ t_stackmatch g_stackmatch[] = {TK_DGREAT, SEPARATOR_OP}, {TK_DGREAT, NEWLINE_LIST}, {TK_DGREAT, PIPE_SEMI_SEQUENCE}, + {TK_DGREAT, SEQUENCE}, +// watch ! {TK_DGREAT, CMD_SUPERIOR}, {TK_DGREAT, AND_OR_MAJOR}, @@ -151,6 +165,8 @@ t_stackmatch g_stackmatch[] = {TK_LESSAND, SEPARATOR_OP}, {TK_LESSAND, NEWLINE_LIST}, {TK_LESSAND, PIPE_SEMI_SEQUENCE}, + {TK_LESSAND, SEQUENCE}, +// watch ! {TK_LESSAND, CMD_SUPERIOR}, {TK_LESSAND, AND_OR_MAJOR}, @@ -169,44 +185,11 @@ t_stackmatch g_stackmatch[] = {TK_GREATAND, SEPARATOR_OP}, {TK_GREATAND, NEWLINE_LIST}, {TK_GREATAND, PIPE_SEMI_SEQUENCE}, + {TK_GREATAND, SEQUENCE}, +// watch ! {TK_GREATAND, CMD_SUPERIOR}, {TK_GREATAND, AND_OR_MAJOR}, - {TK_LESSGREAT, TK_IO_NUMBER}, - {TK_LESSGREAT, REDIRECT_LIST}, - {TK_LESSGREAT, CMD_SUFFIX}, - {TK_LESSGREAT, CMD_PREFIX}, - {TK_LESSGREAT, CMD_WORD}, - {TK_LESSGREAT, CMD_NAME}, - {TK_LESSGREAT, LINEBREAK}, - {TK_LESSGREAT, TK_PAREN_OPEN}, - {TK_LESSGREAT, TK_LBRACE}, - {TK_LESSGREAT, COMPLETE_COMMANDS}, - {TK_LESSGREAT, TK_BANG}, - {TK_LESSGREAT, TK_BANG}, - {TK_LESSGREAT, SEPARATOR_OP}, - {TK_LESSGREAT, NEWLINE_LIST}, - {TK_LESSGREAT, PIPE_SEMI_SEQUENCE}, - {TK_LESSGREAT, CMD_SUPERIOR}, - {TK_LESSGREAT, AND_OR_MAJOR}, - - {TK_CLOBBER, TK_IO_NUMBER}, - {TK_CLOBBER, REDIRECT_LIST}, - {TK_CLOBBER, CMD_SUFFIX}, - {TK_CLOBBER, CMD_PREFIX}, - {TK_CLOBBER, CMD_WORD}, - {TK_CLOBBER, CMD_NAME}, - {TK_CLOBBER, LINEBREAK}, - {TK_CLOBBER, TK_PAREN_OPEN}, - {TK_CLOBBER, TK_LBRACE}, - {TK_CLOBBER, COMPLETE_COMMANDS}, - {TK_CLOBBER, TK_BANG}, - {TK_CLOBBER, TK_BANG}, - {TK_CLOBBER, SEPARATOR_OP}, - {TK_CLOBBER, NEWLINE_LIST}, - {TK_CLOBBER, PIPE_SEMI_SEQUENCE}, - {TK_CLOBBER, CMD_SUPERIOR}, - {TK_CLOBBER, AND_OR_MAJOR}, {TK_IF, LINEBREAK}, {TK_IF, TK_PAREN_OPEN}, @@ -216,7 +199,8 @@ t_stackmatch g_stackmatch[] = {TK_IF, TK_BANG}, {TK_IF, SEPARATOR_OP}, {TK_IF, NEWLINE_LIST}, - {TK_IF, PIPE_SEMI_SEQUENCE}, + {TK_IF, SEQUENCE}, +// watch ! {TK_IF, TK_WHILE}, {TK_IF, TK_UNTIL}, {TK_IF, TK_IF}, @@ -267,7 +251,8 @@ t_stackmatch g_stackmatch[] = {TK_CASE, COMPOUND_LIST}, {TK_CASE, NEWLINE_LIST}, {TK_CASE, SEPARATOR_OP}, - {TK_CASE, PIPE_SEMI_SEQUENCE}, + {TK_CASE, SEQUENCE}, +// watch ! {TK_IN, TK_WORD}, {TK_IN, NAME}, {TK_ESAC, CASE_LIST_NS}, @@ -280,7 +265,8 @@ t_stackmatch g_stackmatch[] = {TK_WHILE, TK_BANG}, {TK_WHILE, SEPARATOR_OP}, {TK_WHILE, NEWLINE_LIST}, - {TK_WHILE, PIPE_SEMI_SEQUENCE}, + {TK_WHILE, SEQUENCE}, +// watch ! {TK_WHILE, TK_DO}, {TK_WHILE, TK_PAREN_CLOSE}, {TK_WHILE, TK_WHILE}, @@ -299,7 +285,8 @@ t_stackmatch g_stackmatch[] = {TK_UNTIL, TK_BANG}, {TK_UNTIL, SEPARATOR_OP}, {TK_UNTIL, NEWLINE_LIST}, - {TK_UNTIL, PIPE_SEMI_SEQUENCE}, + {TK_UNTIL, SEQUENCE}, +// watch ! {TK_UNTIL, TK_DO}, {TK_UNTIL, TK_PAREN_CLOSE}, {TK_UNTIL, TK_WHILE}, @@ -319,7 +306,8 @@ t_stackmatch g_stackmatch[] = {TK_FOR, TK_BANG}, {TK_FOR, SEPARATOR_OP}, {TK_FOR, NEWLINE_LIST}, - {TK_FOR, PIPE_SEMI_SEQUENCE}, + {TK_FOR, SEQUENCE}, +// watch ! {TK_FOR, TK_DO}, {TK_FOR, TK_PAREN_CLOSE}, {TK_FOR, TK_WHILE}, @@ -337,7 +325,8 @@ t_stackmatch g_stackmatch[] = {TK_LBRACE, TK_BANG}, {TK_LBRACE, SEPARATOR_OP}, {TK_LBRACE, NEWLINE_LIST}, - {TK_LBRACE, PIPE_SEMI_SEQUENCE}, + {TK_LBRACE, SEQUENCE}, +// watch ! {TK_LBRACE, AND_OR_MAJOR}, {TK_LBRACE, TK_WHILE}, {TK_LBRACE, TK_UNTIL}, @@ -402,7 +391,8 @@ t_stackmatch g_stackmatch[] = {TK_PAREN_OPEN, TK_BANG}, {TK_PAREN_OPEN, SEPARATOR_OP}, {TK_PAREN_OPEN, NEWLINE_LIST}, - {TK_PAREN_OPEN, PIPE_SEMI_SEQUENCE}, + {TK_PAREN_OPEN, SEQUENCE}, +// watch ! {TK_PAREN_OPEN, AND_OR_MAJOR}, {TK_PAREN_OPEN, TK_WHILE}, {TK_PAREN_OPEN, TK_UNTIL}, @@ -420,6 +410,7 @@ t_stackmatch g_stackmatch[] = {SEQUENTIAL_SEP, NAME}, {SEQUENTIAL_SEP, IN}, {SEQUENTIAL_SEP, WORDLIST}, + {END_COMMAND, SEQUENCE}, {END_COMMAND, PIPE_SEMI_SEQUENCE}, {END_COMMAND, AND_OR_MAJOR}, {END_COMMAND, TK_WHILE}, @@ -532,6 +523,8 @@ t_stackmatch g_stackmatch[] = {IO_HERE, SEPARATOR_OP}, {IO_HERE, NEWLINE_LIST}, {IO_HERE, PIPE_SEMI_SEQUENCE}, + {IO_HERE, SEQUENCE}, +// watch ! {FILENAME, TK_LESS}, {FILENAME, TK_LESSAND}, {FILENAME, TK_GREAT}, @@ -553,6 +546,8 @@ t_stackmatch g_stackmatch[] = {IO_FILE, SEPARATOR_OP}, {IO_FILE, NEWLINE_LIST}, {IO_FILE, PIPE_SEMI_SEQUENCE}, + {IO_FILE, SEQUENCE}, +// watch ! {IO_REDIRECT, REDIRECT_LIST}, {IO_REDIRECT, CMD_SUPERIOR}, {IO_REDIRECT, CMD_SUFFIX}, @@ -568,6 +563,8 @@ t_stackmatch g_stackmatch[] = {IO_REDIRECT, SEPARATOR_OP}, {IO_REDIRECT, NEWLINE_LIST}, {IO_REDIRECT, PIPE_SEMI_SEQUENCE}, + {IO_REDIRECT, SEQUENCE}, +// watch !/ {REDIRECT_LIST, COMPOUND_COMMAND}, {CMD_SUFFIX, CMD_WORD}, {CMD_SUFFIX, CMD_NAME}, @@ -580,7 +577,8 @@ t_stackmatch g_stackmatch[] = {CMD_PREFIX, TK_BANG}, {CMD_PREFIX, SEPARATOR_OP}, {CMD_PREFIX, NEWLINE_LIST}, - {CMD_PREFIX, PIPE_SEMI_SEQUENCE}, + {CMD_PREFIX, SEQUENCE}, +// watch ! {CMD_WORD, CMD_PREFIX}, {CMD_NAME, COMPLETE_COMMANDS}, {CMD_NAME, LINEBREAK}, @@ -590,7 +588,8 @@ t_stackmatch g_stackmatch[] = {CMD_NAME, TK_BANG}, {CMD_NAME, SEPARATOR_OP}, {CMD_NAME, NEWLINE_LIST}, - {CMD_NAME, PIPE_SEMI_SEQUENCE}, + {CMD_NAME, SEQUENCE}, +// watch ! {CMD_NAME, AND_OR_MAJOR}, {CMD_NAME, TK_WHILE}, {CMD_NAME, TK_UNTIL}, @@ -624,7 +623,8 @@ t_stackmatch g_stackmatch[] = {CMD_SUPERIOR, SEPARATOR_OP}, {CMD_SUPERIOR, NEWLINE_LIST}, {CMD_SUPERIOR, TK_PIPE}, - {CMD_SUPERIOR, PIPE_SEMI_SEQUENCE}, + {CMD_SUPERIOR, SEQUENCE}, +// watch ! {CMD_SUPERIOR, AND_OR_MAJOR}, {SIMPLE_COMMAND, TK_WHILE}, @@ -646,7 +646,8 @@ t_stackmatch g_stackmatch[] = {SIMPLE_COMMAND, TK_BANG}, {SIMPLE_COMMAND, SEPARATOR_OP}, {SIMPLE_COMMAND, NEWLINE_LIST}, - {SIMPLE_COMMAND, PIPE_SEMI_SEQUENCE}, + {SIMPLE_COMMAND, SEQUENCE}, +// watch ! {SIMPLE_COMMAND, AND_OR_MAJOR}, {DO_GROUP, CMD_SUPERIOR}, {DO_GROUP, COMPOUND_LIST}, @@ -675,7 +676,8 @@ t_stackmatch g_stackmatch[] = {BRACE_GROUP, TK_BANG}, {BRACE_GROUP, SEPARATOR_OP}, {BRACE_GROUP, NEWLINE_LIST}, - {BRACE_GROUP, PIPE_SEMI_SEQUENCE}, + {BRACE_GROUP, SEQUENCE}, +// watch ! {FNAME, LINEBREAK}, {FNAME, TK_PAREN_OPEN}, {FNAME, TK_LBRACE}, @@ -684,7 +686,8 @@ t_stackmatch g_stackmatch[] = {FNAME, TK_BANG}, {FNAME, SEPARATOR_OP}, {FNAME, NEWLINE_LIST}, - {FNAME, PIPE_SEMI_SEQUENCE}, + {FNAME, SEQUENCE}, +// watch ! {FUNCTION_BODY, FUNC}, {FUNCTION_DEFINITION, LINEBREAK}, {FUNCTION_DEFINITION, TK_PAREN_OPEN}, @@ -694,7 +697,8 @@ t_stackmatch g_stackmatch[] = {FUNCTION_DEFINITION, TK_BANG}, {FUNCTION_DEFINITION, SEPARATOR_OP}, {FUNCTION_DEFINITION, NEWLINE_LIST}, - {FUNCTION_DEFINITION, PIPE_SEMI_SEQUENCE}, + {FUNCTION_DEFINITION, SEQUENCE}, +// watch ! {UNTIL_CLAUSE, LINEBREAK}, {UNTIL_CLAUSE, TK_PAREN_OPEN}, {UNTIL_CLAUSE, TK_LBRACE}, @@ -702,7 +706,8 @@ t_stackmatch g_stackmatch[] = {UNTIL_CLAUSE, TK_BANG}, {UNTIL_CLAUSE, SEPARATOR_OP}, {UNTIL_CLAUSE, NEWLINE_LIST}, - {UNTIL_CLAUSE, PIPE_SEMI_SEQUENCE}, + {UNTIL_CLAUSE, SEQUENCE}, +// watch ! {UNTIL_CLAUSE, TK_DO}, {UNTIL_CLAUSE, TK_PAREN_CLOSE}, {UNTIL_CLAUSE, TK_WHILE}, @@ -720,7 +725,8 @@ t_stackmatch g_stackmatch[] = {WHILE_CLAUSE, TK_BANG}, {WHILE_CLAUSE, SEPARATOR_OP}, {WHILE_CLAUSE, NEWLINE_LIST}, - {WHILE_CLAUSE, PIPE_SEMI_SEQUENCE}, + {WHILE_CLAUSE, SEQUENCE}, +// watch ! {WHILE_CLAUSE, TK_DO}, {WHILE_CLAUSE, TK_PAREN_CLOSE}, {WHILE_CLAUSE, TK_WHILE}, @@ -742,7 +748,8 @@ t_stackmatch g_stackmatch[] = {IF_CLAUSE, TK_BANG}, {IF_CLAUSE, SEPARATOR_OP}, {IF_CLAUSE, NEWLINE_LIST}, - {IF_CLAUSE, PIPE_SEMI_SEQUENCE}, + {IF_CLAUSE, SEQUENCE}, +// watch ! {IF_CLAUSE, TK_DO}, {IF_CLAUSE, TK_PAREN_CLOSE}, {IF_CLAUSE, TK_WHILE}, @@ -763,7 +770,8 @@ t_stackmatch g_stackmatch[] = {BRACE_CLAUSE, TK_BANG}, {BRACE_CLAUSE, SEPARATOR_OP}, {BRACE_CLAUSE, NEWLINE_LIST}, - {BRACE_CLAUSE, PIPE_SEMI_SEQUENCE}, + {BRACE_CLAUSE, SEQUENCE}, +// watch ! {BRACE_CLAUSE, TK_DO}, {BRACE_CLAUSE, TK_PAREN_CLOSE}, {BRACE_CLAUSE, TK_WHILE}, @@ -788,7 +796,8 @@ t_stackmatch g_stackmatch[] = {CASE_CLAUSE, TK_BANG}, {CASE_CLAUSE, SEPARATOR_OP}, {CASE_CLAUSE, NEWLINE_LIST}, - {CASE_CLAUSE, PIPE_SEMI_SEQUENCE}, + {CASE_CLAUSE, SEQUENCE}, +// watch ! {CASE_CLAUSE, TK_PAREN_CLOSE}, {CASE_CLAUSE, CASE_LIST_NS}, {CASE_CLAUSE, TK_DO}, @@ -815,7 +824,8 @@ t_stackmatch g_stackmatch[] = {FOR_CLAUSE, TK_BANG}, {FOR_CLAUSE, SEPARATOR_OP}, {FOR_CLAUSE, NEWLINE_LIST}, - {FOR_CLAUSE, PIPE_SEMI_SEQUENCE}, + {FOR_CLAUSE, SEQUENCE}, +// watch ! {FOR_CLAUSE, TK_DO}, {FOR_CLAUSE, TK_PAREN_CLOSE}, {FOR_CLAUSE, TK_WHILE}, @@ -849,10 +859,10 @@ t_stackmatch g_stackmatch[] = {SUBSHELL, TK_BANG}, {SUBSHELL, SEPARATOR_OP}, {SUBSHELL, NEWLINE_LIST}, - {SUBSHELL, PIPE_SEMI_SEQUENCE}, + {SUBSHELL, SEQUENCE}, +// watch ! {SUBSHELL, SEPARATOR_OP}, {SUBSHELL, NEWLINE_LIST}, - {SUBSHELL, PIPE_SEMI_SEQUENCE}, {SUBSHELL, TK_DO}, {SUBSHELL, TK_PAREN_CLOSE}, {SUBSHELL, TK_WHILE}, @@ -873,7 +883,8 @@ t_stackmatch g_stackmatch[] = {COMPOUND_COMMAND, TK_BANG}, {COMPOUND_COMMAND, SEPARATOR_OP}, {COMPOUND_COMMAND, NEWLINE_LIST}, - {COMPOUND_COMMAND, PIPE_SEMI_SEQUENCE}, + {COMPOUND_COMMAND, SEQUENCE}, +// watch ! {COMPOUND_COMMAND, FUNC}, {COMPOUND_COMMAND, TK_DO}, {COMPOUND_COMMAND, TK_PAREN_CLOSE}, @@ -905,9 +916,10 @@ t_stackmatch g_stackmatch[] = {COMMAND, TK_BANG}, {COMMAND, SEPARATOR_OP}, {COMMAND, NEWLINE_LIST}, - {COMMAND, PIPE_SEMI_SEQUENCE}, + {COMMAND, SEQUENCE}, {COMMAND, AND_OR_MAJOR}, - {AND_OR_MINOR, PIPE_SEMI_SEQUENCE}, + {AND_OR_MINOR, SEQUENCE}, +// watch ! {AND_OR_MINOR, LINEBREAK}, {AND_OR_MINOR, TK_PAREN_OPEN}, {AND_OR_MINOR, TK_LBRACE}, @@ -953,6 +965,8 @@ t_stackmatch g_stackmatch[] = {PIPE_SEMI_SEQUENCE, SEPARATOR_OP}, {PIPE_SEMI_SEQUENCE, NEWLINE_LIST}, {PIPE_SEMI_SEQUENCE, AND_OR_MAJOR}, + {SEQUENCE, PIPE_SEMI_SEQUENCE}, + {SEQUENCE, SEQUENCE}, {PIPELINE, TK_WHILE}, {PIPELINE, TK_UNTIL}, {PIPELINE, TK_DO}, diff --git a/42sh/src/parser/produce_sym.c b/42sh/src/parser/produce_sym.c index f7e07c32..ed3e0fca 100644 --- a/42sh/src/parser/produce_sym.c +++ b/42sh/src/parser/produce_sym.c @@ -26,6 +26,7 @@ t_prodmatch g_prodmatch[] = {TK_WORD, CMD_WORD, CMD_SUFFIX}, {TK_WORD, CMD_NAME, CMD_SUFFIX}, {TK_WORD, CMD_SUPERIOR, CMD_SUFFIX}, + {TK_WORD, PIPE_SEMI_SEQUENCE, CMD_SUFFIX}, {TK_WORD, LINEBREAK, CMD_NAME}, {TK_WORD, TK_PIPE, CMD_NAME}, {TK_WORD, AND_OR, CMD_NAME}, @@ -43,7 +44,7 @@ t_prodmatch g_prodmatch[] = {TK_WORD, COMPLETE_CONDITION, CMD_NAME}, {TK_WORD, NEWLINE_LIST, CMD_NAME}, {TK_WORD, TK_BANG, CMD_NAME}, - {TK_WORD, PIPE_SEMI_SEQUENCE, CMD_NAME}, + {TK_WORD, SEQUENCE, CMD_NAME}, {TK_WORD, SEPARATOR_OP, CMD_NAME}, {TK_WORD, TK_PAREN_OPEN, CMD_NAME}, {TK_WORD, TK_LBRACE, CMD_NAME}, @@ -81,6 +82,7 @@ t_prodmatch g_prodmatch[] = {TK_NEWLINE, TK_LBRACE, NEWLINE_LIST}, {TK_NEWLINE, CMD_SUPERIOR, LINEBREAK}, {TK_NEWLINE, PIPE_SEMI_SEQUENCE, LINEBREAK}, + {TK_NEWLINE, SEQUENCE, LINEBREAK}, {TK_NEWLINE, CASE_LIST_NS, NEWLINE_LIST}, {TK_NEWLINE, COMPOUND_LIST, NEWLINE_LIST}, {TK_NEWLINE, COMPLETE_CONDITION, NEWLINE_LIST}, diff --git a/42sh/src/parser/read_stack.c b/42sh/src/parser/read_stack.c index 03af345b..d16bac78 100644 --- a/42sh/src/parser/read_stack.c +++ b/42sh/src/parser/read_stack.c @@ -14,6 +14,8 @@ char *read_state(t_sym current) { + if (current == SEQUENCE) + return ("SEQUENCE"); if (current == LINEBREAK) return ("LINEBREAK"); if (current == CLOSE_LIST)