moaaaar grammar

This commit is contained in:
ariard@student.42.fr 2017-02-12 18:47:16 +01:00
parent 80a5a8b1e2
commit a07ed6eea7
8 changed files with 133 additions and 33 deletions

BIN
42sh/includes/.parser.h.swn Normal file

Binary file not shown.

View file

@ -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;

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -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)
{ {

View file

@ -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++;
} }

View file

@ -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 */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */