diff options
Diffstat (limited to 'src/parse.cpp')
-rw-r--r-- | src/parse.cpp | 1617 |
1 files changed, 774 insertions, 843 deletions
diff --git a/src/parse.cpp b/src/parse.cpp index d09522c..7c8b1f2 100644 --- a/src/parse.cpp +++ b/src/parse.cpp @@ -167,23 +167,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->stack[++parser->top].state = 1; break; - case TOK_EXTRA_ARG: - parser->stack[++parser->top].state = 1; - break; - - case TOK_HEADER: - parser->stack[++parser->top].state = 1; - break; - - case TOK_SOURCE: - parser->stack[++parser->top].state = 1; - break; - case TOK_SYMBOL_LC: parser->stack[++parser->top].state = 1; break; - case TOK_TYPE: + case '%': parser->stack[++parser->top].state = 1; break; @@ -197,31 +185,16 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 0: return 0; - case TOK_EXTRA_ARG: + case TOK_SYMBOL_LC: parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 4; return 1; - case TOK_HEADER: + case '%': parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 5; return 1; - case TOK_SOURCE: - parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 6; - return 1; - - case TOK_SYMBOL_LC: - parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 7; - return 1; - - case TOK_TYPE: - parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 8; - return 1; - default: return -1; } @@ -234,27 +207,12 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->stack[++parser->top].state = 1; break; - case TOK_EXTRA_ARG: - parser->top -= 2; - parser->stack[++parser->top].state = 1; - break; - - case TOK_HEADER: - parser->top -= 2; - parser->stack[++parser->top].state = 1; - break; - - case TOK_SOURCE: - parser->top -= 2; - parser->stack[++parser->top].state = 1; - break; - case TOK_SYMBOL_LC: parser->top -= 2; parser->stack[++parser->top].state = 1; break; - case TOK_TYPE: + case '%': parser->top -= 2; parser->stack[++parser->top].state = 1; break; @@ -272,31 +230,13 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->stack[++parser->top].state = 2; break; - case TOK_EXTRA_ARG: - parser->top -= 1; - parse_reduce_3(parser->stack[parser->top + 0].value.symbol_rule, grammar); - parser->stack[++parser->top].state = 2; - break; - - case TOK_HEADER: - parser->top -= 1; - parse_reduce_3(parser->stack[parser->top + 0].value.symbol_rule, grammar); - parser->stack[++parser->top].state = 2; - break; - - case TOK_SOURCE: - parser->top -= 1; - parse_reduce_3(parser->stack[parser->top + 0].value.symbol_rule, grammar); - parser->stack[++parser->top].state = 2; - break; - case TOK_SYMBOL_LC: parser->top -= 1; parse_reduce_3(parser->stack[parser->top + 0].value.symbol_rule, grammar); parser->stack[++parser->top].state = 2; break; - case TOK_TYPE: + case '%': parser->top -= 1; parse_reduce_3(parser->stack[parser->top + 0].value.symbol_rule, grammar); parser->stack[++parser->top].state = 2; @@ -309,9 +249,9 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 4: switch (token) { - case TOK_BLOCK: + case '|': parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 9; + parser->stack[++parser->top].state = 6; return 1; default: @@ -321,7 +261,22 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 5: switch (token) { - case TOK_BLOCK: + 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; @@ -333,7 +288,7 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 6: switch (token) { - case TOK_BLOCK: + case '=': parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 11; return 1; @@ -345,7 +300,7 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 7: switch (token) { - case '|': + case 'x': parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 12; return 1; @@ -357,19 +312,82 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va case 8: switch (token) { - case TOK_CHAR: + case 'e': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 13; + return 1; + + default: + return -1; + } + break; + + case 9: + switch (token) { + case 'o': parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 14; return 1; - case TOK_SYMBOL_LC: + default: + return -1; + } + break; + + case 10: + switch (token) { + case 'y': parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 15; return 1; + default: + return -1; + } + break; + + case 11: + switch (token) { + case TOK_BLOCK: + parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(grammar); + parser->stack[++parser->top].state = 16; + break; + + case TOK_CHAR: + parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(grammar); + parser->stack[++parser->top].state = 16; + break; + + case TOK_STRING: + parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(grammar); + parser->stack[++parser->top].state = 16; + break; + + case TOK_SYMBOL_LC: + parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(grammar); + parser->stack[++parser->top].state = 16; + break; + case TOK_SYMBOL_UC: - parser->stack[parser->top].value.token = *value; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(grammar); + parser->stack[++parser->top].state = 16; + break; + + case ';': + parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(grammar); parser->stack[++parser->top].state = 16; + break; + + default: + return -1; + } + break; + + case 12: + switch (token) { + case 't': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 17; return 1; default: @@ -377,19 +395,33 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 9: + case 13: switch (token) { - case TOK_SYMBOL: + case 'a': parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 18; return 1; - case TOK_SYMBOL_LC: + default: + return -1; + } + break; + + case 14: + switch (token) { + case 'u': parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 19; return 1; - case TOK_SYMBOL_UC: + default: + return -1; + } + break; + + case 15: + switch (token) { + case 'p': parser->stack[parser->top].value.token = *value; parser->stack[++parser->top].state = 20; return 1; @@ -399,42 +431,109 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 10: + case 16: switch (token) { - case 0: - parser->top -= 2; - parse_reduce_7(parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 2; - break; + case TOK_BLOCK: + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 24; + return 1; - case TOK_EXTRA_ARG: - parser->top -= 2; - parse_reduce_7(parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 2; - break; + case TOK_CHAR: + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 25; + return 1; - case TOK_HEADER: - parser->top -= 2; - parse_reduce_7(parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 2; - break; + case TOK_STRING: + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 26; + return 1; - case TOK_SOURCE: - parser->top -= 2; - parse_reduce_7(parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 2; + 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; + + default: + return -1; + } + break; + + case 17: + switch (token) { + case 'r': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 30; + return 1; + + default: + return -1; + } + break; + + case 18: + switch (token) { + case 'd': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 31; + return 1; + + default: + return -1; + } + break; + + case 19: + switch (token) { + case 'r': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 32; + return 1; + + default: + return -1; + } + break; + + case 20: + switch (token) { + case 'e': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 33; + return 1; + + default: + return -1; + } + break; + + case 21: + switch (token) { + case 0: + parser->top -= 5; + parser->stack[parser->top].value.symbol_rule = parse_reduce_9(parser->stack[parser->top + 0].value.token.str, parser->stack[parser->top + 3].value.symbol_rhs, parser->stack[parser->top + 4].value.symbol_action, grammar); + parser->stack[++parser->top].state = 3; break; case TOK_SYMBOL_LC: - parser->top -= 2; - parse_reduce_7(parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 2; + parser->top -= 5; + parser->stack[parser->top].value.symbol_rule = parse_reduce_9(parser->stack[parser->top + 0].value.token.str, parser->stack[parser->top + 3].value.symbol_rhs, parser->stack[parser->top + 4].value.symbol_action, grammar); + parser->stack[++parser->top].state = 3; break; - case TOK_TYPE: - parser->top -= 2; - parse_reduce_7(parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 2; + case '%': + parser->top -= 5; + parser->stack[parser->top].value.symbol_rule = parse_reduce_9(parser->stack[parser->top + 0].value.token.str, parser->stack[parser->top + 3].value.symbol_rhs, parser->stack[parser->top + 4].value.symbol_action, grammar); + parser->stack[++parser->top].state = 3; break; default: @@ -442,42 +541,47 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 11: + case 22: switch (token) { - case 0: + case TOK_BLOCK: parser->top -= 2; - parse_reduce_6(parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 2; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_11(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar); + parser->stack[++parser->top].state = 16; break; - case TOK_EXTRA_ARG: + case TOK_CHAR: parser->top -= 2; - parse_reduce_6(parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 2; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_11(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar); + parser->stack[++parser->top].state = 16; break; - case TOK_HEADER: + case TOK_STRING: parser->top -= 2; - parse_reduce_6(parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 2; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_11(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar); + parser->stack[++parser->top].state = 16; break; - case TOK_SOURCE: + case TOK_SYMBOL_LC: parser->top -= 2; - parse_reduce_6(parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 2; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_11(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar); + parser->stack[++parser->top].state = 16; break; - case TOK_SYMBOL_LC: + case TOK_SYMBOL_UC: parser->top -= 2; - parse_reduce_6(parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 2; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_11(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar); + parser->stack[++parser->top].state = 16; break; - case TOK_TYPE: + case '(': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 34; + return 1; + + case ';': parser->top -= 2; - parse_reduce_6(parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 2; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_11(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar); + parser->stack[++parser->top].state = 16; break; default: @@ -485,41 +589,91 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 12: + case 23: switch (token) { - case '=': - parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 21; - return 1; + case TOK_BLOCK: + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); + parser->stack[++parser->top].state = 22; + break; + + case TOK_CHAR: + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); + parser->stack[++parser->top].state = 22; + break; + + case TOK_STRING: + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); + parser->stack[++parser->top].state = 22; + break; + + case TOK_SYMBOL_LC: + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); + parser->stack[++parser->top].state = 22; + break; + + case TOK_SYMBOL_UC: + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); + parser->stack[++parser->top].state = 22; + break; + + case '(': + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); + parser->stack[++parser->top].state = 22; + break; + + case ';': + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); + parser->stack[++parser->top].state = 22; + break; default: return -1; } break; - case 13: + case 24: switch (token) { - case TOK_BLOCK: - parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 22; - return 1; + case 0: + parser->top -= 1; + parser->stack[parser->top].value.symbol_action = parse_reduce_15(parser->stack[parser->top + 0].value.token.str, grammar); + parser->stack[++parser->top].state = 21; + break; + + case TOK_SYMBOL_LC: + parser->top -= 1; + parser->stack[parser->top].value.symbol_action = parse_reduce_15(parser->stack[parser->top + 0].value.token.str, grammar); + parser->stack[++parser->top].state = 21; + break; + + case '%': + parser->top -= 1; + parser->stack[parser->top].value.symbol_action = parse_reduce_15(parser->stack[parser->top + 0].value.token.str, grammar); + parser->stack[++parser->top].state = 21; + break; default: return -1; } break; - case 14: + case 25: switch (token) { case TOK_BLOCK: parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_19(parser->stack[parser->top + 0].value.token.c, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -528,11 +682,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_19(parser->stack[parser->top + 0].value.token.c, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -541,11 +695,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_19(parser->stack[parser->top + 0].value.token.c, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -554,11 +708,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_19(parser->stack[parser->top + 0].value.token.c, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -567,11 +721,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_19(parser->stack[parser->top + 0].value.token.c, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -580,11 +734,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_19(parser->stack[parser->top + 0].value.token.c, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -593,11 +747,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_19(parser->stack[parser->top + 0].value.token.c, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -607,29 +761,109 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 15: + case 26: switch (token) { case TOK_BLOCK: - parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 23; - return 1; + parser->top -= 2; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_13(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar); + parser->stack[++parser->top].state = 16; + break; + + case TOK_CHAR: + parser->top -= 2; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_13(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar); + parser->stack[++parser->top].state = 16; + break; + + case TOK_STRING: + parser->top -= 2; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_13(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar); + parser->stack[++parser->top].state = 16; + break; + + case TOK_SYMBOL_LC: + parser->top -= 2; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_13(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar); + parser->stack[++parser->top].state = 16; + break; + + case TOK_SYMBOL_UC: + parser->top -= 2; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_13(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar); + parser->stack[++parser->top].state = 16; + break; + + case ';': + parser->top -= 2; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_13(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar); + parser->stack[++parser->top].state = 16; + break; default: return -1; } break; - case 16: + case 27: + switch (token) { + case TOK_BLOCK: + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); + parser->stack[++parser->top].state = 22; + break; + + case TOK_CHAR: + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); + parser->stack[++parser->top].state = 22; + break; + + case TOK_STRING: + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); + parser->stack[++parser->top].state = 22; + break; + + case TOK_SYMBOL_LC: + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); + parser->stack[++parser->top].state = 22; + break; + + case TOK_SYMBOL_UC: + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); + parser->stack[++parser->top].state = 22; + break; + + case '(': + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); + parser->stack[++parser->top].state = 22; + break; + + case ';': + parser->top -= 1; + parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); + parser->stack[++parser->top].state = 22; + break; + + default: + return -1; + } + break; + + case 28: switch (token) { case TOK_BLOCK: parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -638,11 +872,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -651,11 +885,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -664,11 +898,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -677,11 +911,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -690,11 +924,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -703,11 +937,11 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 8: - parser->stack[++parser->top].state = 13; + case 16: + parser->stack[++parser->top].state = 23; break; - case 24: - parser->stack[++parser->top].state = 28; + case 33: + parser->stack[++parser->top].state = 38; break; } break; @@ -717,111 +951,197 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 17: + case 29: switch (token) { case 0: - parser->top -= 3; - parse_reduce_8(parser->stack[parser->top + 1].value.token.str, parser->stack[parser->top + 2].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 2; + parser->top -= 1; + parser->stack[parser->top].value.symbol_action = parse_reduce_14(grammar); + parser->stack[++parser->top].state = 21; break; - case TOK_EXTRA_ARG: - parser->top -= 3; - parse_reduce_8(parser->stack[parser->top + 1].value.token.str, parser->stack[parser->top + 2].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 2; + case TOK_SYMBOL_LC: + parser->top -= 1; + parser->stack[parser->top].value.symbol_action = parse_reduce_14(grammar); + parser->stack[++parser->top].state = 21; break; - case TOK_HEADER: - parser->top -= 3; - parse_reduce_8(parser->stack[parser->top + 1].value.token.str, parser->stack[parser->top + 2].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 2; + case '%': + parser->top -= 1; + parser->stack[parser->top].value.symbol_action = parse_reduce_14(grammar); + parser->stack[++parser->top].state = 21; break; - case TOK_SOURCE: - parser->top -= 3; - parse_reduce_8(parser->stack[parser->top + 1].value.token.str, parser->stack[parser->top + 2].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 2; - break; + default: + return -1; + } + break; + + case 30: + switch (token) { + case 'a': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 35; + return 1; + + default: + return -1; + } + break; + + case 31: + switch (token) { + case 'e': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 36; + return 1; + + default: + return -1; + } + break; + + case 32: + switch (token) { + case 'c': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 37; + return 1; + + default: + return -1; + } + break; + + 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_LC: - parser->top -= 3; - parse_reduce_8(parser->stack[parser->top + 1].value.token.str, parser->stack[parser->top + 2].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 2; - break; + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 39; + return 1; - case TOK_TYPE: - parser->top -= 3; - parse_reduce_8(parser->stack[parser->top + 1].value.token.str, parser->stack[parser->top + 2].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 2; - break; + case TOK_SYMBOL_UC: + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 28; + return 1; default: return -1; } break; - case 18: + case 34: switch (token) { - case 0: - parser->top -= 1; - parser->stack[parser->top].value.symbol_varname = parse_reduce_22(parser->stack[parser->top + 0].value.token.str, grammar); - switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; - break; - case 22: - parser->stack[++parser->top].state = 25; - break; - case 33: - parser->stack[++parser->top].state = 34; - break; - } - break; + case TOK_SYMBOL: + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 41; + return 1; - case TOK_EXTRA_ARG: - parser->top -= 1; - parser->stack[parser->top].value.symbol_varname = parse_reduce_22(parser->stack[parser->top + 0].value.token.str, grammar); - switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; - break; - case 22: - parser->stack[++parser->top].state = 25; - break; - case 33: - parser->stack[++parser->top].state = 34; - break; - } - break; + case TOK_SYMBOL_LC: + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 42; + return 1; - case TOK_HEADER: - parser->top -= 1; - parser->stack[parser->top].value.symbol_varname = parse_reduce_22(parser->stack[parser->top + 0].value.token.str, grammar); - switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; - break; - case 22: - parser->stack[++parser->top].state = 25; - break; - case 33: - parser->stack[++parser->top].state = 34; - break; - } - break; + case TOK_SYMBOL_UC: + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 43; + return 1; + + default: + return -1; + } + break; + + case 35: + switch (token) { + case '_': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 44; + return 1; + + default: + return -1; + } + break; + + case 36: + switch (token) { + case 'r': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 45; + return 1; + + default: + return -1; + } + break; + + case 37: + switch (token) { + case 'e': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 46; + return 1; + + default: + return -1; + } + break; - case TOK_SOURCE: + case 38: + switch (token) { + case TOK_BLOCK: + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 47; + return 1; + + default: + return -1; + } + break; + + case 39: + switch (token) { + case TOK_BLOCK: + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 48; + return 1; + + default: + return -1; + } + break; + + case 40: + switch (token) { + case ')': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 49; + return 1; + + default: + return -1; + } + break; + + case 41: + switch (token) { + case 0: parser->top -= 1; parser->stack[parser->top].value.symbol_varname = parse_reduce_22(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; + case 34: + parser->stack[++parser->top].state = 40; break; - case 22: - parser->stack[++parser->top].state = 25; + case 47: + parser->stack[++parser->top].state = 53; break; - case 33: - parser->stack[++parser->top].state = 34; + case 56: + parser->stack[++parser->top].state = 57; break; } break; @@ -830,30 +1150,30 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_varname = parse_reduce_22(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; + case 34: + parser->stack[++parser->top].state = 40; break; - case 22: - parser->stack[++parser->top].state = 25; + case 47: + parser->stack[++parser->top].state = 53; break; - case 33: - parser->stack[++parser->top].state = 34; + case 56: + parser->stack[++parser->top].state = 57; break; } break; - case TOK_TYPE: + case '%': parser->top -= 1; parser->stack[parser->top].value.symbol_varname = parse_reduce_22(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; + case 34: + parser->stack[++parser->top].state = 40; break; - case 22: - parser->stack[++parser->top].state = 25; + case 47: + parser->stack[++parser->top].state = 53; break; - case 33: - parser->stack[++parser->top].state = 34; + case 56: + parser->stack[++parser->top].state = 57; break; } break; @@ -862,14 +1182,14 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_varname = parse_reduce_22(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; + case 34: + parser->stack[++parser->top].state = 40; break; - case 22: - parser->stack[++parser->top].state = 25; + case 47: + parser->stack[++parser->top].state = 53; break; - case 33: - parser->stack[++parser->top].state = 34; + case 56: + parser->stack[++parser->top].state = 57; break; } break; @@ -879,68 +1199,20 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 19: + case 42: switch (token) { case 0: parser->top -= 1; parser->stack[parser->top].value.symbol_varname = parse_reduce_20(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; + case 34: + parser->stack[++parser->top].state = 40; break; - case 22: - parser->stack[++parser->top].state = 25; + case 47: + parser->stack[++parser->top].state = 53; break; - case 33: - parser->stack[++parser->top].state = 34; - break; - } - break; - - case TOK_EXTRA_ARG: - parser->top -= 1; - parser->stack[parser->top].value.symbol_varname = parse_reduce_20(parser->stack[parser->top + 0].value.token.str, grammar); - switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; - break; - case 22: - parser->stack[++parser->top].state = 25; - break; - case 33: - parser->stack[++parser->top].state = 34; - break; - } - break; - - case TOK_HEADER: - parser->top -= 1; - parser->stack[parser->top].value.symbol_varname = parse_reduce_20(parser->stack[parser->top + 0].value.token.str, grammar); - switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; - break; - case 22: - parser->stack[++parser->top].state = 25; - break; - case 33: - parser->stack[++parser->top].state = 34; - break; - } - break; - - case TOK_SOURCE: - parser->top -= 1; - parser->stack[parser->top].value.symbol_varname = parse_reduce_20(parser->stack[parser->top + 0].value.token.str, grammar); - switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; - break; - case 22: - parser->stack[++parser->top].state = 25; - break; - case 33: - parser->stack[++parser->top].state = 34; + case 56: + parser->stack[++parser->top].state = 57; break; } break; @@ -949,30 +1221,30 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_varname = parse_reduce_20(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; + case 34: + parser->stack[++parser->top].state = 40; break; - case 22: - parser->stack[++parser->top].state = 25; + case 47: + parser->stack[++parser->top].state = 53; break; - case 33: - parser->stack[++parser->top].state = 34; + case 56: + parser->stack[++parser->top].state = 57; break; } break; - case TOK_TYPE: + case '%': parser->top -= 1; parser->stack[parser->top].value.symbol_varname = parse_reduce_20(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; + case 34: + parser->stack[++parser->top].state = 40; break; - case 22: - parser->stack[++parser->top].state = 25; + case 47: + parser->stack[++parser->top].state = 53; break; - case 33: - parser->stack[++parser->top].state = 34; + case 56: + parser->stack[++parser->top].state = 57; break; } break; @@ -981,14 +1253,14 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_varname = parse_reduce_20(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; + case 34: + parser->stack[++parser->top].state = 40; break; - case 22: - parser->stack[++parser->top].state = 25; + case 47: + parser->stack[++parser->top].state = 53; break; - case 33: - parser->stack[++parser->top].state = 34; + case 56: + parser->stack[++parser->top].state = 57; break; } break; @@ -998,68 +1270,20 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 20: + case 43: switch (token) { case 0: parser->top -= 1; parser->stack[parser->top].value.symbol_varname = parse_reduce_21(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; - break; - case 22: - parser->stack[++parser->top].state = 25; - break; - case 33: - parser->stack[++parser->top].state = 34; - break; - } - break; - - case TOK_EXTRA_ARG: - parser->top -= 1; - parser->stack[parser->top].value.symbol_varname = parse_reduce_21(parser->stack[parser->top + 0].value.token.str, grammar); - switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; - break; - case 22: - parser->stack[++parser->top].state = 25; - break; - case 33: - parser->stack[++parser->top].state = 34; - break; - } - break; - - case TOK_HEADER: - parser->top -= 1; - parser->stack[parser->top].value.symbol_varname = parse_reduce_21(parser->stack[parser->top + 0].value.token.str, grammar); - switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; - break; - case 22: - parser->stack[++parser->top].state = 25; - break; - case 33: - parser->stack[++parser->top].state = 34; - break; - } - break; - - case TOK_SOURCE: - parser->top -= 1; - parser->stack[parser->top].value.symbol_varname = parse_reduce_21(parser->stack[parser->top + 0].value.token.str, grammar); - switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; + case 34: + parser->stack[++parser->top].state = 40; break; - case 22: - parser->stack[++parser->top].state = 25; + case 47: + parser->stack[++parser->top].state = 53; break; - case 33: - parser->stack[++parser->top].state = 34; + case 56: + parser->stack[++parser->top].state = 57; break; } break; @@ -1068,30 +1292,30 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_varname = parse_reduce_21(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; + case 34: + parser->stack[++parser->top].state = 40; break; - case 22: - parser->stack[++parser->top].state = 25; + case 47: + parser->stack[++parser->top].state = 53; break; - case 33: - parser->stack[++parser->top].state = 34; + case 56: + parser->stack[++parser->top].state = 57; break; } break; - case TOK_TYPE: + case '%': parser->top -= 1; parser->stack[parser->top].value.symbol_varname = parse_reduce_21(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; + case 34: + parser->stack[++parser->top].state = 40; break; - case 22: - parser->stack[++parser->top].state = 25; + case 47: + parser->stack[++parser->top].state = 53; break; - case 33: - parser->stack[++parser->top].state = 34; + case 56: + parser->stack[++parser->top].state = 57; break; } break; @@ -1100,14 +1324,14 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va parser->top -= 1; parser->stack[parser->top].value.symbol_varname = parse_reduce_21(parser->stack[parser->top + 0].value.token.str, grammar); switch (parser->stack[parser->top].state) { - case 9: - parser->stack[++parser->top].state = 17; + case 34: + parser->stack[++parser->top].state = 40; break; - case 22: - parser->stack[++parser->top].state = 25; + case 47: + parser->stack[++parser->top].state = 53; break; - case 33: - parser->stack[++parser->top].state = 34; + case 56: + parser->stack[++parser->top].state = 57; break; } break; @@ -1117,58 +1341,23 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 21: + case 44: switch (token) { - case TOK_BLOCK: - parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_CHAR: - parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_STRING: - parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_SYMBOL_LC: - parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_SYMBOL_UC: - parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(grammar); - parser->stack[++parser->top].state = 24; - break; - - case ';': - parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(grammar); - parser->stack[++parser->top].state = 24; - break; + case 'a': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 50; + return 1; default: return -1; } break; - case 22: + case 45: switch (token) { - case TOK_SYMBOL: - parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 18; - return 1; - - case TOK_SYMBOL_LC: - parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 19; - return 1; - - case TOK_SYMBOL_UC: + case TOK_BLOCK: parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 20; + parser->stack[++parser->top].state = 51; return 1; default: @@ -1176,79 +1365,33 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 23: + case 46: switch (token) { - case 0: - parser->top -= 3; - parse_reduce_4(parser->stack[parser->top + 1].value.token.str, parser->stack[parser->top + 2].value.token.str, grammar); - parser->stack[++parser->top].state = 2; - break; - - case TOK_EXTRA_ARG: - parser->top -= 3; - parse_reduce_4(parser->stack[parser->top + 1].value.token.str, parser->stack[parser->top + 2].value.token.str, grammar); - parser->stack[++parser->top].state = 2; - break; - - case TOK_HEADER: - parser->top -= 3; - parse_reduce_4(parser->stack[parser->top + 1].value.token.str, parser->stack[parser->top + 2].value.token.str, grammar); - parser->stack[++parser->top].state = 2; - break; - - case TOK_SOURCE: - parser->top -= 3; - parse_reduce_4(parser->stack[parser->top + 1].value.token.str, parser->stack[parser->top + 2].value.token.str, grammar); - parser->stack[++parser->top].state = 2; - break; - - case TOK_SYMBOL_LC: - parser->top -= 3; - parse_reduce_4(parser->stack[parser->top + 1].value.token.str, parser->stack[parser->top + 2].value.token.str, grammar); - parser->stack[++parser->top].state = 2; - break; - - case TOK_TYPE: - parser->top -= 3; - parse_reduce_4(parser->stack[parser->top + 1].value.token.str, parser->stack[parser->top + 2].value.token.str, grammar); - parser->stack[++parser->top].state = 2; - break; + case TOK_BLOCK: + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 52; + return 1; default: return -1; } break; - case 24: + case 47: switch (token) { - case TOK_BLOCK: - parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 29; - return 1; - - case TOK_CHAR: - parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 14; - return 1; - - case TOK_STRING: + case TOK_SYMBOL: parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 30; + parser->stack[++parser->top].state = 41; return 1; case TOK_SYMBOL_LC: parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 31; + parser->stack[++parser->top].state = 42; return 1; case TOK_SYMBOL_UC: parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 16; - return 1; - - case ';': - parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 32; + parser->stack[++parser->top].state = 43; return 1; default: @@ -1256,41 +1399,23 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 25: + case 48: switch (token) { case 0: - parser->top -= 4; - parse_reduce_5(parser->stack[parser->top + 1].value.symbol_term, parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 2; - break; - - case TOK_EXTRA_ARG: - parser->top -= 4; - parse_reduce_5(parser->stack[parser->top + 1].value.symbol_term, parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 2; - break; - - case TOK_HEADER: - parser->top -= 4; - parse_reduce_5(parser->stack[parser->top + 1].value.symbol_term, parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 2; - break; - - case TOK_SOURCE: - parser->top -= 4; - parse_reduce_5(parser->stack[parser->top + 1].value.symbol_term, parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.symbol_varname, grammar); + parser->top -= 7; + parse_reduce_4(parser->stack[parser->top + 5].value.token.str, parser->stack[parser->top + 6].value.token.str, grammar); parser->stack[++parser->top].state = 2; break; case TOK_SYMBOL_LC: - parser->top -= 4; - parse_reduce_5(parser->stack[parser->top + 1].value.symbol_term, parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.symbol_varname, grammar); + parser->top -= 7; + parse_reduce_4(parser->stack[parser->top + 5].value.token.str, parser->stack[parser->top + 6].value.token.str, grammar); parser->stack[++parser->top].state = 2; break; - case TOK_TYPE: - parser->top -= 4; - parse_reduce_5(parser->stack[parser->top + 1].value.symbol_term, parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.symbol_varname, grammar); + case '%': + parser->top -= 7; + parse_reduce_4(parser->stack[parser->top + 5].value.token.str, parser->stack[parser->top + 6].value.token.str, grammar); parser->stack[++parser->top].state = 2; break; @@ -1299,42 +1424,42 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 26: + case 49: switch (token) { - case 0: + case TOK_BLOCK: parser->top -= 5; - parser->stack[parser->top].value.symbol_rule = parse_reduce_9(parser->stack[parser->top + 0].value.token.str, parser->stack[parser->top + 3].value.symbol_rhs, parser->stack[parser->top + 4].value.symbol_action, grammar); - parser->stack[++parser->top].state = 3; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, parser->stack[parser->top + 3].value.symbol_varname, grammar); + parser->stack[++parser->top].state = 16; break; - case TOK_EXTRA_ARG: + case TOK_CHAR: parser->top -= 5; - parser->stack[parser->top].value.symbol_rule = parse_reduce_9(parser->stack[parser->top + 0].value.token.str, parser->stack[parser->top + 3].value.symbol_rhs, parser->stack[parser->top + 4].value.symbol_action, grammar); - parser->stack[++parser->top].state = 3; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, parser->stack[parser->top + 3].value.symbol_varname, grammar); + parser->stack[++parser->top].state = 16; break; - case TOK_HEADER: + case TOK_STRING: parser->top -= 5; - parser->stack[parser->top].value.symbol_rule = parse_reduce_9(parser->stack[parser->top + 0].value.token.str, parser->stack[parser->top + 3].value.symbol_rhs, parser->stack[parser->top + 4].value.symbol_action, grammar); - parser->stack[++parser->top].state = 3; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, parser->stack[parser->top + 3].value.symbol_varname, grammar); + parser->stack[++parser->top].state = 16; break; - case TOK_SOURCE: + case TOK_SYMBOL_LC: parser->top -= 5; - parser->stack[parser->top].value.symbol_rule = parse_reduce_9(parser->stack[parser->top + 0].value.token.str, parser->stack[parser->top + 3].value.symbol_rhs, parser->stack[parser->top + 4].value.symbol_action, grammar); - parser->stack[++parser->top].state = 3; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, parser->stack[parser->top + 3].value.symbol_varname, grammar); + parser->stack[++parser->top].state = 16; break; - case TOK_SYMBOL_LC: + case TOK_SYMBOL_UC: parser->top -= 5; - parser->stack[parser->top].value.symbol_rule = parse_reduce_9(parser->stack[parser->top + 0].value.token.str, parser->stack[parser->top + 3].value.symbol_rhs, parser->stack[parser->top + 4].value.symbol_action, grammar); - parser->stack[++parser->top].state = 3; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, parser->stack[parser->top + 3].value.symbol_varname, grammar); + parser->stack[++parser->top].state = 16; break; - case TOK_TYPE: + case ';': parser->top -= 5; - parser->stack[parser->top].value.symbol_rule = parse_reduce_9(parser->stack[parser->top + 0].value.token.str, parser->stack[parser->top + 3].value.symbol_rhs, parser->stack[parser->top + 4].value.symbol_action, grammar); - parser->stack[++parser->top].state = 3; + parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, parser->stack[parser->top + 3].value.symbol_varname, grammar); + parser->stack[++parser->top].state = 16; break; default: @@ -1342,96 +1467,36 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 27: + case 50: switch (token) { - case TOK_BLOCK: - parser->top -= 2; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_11(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_CHAR: - parser->top -= 2; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_11(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_STRING: - parser->top -= 2; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_11(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_SYMBOL_LC: - parser->top -= 2; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_11(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_SYMBOL_UC: - parser->top -= 2; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_11(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar); - parser->stack[++parser->top].state = 24; - break; - - case '(': + case 'r': parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 33; + parser->stack[++parser->top].state = 54; return 1; - case ';': - parser->top -= 2; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_11(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar); - parser->stack[++parser->top].state = 24; - break; - default: return -1; } break; - case 28: + case 51: switch (token) { - case TOK_BLOCK: - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); - parser->stack[++parser->top].state = 27; - break; - - case TOK_CHAR: - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); - parser->stack[++parser->top].state = 27; - break; - - case TOK_STRING: - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); - parser->stack[++parser->top].state = 27; + case 0: + parser->top -= 8; + parse_reduce_7(parser->stack[parser->top + 7].value.token.str, grammar); + parser->stack[++parser->top].state = 2; break; case TOK_SYMBOL_LC: - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); - parser->stack[++parser->top].state = 27; - break; - - case TOK_SYMBOL_UC: - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); - parser->stack[++parser->top].state = 27; - break; - - case '(': - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); - parser->stack[++parser->top].state = 27; + parser->top -= 8; + parse_reduce_7(parser->stack[parser->top + 7].value.token.str, grammar); + parser->stack[++parser->top].state = 2; break; - case ';': - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.symbol_term, grammar); - parser->stack[++parser->top].state = 27; + case '%': + parser->top -= 8; + parse_reduce_7(parser->stack[parser->top + 7].value.token.str, grammar); + parser->stack[++parser->top].state = 2; break; default: @@ -1439,42 +1504,24 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 29: + case 52: switch (token) { case 0: - parser->top -= 1; - parser->stack[parser->top].value.symbol_action = parse_reduce_15(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 26; - break; - - case TOK_EXTRA_ARG: - parser->top -= 1; - parser->stack[parser->top].value.symbol_action = parse_reduce_15(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 26; - break; - - case TOK_HEADER: - parser->top -= 1; - parser->stack[parser->top].value.symbol_action = parse_reduce_15(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 26; - break; - - case TOK_SOURCE: - parser->top -= 1; - parser->stack[parser->top].value.symbol_action = parse_reduce_15(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 26; + parser->top -= 8; + parse_reduce_6(parser->stack[parser->top + 7].value.token.str, grammar); + parser->stack[++parser->top].state = 2; break; case TOK_SYMBOL_LC: - parser->top -= 1; - parser->stack[parser->top].value.symbol_action = parse_reduce_15(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 26; + parser->top -= 8; + parse_reduce_6(parser->stack[parser->top + 7].value.token.str, grammar); + parser->stack[++parser->top].state = 2; break; - case TOK_TYPE: - parser->top -= 1; - parser->stack[parser->top].value.symbol_action = parse_reduce_15(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 26; + case '%': + parser->top -= 8; + parse_reduce_6(parser->stack[parser->top + 7].value.token.str, grammar); + parser->stack[++parser->top].state = 2; break; default: @@ -1482,42 +1529,24 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 30: + case 53: switch (token) { - case TOK_BLOCK: - parser->top -= 2; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_13(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_CHAR: - parser->top -= 2; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_13(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_STRING: - parser->top -= 2; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_13(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 24; + case 0: + parser->top -= 8; + parse_reduce_5(parser->stack[parser->top + 5].value.symbol_term, parser->stack[parser->top + 6].value.token.str, parser->stack[parser->top + 7].value.symbol_varname, grammar); + parser->stack[++parser->top].state = 2; break; case TOK_SYMBOL_LC: - parser->top -= 2; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_13(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_SYMBOL_UC: - parser->top -= 2; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_13(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 24; + parser->top -= 8; + parse_reduce_5(parser->stack[parser->top + 5].value.symbol_term, parser->stack[parser->top + 6].value.token.str, parser->stack[parser->top + 7].value.symbol_varname, grammar); + parser->stack[++parser->top].state = 2; break; - case ';': - parser->top -= 2; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_13(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar); - parser->stack[++parser->top].state = 24; + case '%': + parser->top -= 8; + parse_reduce_5(parser->stack[parser->top + 5].value.symbol_term, parser->stack[parser->top + 6].value.token.str, parser->stack[parser->top + 7].value.symbol_varname, grammar); + parser->stack[++parser->top].state = 2; break; default: @@ -1525,113 +1554,45 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 31: + case 54: switch (token) { - case TOK_BLOCK: - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 27; - break; - - case TOK_CHAR: - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 27; - break; - - case TOK_STRING: - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 27; - break; - - case TOK_SYMBOL_LC: - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 27; - break; - - case TOK_SYMBOL_UC: - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 27; - break; - - case '(': - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 27; - break; - - case ';': - parser->top -= 1; - parser->stack[parser->top].value.symbol_symbol = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar); - parser->stack[++parser->top].state = 27; - break; + case 'g': + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 55; + return 1; default: return -1; } break; - case 32: + case 55: switch (token) { - case 0: - parser->top -= 1; - parser->stack[parser->top].value.symbol_action = parse_reduce_14(grammar); - parser->stack[++parser->top].state = 26; - break; - - case TOK_EXTRA_ARG: - parser->top -= 1; - parser->stack[parser->top].value.symbol_action = parse_reduce_14(grammar); - parser->stack[++parser->top].state = 26; - break; - - case TOK_HEADER: - parser->top -= 1; - parser->stack[parser->top].value.symbol_action = parse_reduce_14(grammar); - parser->stack[++parser->top].state = 26; - break; - - case TOK_SOURCE: - parser->top -= 1; - parser->stack[parser->top].value.symbol_action = parse_reduce_14(grammar); - parser->stack[++parser->top].state = 26; - break; - - case TOK_SYMBOL_LC: - parser->top -= 1; - parser->stack[parser->top].value.symbol_action = parse_reduce_14(grammar); - parser->stack[++parser->top].state = 26; - break; - - case TOK_TYPE: - parser->top -= 1; - parser->stack[parser->top].value.symbol_action = parse_reduce_14(grammar); - parser->stack[++parser->top].state = 26; - break; + case TOK_BLOCK: + parser->stack[parser->top].value.token = *value; + parser->stack[++parser->top].state = 56; + return 1; default: return -1; } break; - case 33: + case 56: switch (token) { case TOK_SYMBOL: parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 18; + parser->stack[++parser->top].state = 41; return 1; case TOK_SYMBOL_LC: parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 19; + parser->stack[++parser->top].state = 42; return 1; case TOK_SYMBOL_UC: parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 20; + parser->stack[++parser->top].state = 43; return 1; default: @@ -1639,54 +1600,24 @@ int parse_push(parse_context_t *parser, int token, const parse_token_value_t *va } break; - case 34: + case 57: switch (token) { - case ')': - parser->stack[parser->top].value.token = *value; - parser->stack[++parser->top].state = 35; - return 1; - - default: - return -1; - } - break; - - case 35: - switch (token) { - case TOK_BLOCK: - parser->top -= 5; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, parser->stack[parser->top + 3].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_CHAR: - parser->top -= 5; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, parser->stack[parser->top + 3].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_STRING: - parser->top -= 5; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, parser->stack[parser->top + 3].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 24; + case 0: + parser->top -= 12; + parse_reduce_8(parser->stack[parser->top + 10].value.token.str, parser->stack[parser->top + 11].value.symbol_varname, grammar); + parser->stack[++parser->top].state = 2; break; case TOK_SYMBOL_LC: - parser->top -= 5; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, parser->stack[parser->top + 3].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 24; - break; - - case TOK_SYMBOL_UC: - parser->top -= 5; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, parser->stack[parser->top + 3].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 24; + parser->top -= 12; + parse_reduce_8(parser->stack[parser->top + 10].value.token.str, parser->stack[parser->top + 11].value.symbol_varname, grammar); + parser->stack[++parser->top].state = 2; break; - case ';': - parser->top -= 5; - parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, parser->stack[parser->top + 3].value.symbol_varname, grammar); - parser->stack[++parser->top].state = 24; + case '%': + parser->top -= 12; + parse_reduce_8(parser->stack[parser->top + 10].value.token.str, parser->stack[parser->top + 11].value.symbol_varname, grammar); + parser->stack[++parser->top].state = 2; break; default: |