moaaaar grammar
This commit is contained in:
parent
80a5a8b1e2
commit
a07ed6eea7
8 changed files with 133 additions and 33 deletions
BIN
42sh/includes/.parser.h.swn
Normal file
BIN
42sh/includes/.parser.h.swn
Normal file
Binary file not shown.
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
/* By: jhalford <jack@crans.org> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2016/12/01 12:15:54 by jhalford #+# #+# */
|
/* Created: 2016/12/01 12:15:54 by jhalford #+# #+# */
|
||||||
/* Updated: 2017/02/10 15:58:05 by ariard ### ########.fr */
|
/* Updated: 2017/02/12 17:41:16 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -203,8 +203,8 @@ extern t_prodmatch g_prodmatch[];
|
||||||
|
|
||||||
struct s_stackmatch
|
struct s_stackmatch
|
||||||
{
|
{
|
||||||
t_sym under;
|
|
||||||
t_sym top;
|
t_sym top;
|
||||||
|
t_sym under;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct s_stackmatch t_stackmatch;
|
typedef struct s_stackmatch t_stackmatch;
|
||||||
|
|
|
||||||
BIN
42sh/src/parser/.eval_sym.c.swm
Normal file
BIN
42sh/src/parser/.eval_sym.c.swm
Normal file
Binary file not shown.
BIN
42sh/src/parser/.eval_sym.c.swn
Normal file
BIN
42sh/src/parser/.eval_sym.c.swn
Normal file
Binary file not shown.
BIN
42sh/src/parser/.produce_sym.c.swn
Normal file
BIN
42sh/src/parser/.produce_sym.c.swn
Normal file
Binary file not shown.
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/09 17:39:18 by ariard #+# #+# */
|
/* Created: 2017/02/09 17:39:18 by ariard #+# #+# */
|
||||||
/* Updated: 2017/02/09 20:19:29 by ariard ### ########.fr */
|
/* Updated: 2017/02/12 18:47:00 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -14,25 +14,26 @@
|
||||||
|
|
||||||
t_aggrematch g_aggrematch[] =
|
t_aggrematch g_aggrematch[] =
|
||||||
{
|
{
|
||||||
{CMD_SUFFIX, TK_WORD, CMD_SUFFIX},
|
{TK_WORD, CMD_SUFFIX, CMD_SUFFIX, ALL, 0},
|
||||||
{TK_PIPE, TK_WORD, PATTERN},
|
{TK_WORD, TK_PIPE, PATTERN, ALL, 0},
|
||||||
{WORDLIST, TK_WORD, WORDLIST},
|
{TK_WORD, WORDLIST, WORDLIST, ALL, 0},
|
||||||
|
|
||||||
{CMD_PREFIX, TK_ASSIGNEMENT_WORD, CMD_PREFIX},
|
{TK_ASSIGNEMENT_WORD, CMD_PREFIX,CMD_PREFIX, ALL, 0},
|
||||||
|
|
||||||
{ELSE_PART, TK_FI, IF_CLAUSE},
|
{TK_FI, ELSE_PART, IF_CLAUSE, ALL, tant que IF},
|
||||||
{COMPOUND_LIST, TK_FI, IF_CLAUSE},
|
{TK_FI, COMPOUND_LIST, IF_CLAUSE, ALL, tant que IF},
|
||||||
|
|
||||||
{COMPOUND_LIST, TK_DONE, DO_GROUP},
|
{TK_DONE, COMPOUND_LIST, DO_GROUP, ALL, tant DO},
|
||||||
{COMPOUND_LIST, TK_RBRACE, BRACE_GROUP},
|
|
||||||
|
|
||||||
{TK_PAREN_CLOSE, COMPOUND_LIST, SUBSHELL, 2},
|
{TK_RBRACE, COMPOUND_LIST, BRACE_GROUP, ALL tant que LBRACE},
|
||||||
|
|
||||||
|
{TK_PAREN_CLOSE, COMPOUND_LIST, SUBSHELL, ALL, tant que TK_PAREN_OPEN},
|
||||||
|
|
||||||
//watch this
|
//watch this
|
||||||
{SEPARATOR, COMPOUND_LIST, COMPOUND_LIST, 1},
|
{SEPARATOR, COMPOUND_LIST, COMPOUND_LIST, ALL, 0},
|
||||||
|
|
||||||
{LINEBREAK, TK_SEMI, SEPARATOR_OP, 1},
|
{LINEBREAK, TK_SEMI, SEPARATOR_OP, ALL, tant que TK_SEMI},
|
||||||
//prediction one
|
//do one
|
||||||
{LINEBREAK, TK_PAREN_CLOSE, TK_ESAC, CASE_ITEM_NS, tant que pattern ou '('},
|
{LINEBREAK, TK_PAREN_CLOSE, TK_ESAC, CASE_ITEM_NS, tant que pattern ou '('},
|
||||||
|
|
||||||
{NEWLINE_LIST, NEWLINE_LIST, NEWLINE_LIST, ALL, tant que newline},
|
{NEWLINE_LIST, NEWLINE_LIST, NEWLINE_LIST, ALL, tant que newline},
|
||||||
|
|
@ -42,7 +43,48 @@ t_aggrematch g_aggrematch[] =
|
||||||
{NEWLINE_LIST, TERM, SEPARATOR, ALL, 0},
|
{NEWLINE_LIST, TERM, SEPARATOR, ALL, 0},
|
||||||
{NEWLINE_LIST, COMPOUND_LIST, SEPARATOR, ALL, 0},
|
{NEWLINE_LIST, COMPOUND_LIST, SEPARATOR, ALL, 0},
|
||||||
|
|
||||||
|
{IO_HERE, ALL, IO_REDIRECT, ALL, TK_IO_NUMBER},
|
||||||
|
|
||||||
|
{FILENAME, TK_LESS, IO_FILE, ALL, TK_LESS},
|
||||||
|
{FILENAME, TK_LESSAND, IO_FILE, ALL, TK_LESSAND},
|
||||||
|
{FILENAME, TK_GREAT, IO_FILE, ALL, TK_GREAT},
|
||||||
|
{FILENAME, TK_GREATAND, IO_FILE, ALL, TK_GREATAND},
|
||||||
|
{FILENAME, TK_DGREAT, IO_FILE, ALL, TK_DGREAT},
|
||||||
|
{FILENAME, TK_LESGREAT, IO_FILE, ALL, TK_LESSGREAT},
|
||||||
|
{FILENAME, TK_CLOBBER, IO_FILE, ALL, TK_CLOBBER},
|
||||||
|
|
||||||
|
{IO_FILE, ALL, IO_REDIRECT, ALL, TK_IO_NUMBER},
|
||||||
|
|
||||||
|
{IO_REDIRECT, COMPOUND_COMMAND, REDIRECT_LIST, ALL, REDIRECT_LIST},
|
||||||
|
{IO_REDIRECT, CMD_SUFFIX, CMD_SUFFIX, ALL, CMD_SUFFIX},
|
||||||
|
{IO_REDIRECT, CMD_NAME, CMD_SUFFIX, ALL, 0},
|
||||||
|
{IO_REDIRECT, CMD_WORD, CMD_SUFFIX, ALL, 0},
|
||||||
|
{IO_REDIRECT, CMD_PREFIX, CMD_PREFIX, ALL, CMD_PREFIX},
|
||||||
|
{IO_REDIRECT, LINEBREAK, CMD_PREFIX, ALL, 0},
|
||||||
|
{IO_REDIRECT, TK_BANG, CMD_PREFIX, ALL, 0},
|
||||||
|
{IO_REDIRECT, SEPARATOR_OP, CMD_PREFIX, ALL, 0},
|
||||||
|
{IO_REDIRECT, NEWLINE_LIST, CMD_PREFIX, ALL, 0},
|
||||||
|
|
||||||
|
{REDIRECT_LIST, COMPOUND_COMMAND, COMPOUND_COMMAND, ALL, COMPOUND_COMMAND},
|
||||||
|
|
||||||
|
{CMD_SUFFIX, CMD_WORD, SIMPLE_COMMAND, ALL, CMD_PREFIX},
|
||||||
|
{CMD_SUFFIX, CMD_NAME, SIMPLE_COMMAND, ALL, CMD_NAME},
|
||||||
|
|
||||||
|
{CMD_PREFIX, LINEBREAK, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0},
|
||||||
|
{CMD_PREFIX, TK_BANG, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0},
|
||||||
|
{CMD_PREFIX, SEPARATOR_OP, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0},
|
||||||
|
{CMD_PREFIX, NEWLINE_LIST, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0},
|
||||||
|
|
||||||
|
{CMD_WORD, CMD_PREFIX, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP,
|
||||||
|
CMD_PREFIX},
|
||||||
|
|
||||||
|
{CMD_NAME, LINEBREAK, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0},
|
||||||
|
{CMD_NAME, TK_BANG, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0},
|
||||||
|
{CMD_NAME, SEPARATOR_OP, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0},
|
||||||
|
{CMD_NAME, NEWLINE_LIST, SIMPLE_COMMAND, TK_NEWLINE ou TK_SEMI ou TK_AMP, 0},
|
||||||
|
|
||||||
{0, 0, 0},
|
{0, 0, 0},
|
||||||
|
}
|
||||||
|
|
||||||
int aggregate_sym(t_sym **stack, t_sym *new_sym)
|
int aggregate_sym(t_sym **stack, t_sym *new_sym)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/09 16:26:30 by ariard #+# #+# */
|
/* Created: 2017/02/09 16:26:30 by ariard #+# #+# */
|
||||||
/* Updated: 2017/02/10 16:57:46 by ariard ### ########.fr */
|
/* Updated: 2017/02/12 18:46:15 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
@ -14,22 +14,22 @@
|
||||||
|
|
||||||
t_stackmatch g_stackmatch[] =
|
t_stackmatch g_stackmatch[] =
|
||||||
{
|
{
|
||||||
{CMD_SUFFIX, TK_WORD},
|
{TK_WORD, CMD_SUFFIX},
|
||||||
{TK_PIPE, TK_WORD},
|
{TK_WORD, TK_PIPE},
|
||||||
{CASE, TK_WORD},
|
{TK_WORD, CASE},
|
||||||
{WORDLIST, TK_WORD},
|
{TK_WORD, WORDLIST},
|
||||||
|
|
||||||
{CMD_PREFIX, TK_ASSIGNEMENT_WORD},
|
{TK_ASSIGNEMENT_WORD, CMD_PREFIX},
|
||||||
|
|
||||||
{REDIRECT_LIST, TK_IO_NUMBER},
|
{TK_IO_NUMBER, REDIRECT_LIST},
|
||||||
{CMD_SUFFIX, TK_IO_NUMBER},
|
{TK_IO_NUMBER, CMD_SUFFIX},
|
||||||
{CMD_PREFIX, TK_IO_NUMBER},
|
{TK_IO_NUMBER, CMD_PREFIX},
|
||||||
{CMD_NAME, TK_IO_NUMBER},
|
{TK_IO_NUMBER, CMD_NAME},
|
||||||
{CMD_WORD, TK_IO_NUMBER},
|
{TK_IO_NUMBER, CMD_WORD},
|
||||||
{LINEBREAK, TK_IO_NUMBER},
|
{TK_IO_NUMBER, LINEBREAK},
|
||||||
{TK_BANG, TK_IO_NUMBER},
|
{TK_IO_NUMBER, TK_BANG},
|
||||||
{SEPARATOR_OP, TK_IO_NUMBER},
|
{TK_IO_NUMBER, SEPARATOR_OP},
|
||||||
{NEWLINE_LIST, TK_IO_NUMBER},
|
{TK_IO_NUMBER, NEWWLINE_LIST},
|
||||||
|
|
||||||
{TK_AND_IF, AND_OR},
|
{TK_AND_IF, AND_OR},
|
||||||
|
|
||||||
|
|
@ -224,6 +224,65 @@ t_stackmatch g_stackmatch[] =
|
||||||
{NEWLINE_LIST, COMPOUND_LIST},
|
{NEWLINE_LIST, COMPOUND_LIST},
|
||||||
{NEWLINE_LIST, COMPLETE_COMMANDS},
|
{NEWLINE_LIST, COMPLETE_COMMANDS},
|
||||||
|
|
||||||
|
{HERE_END, DLESS},
|
||||||
|
{HERE_END, DLESSDASH},
|
||||||
|
|
||||||
|
{IO_HERE, TK_IO_NUMBER},
|
||||||
|
{IO_HERE, REDIRECT_LIST},
|
||||||
|
{IO_HERE, CMD_SUFFIX},
|
||||||
|
{IO_HERE, CMD_PREFIX},
|
||||||
|
{IO_HERE, CMD_WORD},
|
||||||
|
{IO_HERE, CMD_NAME},
|
||||||
|
{IO_HERE, LINEBREAK},
|
||||||
|
{IO_HERE, TK_BANG},
|
||||||
|
{IO_HERE, SEPARATOR_OP},
|
||||||
|
{IO_HERE, NEWLINE_LIST},
|
||||||
|
|
||||||
|
{FILENAME, TK_LESS},
|
||||||
|
{FILENAME, TK_LESSAND},
|
||||||
|
{FILENAME, TK_GREAT},
|
||||||
|
{FILENAME, TK_GREATAND},
|
||||||
|
{FILENAME, TK_DGREAT},
|
||||||
|
{FILENAME, TK_LESSGREAT},
|
||||||
|
{FILENAME, TK_CLOBBER},
|
||||||
|
|
||||||
|
{IO_FILE, TK_IO_NUMBER},
|
||||||
|
{IO_FILE, REDIRECT_LIST},
|
||||||
|
{IO_FILE, CMD_SUFFIX},
|
||||||
|
{IO_FILE, CMD_PREFIX},
|
||||||
|
{IO_FILE, CMD_WORD},
|
||||||
|
{IO_FILE, CMD_NAME},
|
||||||
|
{IO_FILE, LINEBREAK},
|
||||||
|
{IO_FILE, TK_BANG},
|
||||||
|
{IO_FILE, SEPARATOR_OP},
|
||||||
|
{IO_FILE, NEWLINE_LIST},
|
||||||
|
|
||||||
|
{IO_REDIRECT, REDIRECT_LIST},
|
||||||
|
{IO_REDIRECT, CMD_SUFFIX},
|
||||||
|
{IO_REDIRECT, CMD_PREFIX},
|
||||||
|
{IO_REDIRECT, CMD_WORD},
|
||||||
|
{IO_REDIRECT, CMD_NAME},
|
||||||
|
{IO_REDIRECT, LINEBREAK},
|
||||||
|
{IO_REDIRECT, TK_BANG},
|
||||||
|
{IO_REDIRECT, SEPARATOR_OP},
|
||||||
|
{IO_REDIRECT, NEWLINE_LIST},
|
||||||
|
|
||||||
|
{REDIRECT_LIST, COMPOUND_COMMAND}
|
||||||
|
|
||||||
|
{CMD_SUFFIX, CMD_WORD},
|
||||||
|
{CMD_SUFFIX, CMD_NAME},
|
||||||
|
|
||||||
|
{CMD_PREFIX, LINEBREAK},
|
||||||
|
{CMD_PREFIX, TK_BANG},
|
||||||
|
{CMD_PREFIX, SEPARATOR_OP},
|
||||||
|
{CMD_PREFIX, NEWLINE_LIST},
|
||||||
|
|
||||||
|
{CMD_WORD, CMD_PREFIX},
|
||||||
|
|
||||||
|
{CMD_NAME, LINEBREAK},
|
||||||
|
{CMD_NAME, TK_BANG},
|
||||||
|
{CMD_NAME, SEPARATOR_OP},
|
||||||
|
{CMD_NAME, NEWLINE_LIST},
|
||||||
{0, 0},
|
{0, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -235,8 +294,7 @@ int eval_sym(t_sym stack, t_sym new_sym)
|
||||||
i = 0;
|
i = 0;
|
||||||
while (g_stackmatch[i].top)
|
while (g_stackmatch[i].top)
|
||||||
{
|
{
|
||||||
if (stack == g_stackmatch[i].under
|
if (new_sym == g_stackmatch[i].top && stack == g.stackmatch[i].under)
|
||||||
&& new_sym == g_stackmatch[i].top)
|
|
||||||
return (0);
|
return (0);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
/* By: ariard <ariard@student.42.fr> +#+ +:+ +#+ */
|
||||||
/* +#+#+#+#+#+ +#+ */
|
/* +#+#+#+#+#+ +#+ */
|
||||||
/* Created: 2017/02/09 17:58:34 by ariard #+# #+# */
|
/* Created: 2017/02/09 17:58:34 by ariard #+# #+# */
|
||||||
/* Updated: 2017/02/10 16:57:17 by ariard ### ########.fr */
|
/* Updated: 2017/02/12 17:41:45 by ariard ### ########.fr */
|
||||||
/* */
|
/* */
|
||||||
/* ************************************************************************** */
|
/* ************************************************************************** */
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue