From 46e786db9d1b48b8fbc3502e36f093b755f3e09f Mon Sep 17 00:00:00 2001 From: kartofen Date: Tue, 26 Aug 2025 01:17:10 +0300 Subject: grammar for the grammar and lexing and parsing of a new language lbp --- demos/sample-files/gram-skeleton.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'demos/sample-files/gram-skeleton.c') 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 #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 '{': -- cgit v1.2.3