diff options
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 '{': |
