This repository has been archived on 2025-03-02. You can view files and clone it, but cannot push or open issues or pull requests.
solar/src/parse.cpp

1662 lines
48 KiB
C++

#include "parse.hpp"
typedef union parse_symbol_value {
parse_token_value_t token;
std::string * symbol_action;
std::pair<std::vector<solar::symbol_t>, std::vector<std::string>> * symbol_rhs;
solar::rule_t * symbol_rule;
solar::symbol_t * symbol_symbol;
solar::symbol_t * symbol_term;
std::string * symbol_varname;
} parse_symbol_value_t;
typedef struct parse_context_state {
unsigned state;
parse_symbol_value_t value;
} parse_context_state_t;
struct parse_context {
unsigned top;
parse_context_state_t stack[100];
};
parse_context_t * parse_alloc(void *(*alloc_func)(size_t)) {
parse_context_t *parser = (parse_context_t *)alloc_func(sizeof(parse_context_t));
parser->top = 0;
parser->stack[0].state = 0;
return parser;
}
void parse_free(parse_context_t *parser, void (*free_func)(void *)) {
free_func(parser);
}
static inline void parse_reduce_2(solar::rule_t * rule, __attribute__((unused)) solar::grammar_t * grammar) {
if (grammar->rules.empty()) {
solar::item_t init("");
init.get_rhs().push_back(solar::symbol_t::make_nonterm(rule->item.get_lhs().c_str()));
grammar->rules.emplace_back(solar::rule_t {std::move(init), std::vector<std::string>(), std::string()});
}
grammar->rules.push_back(*rule);
delete rule;
}
static inline void parse_reduce_3(std::string * nonterm, std::string * type, __attribute__((unused)) solar::grammar_t * grammar) {
grammar->nonterm_types.insert(std::make_pair(*nonterm, *type));
delete nonterm;
delete type;
}
static inline void parse_reduce_4(solar::symbol_t * term, std::string * type, std::string * name, __attribute__((unused)) solar::grammar_t * grammar) {
grammar->term_types.insert(std::make_pair(*term, std::make_pair(*type, *name)));
delete term;
delete type;
delete name;
}
static inline void parse_reduce_5(std::string * block, __attribute__((unused)) solar::grammar_t * grammar) {
grammar->source_block = *block;
delete block;
}
static inline void parse_reduce_6(std::string * block, __attribute__((unused)) solar::grammar_t * grammar) {
grammar->header_block = *block;
delete block;
}
static inline void parse_reduce_7(std::string * type, std::string * name, __attribute__((unused)) solar::grammar_t * grammar) {
grammar->extra_args.push_back(std::make_pair(*type, *name));
delete type;
delete name;
}
static inline solar::rule_t * parse_reduce_8(std::string * lhs, std::pair<std::vector<solar::symbol_t>, std::vector<std::string>> * rhs, std::string * action, __attribute__((unused)) solar::grammar_t * grammar) {
auto *ret = new solar::rule_t {solar::item_t(*lhs, rhs->first), rhs->second, *action};
delete lhs;
delete rhs;
delete action;
return ret;
}
static inline std::pair<std::vector<solar::symbol_t>, std::vector<std::string>> * parse_reduce_9(__attribute__((unused)) solar::grammar_t * grammar) {
return new std::pair<std::vector<solar::symbol_t>, std::vector<std::string>>();
}
static inline std::pair<std::vector<solar::symbol_t>, std::vector<std::string>> * parse_reduce_10(std::pair<std::vector<solar::symbol_t>, std::vector<std::string>> * rhs, solar::symbol_t * sym, __attribute__((unused)) solar::grammar_t * grammar) {
rhs->first.push_back(*sym);
rhs->second.emplace_back();
delete sym;
return rhs;
}
static inline std::pair<std::vector<solar::symbol_t>, std::vector<std::string>> * parse_reduce_11(std::pair<std::vector<solar::symbol_t>, std::vector<std::string>> * rhs, solar::symbol_t * sym, std::string * var, __attribute__((unused)) solar::grammar_t * grammar) {
rhs->first.push_back(*sym);
rhs->second.push_back(*var);
delete sym;
delete var;
return rhs;
}
static inline std::pair<std::vector<solar::symbol_t>, std::vector<std::string>> * parse_reduce_12(std::pair<std::vector<solar::symbol_t>, std::vector<std::string>> * rhs, std::string * str, __attribute__((unused)) solar::grammar_t * grammar) {
for (char c : *str) {
rhs->first.push_back(solar::symbol_t::make_char(c));
rhs->second.emplace_back();
}
delete str;
return rhs;
}
static inline std::string * parse_reduce_13(__attribute__((unused)) solar::grammar_t * grammar) {
return new std::string;
}
static inline std::string * parse_reduce_14(std::string * v, __attribute__((unused)) solar::grammar_t * grammar) {
return v;
}
static inline solar::symbol_t * parse_reduce_15(solar::symbol_t * v, __attribute__((unused)) solar::grammar_t * grammar) {
return v;
}
static inline solar::symbol_t * parse_reduce_16(std::string * v, __attribute__((unused)) solar::grammar_t * grammar) {
solar::symbol_t *ret = new solar::symbol_t(solar::symbol_t::make_nonterm(*v));
delete v;
return ret;
}
static inline solar::symbol_t * parse_reduce_17(std::string * v, __attribute__((unused)) solar::grammar_t * grammar) {
solar::symbol_t *ret = new solar::symbol_t(solar::symbol_t::make_term(*v));
delete v;
return ret;
}
static inline solar::symbol_t * parse_reduce_18(char v, __attribute__((unused)) solar::grammar_t * grammar) {
return new solar::symbol_t(solar::symbol_t::make_char(v));
}
static inline std::string * parse_reduce_19(std::string * v, __attribute__((unused)) solar::grammar_t * grammar) {
return v;
}
static inline std::string * parse_reduce_20(std::string * v, __attribute__((unused)) solar::grammar_t * grammar) {
return v;
}
static inline std::string * parse_reduce_21(std::string * v, __attribute__((unused)) solar::grammar_t * grammar) {
return v;
}
int parse_push(parse_context_t *parser, int token, const parse_token_value_t *value, __attribute__((unused)) solar::grammar_t * grammar) {
while (1) {
switch (parser->stack[parser->top].state) {
case 0:
switch (token) {
case 0:
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:
parser->stack[++parser->top].state = 1;
break;
default:
return -1;
}
break;
case 1:
switch (token) {
case 0:
return 0;
case TOK_EXTRA_ARG:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 3;
return 1;
case TOK_HEADER:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 4;
return 1;
case TOK_SOURCE:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 5;
return 1;
case TOK_SYMBOL_LC:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 6;
return 1;
case TOK_TYPE:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 7;
return 1;
default:
return -1;
}
break;
case 2:
switch (token) {
case 0:
parser->top -= 2;
parse_reduce_2(parser->stack[parser->top + 1].value.symbol_rule, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_EXTRA_ARG:
parser->top -= 2;
parse_reduce_2(parser->stack[parser->top + 1].value.symbol_rule, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_HEADER:
parser->top -= 2;
parse_reduce_2(parser->stack[parser->top + 1].value.symbol_rule, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_SOURCE:
parser->top -= 2;
parse_reduce_2(parser->stack[parser->top + 1].value.symbol_rule, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_SYMBOL_LC:
parser->top -= 2;
parse_reduce_2(parser->stack[parser->top + 1].value.symbol_rule, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_TYPE:
parser->top -= 2;
parse_reduce_2(parser->stack[parser->top + 1].value.symbol_rule, grammar);
parser->stack[++parser->top].state = 1;
break;
default:
return -1;
}
break;
case 3:
switch (token) {
case TOK_BLOCK:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 8;
return 1;
default:
return -1;
}
break;
case 4:
switch (token) {
case TOK_BLOCK:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 9;
return 1;
default:
return -1;
}
break;
case 5:
switch (token) {
case TOK_BLOCK:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 10;
return 1;
default:
return -1;
}
break;
case 6:
switch (token) {
case '|':
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 11;
return 1;
default:
return -1;
}
break;
case 7:
switch (token) {
case TOK_CHAR:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 13;
return 1;
case TOK_SYMBOL_LC:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 14;
return 1;
case TOK_SYMBOL_UC:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 15;
return 1;
default:
return -1;
}
break;
case 8:
switch (token) {
case TOK_SYMBOL:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 17;
return 1;
case TOK_SYMBOL_LC:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 18;
return 1;
case TOK_SYMBOL_UC:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 19;
return 1;
default:
return -1;
}
break;
case 9:
switch (token) {
case 0:
parser->top -= 3;
parse_reduce_6(parser->stack[parser->top + 2].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_EXTRA_ARG:
parser->top -= 3;
parse_reduce_6(parser->stack[parser->top + 2].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_HEADER:
parser->top -= 3;
parse_reduce_6(parser->stack[parser->top + 2].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_SOURCE:
parser->top -= 3;
parse_reduce_6(parser->stack[parser->top + 2].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_SYMBOL_LC:
parser->top -= 3;
parse_reduce_6(parser->stack[parser->top + 2].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_TYPE:
parser->top -= 3;
parse_reduce_6(parser->stack[parser->top + 2].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
default:
return -1;
}
break;
case 10:
switch (token) {
case 0:
parser->top -= 3;
parse_reduce_5(parser->stack[parser->top + 2].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_EXTRA_ARG:
parser->top -= 3;
parse_reduce_5(parser->stack[parser->top + 2].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_HEADER:
parser->top -= 3;
parse_reduce_5(parser->stack[parser->top + 2].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_SOURCE:
parser->top -= 3;
parse_reduce_5(parser->stack[parser->top + 2].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_SYMBOL_LC:
parser->top -= 3;
parse_reduce_5(parser->stack[parser->top + 2].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_TYPE:
parser->top -= 3;
parse_reduce_5(parser->stack[parser->top + 2].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
default:
return -1;
}
break;
case 11:
switch (token) {
case '=':
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 20;
return 1;
default:
return -1;
}
break;
case 12:
switch (token) {
case TOK_BLOCK:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 21;
return 1;
default:
return -1;
}
break;
case 13:
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.c, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
case TOK_CHAR:
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.c, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
case TOK_STRING:
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.c, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
case TOK_SYMBOL_LC:
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.c, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
case TOK_SYMBOL_UC:
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.c, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
case '(':
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.c, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
case ';':
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_18(parser->stack[parser->top + 0].value.token.c, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
default:
return -1;
}
break;
case 14:
switch (token) {
case TOK_BLOCK:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 22;
return 1;
default:
return -1;
}
break;
case 15:
switch (token) {
case TOK_BLOCK:
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
case TOK_CHAR:
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
case TOK_STRING:
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
case TOK_SYMBOL_LC:
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
case TOK_SYMBOL_UC:
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
case '(':
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
case ';':
parser->top -= 1;
parser->stack[parser->top].value.symbol_term = parse_reduce_17(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 7:
parser->stack[++parser->top].state = 12;
break;
case 23:
parser->stack[++parser->top].state = 27;
break;
}
break;
default:
return -1;
}
break;
case 16:
switch (token) {
case 0:
parser->top -= 4;
parse_reduce_7(parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_EXTRA_ARG:
parser->top -= 4;
parse_reduce_7(parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_HEADER:
parser->top -= 4;
parse_reduce_7(parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_SOURCE:
parser->top -= 4;
parse_reduce_7(parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_SYMBOL_LC:
parser->top -= 4;
parse_reduce_7(parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_TYPE:
parser->top -= 4;
parse_reduce_7(parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 1;
break;
default:
return -1;
}
break;
case 17:
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
case TOK_SYMBOL_LC:
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
case TOK_TYPE:
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
default:
return -1;
}
break;
case 18:
switch (token) {
case 0:
parser->top -= 1;
parser->stack[parser->top].value.symbol_varname = parse_reduce_19(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
case TOK_EXTRA_ARG:
parser->top -= 1;
parser->stack[parser->top].value.symbol_varname = parse_reduce_19(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
case TOK_HEADER:
parser->top -= 1;
parser->stack[parser->top].value.symbol_varname = parse_reduce_19(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
case TOK_SOURCE:
parser->top -= 1;
parser->stack[parser->top].value.symbol_varname = parse_reduce_19(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
case TOK_SYMBOL_LC:
parser->top -= 1;
parser->stack[parser->top].value.symbol_varname = parse_reduce_19(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
case TOK_TYPE:
parser->top -= 1;
parser->stack[parser->top].value.symbol_varname = parse_reduce_19(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
case ')':
parser->top -= 1;
parser->stack[parser->top].value.symbol_varname = parse_reduce_19(parser->stack[parser->top + 0].value.token.str, grammar);
switch (parser->stack[parser->top].state) {
case 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
default:
return -1;
}
break;
case 19:
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
case TOK_SYMBOL_LC:
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
case TOK_TYPE:
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
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 8:
parser->stack[++parser->top].state = 16;
break;
case 21:
parser->stack[++parser->top].state = 24;
break;
case 32:
parser->stack[++parser->top].state = 33;
break;
}
break;
default:
return -1;
}
break;
case 20:
switch (token) {
case TOK_BLOCK:
parser->stack[parser->top].value.symbol_rhs = parse_reduce_9(grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_CHAR:
parser->stack[parser->top].value.symbol_rhs = parse_reduce_9(grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_STRING:
parser->stack[parser->top].value.symbol_rhs = parse_reduce_9(grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_SYMBOL_LC:
parser->stack[parser->top].value.symbol_rhs = parse_reduce_9(grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_SYMBOL_UC:
parser->stack[parser->top].value.symbol_rhs = parse_reduce_9(grammar);
parser->stack[++parser->top].state = 23;
break;
case ';':
parser->stack[parser->top].value.symbol_rhs = parse_reduce_9(grammar);
parser->stack[++parser->top].state = 23;
break;
default:
return -1;
}
break;
case 21:
switch (token) {
case TOK_SYMBOL:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 17;
return 1;
case TOK_SYMBOL_LC:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 18;
return 1;
case TOK_SYMBOL_UC:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 19;
return 1;
default:
return -1;
}
break;
case 22:
switch (token) {
case 0:
parser->top -= 4;
parse_reduce_3(parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_EXTRA_ARG:
parser->top -= 4;
parse_reduce_3(parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_HEADER:
parser->top -= 4;
parse_reduce_3(parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_SOURCE:
parser->top -= 4;
parse_reduce_3(parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_SYMBOL_LC:
parser->top -= 4;
parse_reduce_3(parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_TYPE:
parser->top -= 4;
parse_reduce_3(parser->stack[parser->top + 2].value.token.str, parser->stack[parser->top + 3].value.token.str, grammar);
parser->stack[++parser->top].state = 1;
break;
default:
return -1;
}
break;
case 23:
switch (token) {
case TOK_BLOCK:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 28;
return 1;
case TOK_CHAR:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 13;
return 1;
case TOK_STRING:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 29;
return 1;
case TOK_SYMBOL_LC:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 30;
return 1;
case TOK_SYMBOL_UC:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 15;
return 1;
case ';':
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 31;
return 1;
default:
return -1;
}
break;
case 24:
switch (token) {
case 0:
parser->top -= 5;
parse_reduce_4(parser->stack[parser->top + 2].value.symbol_term, parser->stack[parser->top + 3].value.token.str, parser->stack[parser->top + 4].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_EXTRA_ARG:
parser->top -= 5;
parse_reduce_4(parser->stack[parser->top + 2].value.symbol_term, parser->stack[parser->top + 3].value.token.str, parser->stack[parser->top + 4].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_HEADER:
parser->top -= 5;
parse_reduce_4(parser->stack[parser->top + 2].value.symbol_term, parser->stack[parser->top + 3].value.token.str, parser->stack[parser->top + 4].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_SOURCE:
parser->top -= 5;
parse_reduce_4(parser->stack[parser->top + 2].value.symbol_term, parser->stack[parser->top + 3].value.token.str, parser->stack[parser->top + 4].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_SYMBOL_LC:
parser->top -= 5;
parse_reduce_4(parser->stack[parser->top + 2].value.symbol_term, parser->stack[parser->top + 3].value.token.str, parser->stack[parser->top + 4].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 1;
break;
case TOK_TYPE:
parser->top -= 5;
parse_reduce_4(parser->stack[parser->top + 2].value.symbol_term, parser->stack[parser->top + 3].value.token.str, parser->stack[parser->top + 4].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 1;
break;
default:
return -1;
}
break;
case 25:
switch (token) {
case 0:
parser->top -= 5;
parser->stack[parser->top].value.symbol_rule = parse_reduce_8(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 = 2;
break;
case TOK_EXTRA_ARG:
parser->top -= 5;
parser->stack[parser->top].value.symbol_rule = parse_reduce_8(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 = 2;
break;
case TOK_HEADER:
parser->top -= 5;
parser->stack[parser->top].value.symbol_rule = parse_reduce_8(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 = 2;
break;
case TOK_SOURCE:
parser->top -= 5;
parser->stack[parser->top].value.symbol_rule = parse_reduce_8(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 = 2;
break;
case TOK_SYMBOL_LC:
parser->top -= 5;
parser->stack[parser->top].value.symbol_rule = parse_reduce_8(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 = 2;
break;
case TOK_TYPE:
parser->top -= 5;
parser->stack[parser->top].value.symbol_rule = parse_reduce_8(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 = 2;
break;
default:
return -1;
}
break;
case 26:
switch (token) {
case TOK_BLOCK:
parser->top -= 2;
parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_CHAR:
parser->top -= 2;
parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_STRING:
parser->top -= 2;
parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_SYMBOL_LC:
parser->top -= 2;
parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_SYMBOL_UC:
parser->top -= 2;
parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar);
parser->stack[++parser->top].state = 23;
break;
case '(':
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 32;
return 1;
case ';':
parser->top -= 2;
parser->stack[parser->top].value.symbol_rhs = parse_reduce_10(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.symbol_symbol, grammar);
parser->stack[++parser->top].state = 23;
break;
default:
return -1;
}
break;
case 27:
switch (token) {
case TOK_BLOCK:
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_15(parser->stack[parser->top + 0].value.symbol_term, grammar);
parser->stack[++parser->top].state = 26;
break;
case TOK_CHAR:
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_15(parser->stack[parser->top + 0].value.symbol_term, grammar);
parser->stack[++parser->top].state = 26;
break;
case TOK_STRING:
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_15(parser->stack[parser->top + 0].value.symbol_term, grammar);
parser->stack[++parser->top].state = 26;
break;
case TOK_SYMBOL_LC:
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_15(parser->stack[parser->top + 0].value.symbol_term, grammar);
parser->stack[++parser->top].state = 26;
break;
case TOK_SYMBOL_UC:
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_15(parser->stack[parser->top + 0].value.symbol_term, grammar);
parser->stack[++parser->top].state = 26;
break;
case '(':
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_15(parser->stack[parser->top + 0].value.symbol_term, grammar);
parser->stack[++parser->top].state = 26;
break;
case ';':
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_15(parser->stack[parser->top + 0].value.symbol_term, grammar);
parser->stack[++parser->top].state = 26;
break;
default:
return -1;
}
break;
case 28:
switch (token) {
case 0:
parser->top -= 1;
parser->stack[parser->top].value.symbol_action = parse_reduce_14(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 25;
break;
case TOK_EXTRA_ARG:
parser->top -= 1;
parser->stack[parser->top].value.symbol_action = parse_reduce_14(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 25;
break;
case TOK_HEADER:
parser->top -= 1;
parser->stack[parser->top].value.symbol_action = parse_reduce_14(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 25;
break;
case TOK_SOURCE:
parser->top -= 1;
parser->stack[parser->top].value.symbol_action = parse_reduce_14(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 25;
break;
case TOK_SYMBOL_LC:
parser->top -= 1;
parser->stack[parser->top].value.symbol_action = parse_reduce_14(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 25;
break;
case TOK_TYPE:
parser->top -= 1;
parser->stack[parser->top].value.symbol_action = parse_reduce_14(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 25;
break;
default:
return -1;
}
break;
case 29:
switch (token) {
case TOK_BLOCK:
parser->top -= 2;
parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_CHAR:
parser->top -= 2;
parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_STRING:
parser->top -= 2;
parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_SYMBOL_LC:
parser->top -= 2;
parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_SYMBOL_UC:
parser->top -= 2;
parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar);
parser->stack[++parser->top].state = 23;
break;
case ';':
parser->top -= 2;
parser->stack[parser->top].value.symbol_rhs = parse_reduce_12(parser->stack[parser->top + 0].value.symbol_rhs, parser->stack[parser->top + 1].value.token.str, grammar);
parser->stack[++parser->top].state = 23;
break;
default:
return -1;
}
break;
case 30:
switch (token) {
case TOK_BLOCK:
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 26;
break;
case TOK_CHAR:
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 26;
break;
case TOK_STRING:
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 26;
break;
case TOK_SYMBOL_LC:
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 26;
break;
case TOK_SYMBOL_UC:
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 26;
break;
case '(':
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 26;
break;
case ';':
parser->top -= 1;
parser->stack[parser->top].value.symbol_symbol = parse_reduce_16(parser->stack[parser->top + 0].value.token.str, grammar);
parser->stack[++parser->top].state = 26;
break;
default:
return -1;
}
break;
case 31:
switch (token) {
case 0:
parser->top -= 1;
parser->stack[parser->top].value.symbol_action = parse_reduce_13(grammar);
parser->stack[++parser->top].state = 25;
break;
case TOK_EXTRA_ARG:
parser->top -= 1;
parser->stack[parser->top].value.symbol_action = parse_reduce_13(grammar);
parser->stack[++parser->top].state = 25;
break;
case TOK_HEADER:
parser->top -= 1;
parser->stack[parser->top].value.symbol_action = parse_reduce_13(grammar);
parser->stack[++parser->top].state = 25;
break;
case TOK_SOURCE:
parser->top -= 1;
parser->stack[parser->top].value.symbol_action = parse_reduce_13(grammar);
parser->stack[++parser->top].state = 25;
break;
case TOK_SYMBOL_LC:
parser->top -= 1;
parser->stack[parser->top].value.symbol_action = parse_reduce_13(grammar);
parser->stack[++parser->top].state = 25;
break;
case TOK_TYPE:
parser->top -= 1;
parser->stack[parser->top].value.symbol_action = parse_reduce_13(grammar);
parser->stack[++parser->top].state = 25;
break;
default:
return -1;
}
break;
case 32:
switch (token) {
case TOK_SYMBOL:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 17;
return 1;
case TOK_SYMBOL_LC:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 18;
return 1;
case TOK_SYMBOL_UC:
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 19;
return 1;
default:
return -1;
}
break;
case 33:
switch (token) {
case ')':
parser->stack[parser->top].value.token = *value;
parser->stack[++parser->top].state = 34;
return 1;
default:
return -1;
}
break;
case 34:
switch (token) {
case TOK_BLOCK:
parser->top -= 5;
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, parser->stack[parser->top + 3].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_CHAR:
parser->top -= 5;
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, parser->stack[parser->top + 3].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_STRING:
parser->top -= 5;
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, parser->stack[parser->top + 3].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_SYMBOL_LC:
parser->top -= 5;
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, parser->stack[parser->top + 3].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 23;
break;
case TOK_SYMBOL_UC:
parser->top -= 5;
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, parser->stack[parser->top + 3].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 23;
break;
case ';':
parser->top -= 5;
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, parser->stack[parser->top + 3].value.symbol_varname, grammar);
parser->stack[++parser->top].state = 23;
break;
default:
return -1;
}
break;
}
}
}