moar moar grammar

This commit is contained in:
AntoHesse 2017-02-12 04:09:36 +01:00
parent 516e1dade5
commit 6601e2111f
4 changed files with 76 additions and 4 deletions

View file

@ -61,6 +61,8 @@ enum e_sym
TK_CASE,
TK_LBRACE,
TK_IN,
TK_CASE,
TK_ESAC,
PROGRAM = 100,
COMPLETE_COMMANDS,
LIST,

View file

@ -23,8 +23,25 @@ t_aggrematch g_aggrematch[] =
{ELSE_PART, TK_FI, IF_CLAUSE},
{COMPOUND_LIST, TK_FI, IF_CLAUSE},
{TK_COMPOUND_LIST, TK_DONE, DO_GROUP},
{TK_COMPOUND_LIST, TK_RBRACE, BRACE_GROUP},
{COMPOUND_LIST, TK_DONE, DO_GROUP},
{COMPOUND_LIST, TK_RBRACE, BRACE_GROUP},
{TK_PAREN_CLOSE, COMPOUND_LIST, SUBSHELL, 2},
//watch this
{SEPARATOR, COMPOUND_LIST, COMPOUND_LIST, 1},
{LINEBREAK, TK_SEMI, SEPARATOR_OP, 1},
//prediction one
{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, NAME, SEPARATOR_SEP, ALL, 0},
{NEWlINE_LIST, IN, SEPARATOR_SEP, ALL, 0},
{NEWLINE_LIST, WORDLIST, SEPARATOR_SEP, ALL, 0},
{NEWLINE_LIST, TERM, SEPARATOR, ALL, 0},
{NEWLINE_LIST, COMPOUND_LIST, SEPARATOR, ALL, 0},
{0, 0, 0},
int aggregate_sym(t_sym **stack, t_sym *new_sym)

View file

@ -170,7 +170,60 @@ t_stackmatch g_stackmatch[] =
{TK_BANG, SEPARATOR_OP},
{TK_BANG, NEWLINE_LIST},
{TK_IN, LINEBREAK},
{TK_IN, LINEBREAK},
{TK_SEMI, NAME},
{TK_SEMI, IN},
{TK_SEMI, WORDLIST},
{TK_SEMI, LIST},
{TK_SEMI, TERM},
{TK_AMP, LIST},
{TK_AMP, TERM},
{TK_PIPE, PATTERN},
{TK_PIPE, PIPE_SEQUENCE},
{TK_PAREN_OPEN, FNAME},
{TK_PAREN_OPEN, CASE_LIST},
{TK_PAREN_OPEN, LINEBREAK},
{TK_PAREN_OPEN, TK_BANG},
{TK_PAREN_OPEN, SEPARATOR_OP},
{TK_PAREN_OPEN, NEWLINE_LIST},
{TK_PAREN_CLOSE, TK_PAREN_OPEN},
{TK_PAREN_CLOSE, PATTERN},
{TK_PAREN_CLOSE, COMPOUND_LIST},
{SEQUENTIAL_SEP, NAME},
{SEQUENTIAL_SEP, IN},
{SEQUENTIAL_SEP, WORDLIST},
{SEPARATOR, TERM},
{SEPARATOR, COMPOUND_LIST},
{SEPARATOR_OP, LIST},
{SEPARATOR_OP, TERM},
{SEPARATOR_OP, COMPOUND_LIST},
{LINEBREAK, TK_SEMI},
{LINEBREAK, TK_PAREN_CLOSE},
{LINEBREAK, WORD},
{LINEBREAK, IN},
{LINEBREAK, TK_AND_IF},
{LINEBREAK, TK_OR_IF},
{LINEBREAK, TK_PIPE},
{LINEBREAK, LINEBREAK},
{LINEBREAK, COMPLETECOMMANDS},
{NEWLINE_LIST, NEWLINE_LIST},
{NEWLINE_LIST, NAME},
{NEWLINE_LIST, IN},
{NEWLINE_LIST, WORDLIST},
{NEWLINE_LIST, TERM},
{NEWLINE_LIST, COMPOUND_LIST},
{NEWLINE_LIST, COMPLETE_COMMANDS},
{0, 0},
};

View file

@ -28,7 +28,7 @@ t_prodmatch g_prodmatch[] =
{TK_WORD, LINEBREAK, CMD_NAME},
{TK_WORD, NEWLINE_LIST, CMD_NAME},
{TK_WORD, IN, WORDLIST},
// {{TK_WORD, CASE_LIST, PATTERN}, rule 4 ?
{{TK_WORD, CASE_LIST, PATTERN},
{TK_WORD, TK_PAREN_OPEN, PATTERN},
{TK_ASSIGNEMENT_WORD, LINEBREAK, CMD_PREFIX},