diff options
| author | kartofen <kartofen.mail.0@protonmail.com> | 2025-09-24 00:06:54 +0300 |
|---|---|---|
| committer | kartofen <kartofen.mail.0@protonmail.com> | 2025-09-24 00:06:54 +0300 |
| commit | fec8e3a95becfb3dc2a3eb0f512a120a7a4551c5 (patch) | |
| tree | 8d3da9f0c3fa36f5e06bc49cc1bfdc0db3099ea1 /demos/generate-parser.c | |
| parent | db1b9c8dcb0d115217a33c2fe8e0760d49143e11 (diff) | |
debug info through the lr parser
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); |
