aboutsummaryrefslogtreecommitdiff
path: root/demos/sample-files/gram-skeleton.c
diff options
context:
space:
mode:
authorkartofen <kartofen.mail.0@protonmail.com>2025-08-26 01:17:10 +0300
committerkartofen <kartofen.mail.0@protonmail.com>2025-08-26 01:17:10 +0300
commit46e786db9d1b48b8fbc3502e36f093b755f3e09f (patch)
tree9e279216e68f3fe4b0849d1e07184fe674dc551f /demos/sample-files/gram-skeleton.c
parent1c83c514c8108fccfec9764da5e4563b98eb871b (diff)
grammar for the grammar and lexing and parsing of a new language lbp
Diffstat (limited to 'demos/sample-files/gram-skeleton.c')
-rw-r--r--demos/sample-files/gram-skeleton.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/demos/sample-files/gram-skeleton.c b/demos/sample-files/gram-skeleton.c
index 7a54548..4e40c14 100644
--- a/demos/sample-files/gram-skeleton.c
+++ b/demos/sample-files/gram-skeleton.c
@@ -5,7 +5,7 @@
#include <ctype.h>
#define INPUT_CAP 4096
-#define ARENA_CAP 4096
+#define ARENA_CAP 4096*2
#define ARENA_IMPLEMENTATION
#include "util/arena.h"
@@ -115,6 +115,13 @@ void handle_prec(struct list_head *preclist)
printf(" int *list;\n");
printf(" size_t nlist;\n");
printf("};\n");
+
+ if(!preclist) {
+ printf("struct precedence_def *precedence_defs = NULL;\n");
+ printf("size_t nprecedence_defs = 0;\n");
+ return;
+ }
+
printf("struct precedence_def *precedence_defs = (struct precedence_def[]){\n");
list_for_each_entry(struct prec_entry, entry, list, preclist) {
printf("{ %d, (int[]){", entry->flag);
@@ -211,7 +218,7 @@ int main(void)
intptr_t value;
if(lr_parser(&value)) {
- printf(input);
+ fprintf(stderr, input);
return 1;
}
@@ -274,6 +281,7 @@ static char *next_token(char *str)
else if(strcmp(s, "nonterminal") == 0) tok.s = NONTERM;
else if(strcmp(s, "left") == 0) tok.s = LEFT;
else if(strcmp(s, "right") == 0) tok.s = RIGHT;
+ else if(strcmp(s, "noprec") == 0) tok.s = NOPREC;
else { fprintf(stderr, "ERROR: Unknown directive '-%s'\n", s); goto fail; }
break;
case '{':