diff options
| author | kartofen <kartofen.mail.0@protonmail.com> | 2025-08-26 01:17:10 +0300 |
|---|---|---|
| committer | kartofen <kartofen.mail.0@protonmail.com> | 2025-08-26 01:17:10 +0300 |
| commit | 46e786db9d1b48b8fbc3502e36f093b755f3e09f (patch) | |
| tree | 9e279216e68f3fe4b0849d1e07184fe674dc551f /demos/sample-files/gram-skeleton.c | |
| parent | 1c83c514c8108fccfec9764da5e4563b98eb871b (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.c | 12 |
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 '{': |
