aboutsummaryrefslogtreecommitdiff
path: root/demos/generate-parser.c
diff options
context:
space:
mode:
authorkartofen <kartofen.mail.0@protonmail.com>2025-09-24 00:06:54 +0300
committerkartofen <kartofen.mail.0@protonmail.com>2025-09-24 00:06:54 +0300
commitfec8e3a95becfb3dc2a3eb0f512a120a7a4551c5 (patch)
tree8d3da9f0c3fa36f5e06bc49cc1bfdc0db3099ea1 /demos/generate-parser.c
parentdb1b9c8dcb0d115217a33c2fe8e0760d49143e11 (diff)
debug info through the lr parser
Diffstat (limited to 'demos/generate-parser.c')
-rw-r--r--demos/generate-parser.c8
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);