From 0f3c53fb630b810e3927e7184273d424ff8b165a Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 11 Apr 2015 00:09:33 +0200 Subject: output: de-duplicate token value pushing --- src/parse.cpp | 65 +++++++++-------------------------------------------------- 1 file changed, 10 insertions(+), 55 deletions(-) (limited to 'src/parse.cpp') diff --git a/src/parse.cpp b/src/parse.cpp index bca53dc..afeafda 100644 --- a/src/parse.cpp +++ b/src/parse.cpp @@ -158,7 +158,7 @@ static inline std::string * parse_reduce_22(std::string * v, __attribute__((unus return v; } -int parse_push(parse_context_t *parser, int token, const parse_token_value_t *value, __attribute__((unused)) solar::grammar_t * grammar) { +static int parse_do_push(parse_context_t *parser, int token, __attribute__((unused)) solar::grammar_t * grammar) { while (1) { switch (parser->stack[parser->top].state) { case 0: @@ -174,12 +174,10 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va return 0; case TOK_SYMBOL_LC: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 4; return 1; case '%': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 5; return 1; @@ -208,7 +206,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 4: switch (token) { case '|': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 6; return 1; @@ -220,22 +217,18 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 5: switch (token) { case 'e': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 7; return 1; case 'h': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 8; return 1; case 's': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 9; return 1; case 't': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 10; return 1; @@ -247,7 +240,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 6: switch (token) { case '=': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 11; return 1; @@ -259,7 +251,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 7: switch (token) { case 'x': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 12; return 1; @@ -271,7 +262,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 8: switch (token) { case 'e': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 13; return 1; @@ -283,7 +273,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 9: switch (token) { case 'o': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 14; return 1; @@ -295,7 +284,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 10: switch (token) { case 'y': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 15; return 1; @@ -315,7 +303,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 12: switch (token) { case 't': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 17; return 1; @@ -327,7 +314,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 13: switch (token) { case 'a': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 18; return 1; @@ -339,7 +325,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 14: switch (token) { case 'u': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 19; return 1; @@ -351,7 +336,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 15: switch (token) { case 'p': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 20; return 1; @@ -363,32 +347,26 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 16: switch (token) { case TOK_BLOCK: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 24; return 1; case TOK_CHAR: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 25; return 1; case TOK_STRING: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 26; return 1; case TOK_SYMBOL_LC: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 27; return 1; case TOK_SYMBOL_UC: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 28; return 1; case ';': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 29; return 1; @@ -400,7 +378,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 17: switch (token) { case 'r': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 30; return 1; @@ -412,7 +389,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 18: switch (token) { case 'd': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 31; return 1; @@ -424,7 +400,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 19: switch (token) { case 'r': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 32; return 1; @@ -436,7 +411,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 20: switch (token) { case 'e': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 33; return 1; @@ -457,7 +431,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 22: switch (token) { case '(': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 34; return 1; @@ -552,7 +525,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 30: switch (token) { case 'a': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 35; return 1; @@ -564,7 +536,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 31: switch (token) { case 'e': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 36; return 1; @@ -576,7 +547,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 32: switch (token) { case 'c': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 37; return 1; @@ -588,17 +558,14 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 33: switch (token) { case TOK_CHAR: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 25; return 1; case TOK_SYMBOL_UC: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 28; return 1; case TOK_SYMBOL_LC: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 39; return 1; @@ -610,17 +577,14 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 34: switch (token) { case TOK_SYMBOL: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 41; return 1; case TOK_SYMBOL_LC: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 42; return 1; case TOK_SYMBOL_UC: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 43; return 1; @@ -632,7 +596,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 35: switch (token) { case '_': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 44; return 1; @@ -644,7 +607,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 36: switch (token) { case 'r': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 45; return 1; @@ -656,7 +618,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 37: switch (token) { case 'e': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 46; return 1; @@ -668,7 +629,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 38: switch (token) { case TOK_BLOCK: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 47; return 1; @@ -680,7 +640,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 39: switch (token) { case TOK_BLOCK: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 48; return 1; @@ -692,7 +651,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 40: switch (token) { case ')': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 49; return 1; @@ -770,7 +728,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 44: switch (token) { case 'a': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 50; return 1; @@ -782,7 +739,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 45: switch (token) { case TOK_BLOCK: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 51; return 1; @@ -794,7 +750,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 46: switch (token) { case TOK_BLOCK: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 52; return 1; @@ -806,17 +761,14 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 47: switch (token) { case TOK_SYMBOL: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 41; return 1; case TOK_SYMBOL_LC: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 42; return 1; case TOK_SYMBOL_UC: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 43; return 1; @@ -846,7 +798,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 50: switch (token) { case 'r': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 54; return 1; @@ -885,7 +836,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 54: switch (token) { case 'g': - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 55; return 1; @@ -897,7 +847,6 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 55: switch (token) { case TOK_BLOCK: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 56; return 1; @@ -909,17 +858,14 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 56: switch (token) { case TOK_SYMBOL: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 41; return 1; case TOK_SYMBOL_LC: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 42; return 1; case TOK_SYMBOL_UC: - parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 43; return 1; @@ -940,3 +886,12 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } } } + +int parse_push(parse_context_t *parser, int token, const parse_token_value_t *value, __attribute__((unused)) solar::grammar_t * grammar) { + int ret = parse_do_push(parser, token, grammar); + + if (ret > 0) + parser->stack[parser->top-1].value.token = *value; + + return ret; +} -- cgit v1.2.3