diff options
Diffstat (limited to 'demos/generate-parser.c')
| -rw-r--r-- | demos/generate-parser.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/demos/generate-parser.c b/demos/generate-parser.c index e0ec5f5..c9c71f3 100644 --- a/demos/generate-parser.c +++ b/demos/generate-parser.c @@ -170,14 +170,14 @@ int main(int argc, char **argv) for(size_t i = 0; i < total_productions; i++) { printf("#define A(n) (*(stack_head-%zu+n))\n", grammar[i].nRHS-1); - printf("stack_item __prod%zu_action(stack_item *stack_head)\n", i); + printf("void *__prod%zu_action(stack_item *r, stack_item *stack_head)\n", i); printf("{ stack_item v = {0};\n"); puts(semantic_action_str[i]); - printf("return v; }\n"); + printf("*r = v; return NULL; }\n"); printf("#undef A\n"); } - printf("typedef stack_item (*semantic_action_fn)(stack_item *stack_head);\n"); + printf("typedef void *(*semantic_action_fn)(stack_item *, stack_item *);\n"); printf("semantic_action_fn *semantic_actions = (semantic_action_fn[]){\n"); for(size_t i = 0; i < total_productions; i++) @@ -194,7 +194,7 @@ int main(int argc, char **argv) printf("#include \"parts/grammar.h\"\n"); printf("#include \"parts/table.h\"\n"); printf("typedef %s stack_item;\n", stack_item_type); - printf("typedef stack_item (*semantic_action_fn)(stack_item *stack_head);\n"); + printf("typedef void *(*semantic_action_fn)(stack_item *, stack_item *);\n"); printf("extern semantic_action_fn *semantic_actions;\n"); printf("#endif\n"); set_stdout(NULL); |
