output: correctly initialize parser state
This commit is contained in:
parent
59258d1f71
commit
923ce33be1
1 changed files with 5 additions and 2 deletions
|
@ -183,8 +183,8 @@ void output_t::emit_state_shift(unsigned i) {
|
||||||
else
|
else
|
||||||
std::fprintf(source_file, "\t\t\tcase %s%s:\n", token_prefix(), token.get_value().c_str());
|
std::fprintf(source_file, "\t\t\tcase %s%s:\n", token_prefix(), token.get_value().c_str());
|
||||||
|
|
||||||
std::fprintf(source_file, "\t\t\t\tparser->stack[++parser->top].state = %u;\n", unsigned(it->second));
|
|
||||||
std::fprintf(source_file, "\t\t\t\tparser->stack[parser->top].value.token = *value;\n");
|
std::fprintf(source_file, "\t\t\t\tparser->stack[parser->top].value.token = *value;\n");
|
||||||
|
std::fprintf(source_file, "\t\t\t\tparser->stack[++parser->top].state = %u;\n", unsigned(it->second));
|
||||||
std::fprintf(source_file, "\t\t\t\treturn 1;\n\n");
|
std::fprintf(source_file, "\t\t\t\treturn 1;\n\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -326,7 +326,10 @@ void output_t::emit_source() {
|
||||||
std::fprintf(source_file, "};\n\n\n");
|
std::fprintf(source_file, "};\n\n\n");
|
||||||
|
|
||||||
std::fprintf(source_file, "%scontext_t * %salloc(void *(*alloc_func)(size_t)) {\n", prefix(), prefix());
|
std::fprintf(source_file, "%scontext_t * %salloc(void *(*alloc_func)(size_t)) {\n", prefix(), prefix());
|
||||||
std::fprintf(source_file, "\treturn (%scontext_t *)alloc_func(sizeof(%scontext_t));\n", prefix(), prefix());
|
std::fprintf(source_file, "\t%scontext_t *parser = (%scontext_t *)alloc_func(sizeof(%scontext_t));\n", prefix(), prefix(), prefix());
|
||||||
|
std::fprintf(source_file, "\tparser->top = 0;\n");
|
||||||
|
std::fprintf(source_file, "\tparser->stack[0].state = 0;\n");
|
||||||
|
std::fprintf(source_file, "\treturn parser;\n");
|
||||||
std::fprintf(source_file, "}\n\n");
|
std::fprintf(source_file, "}\n\n");
|
||||||
|
|
||||||
std::fprintf(source_file, "void %sfree(%scontext_t *parser, void (*free_func)(void *)) {\n", prefix(), prefix());
|
std::fprintf(source_file, "void %sfree(%scontext_t *parser, void (*free_func)(void *)) {\n", prefix(), prefix());
|
||||||
|
|
Reference in a new issue