From ff55937e0089d0b8e267f796cd7c4fc369343e7f Mon Sep 17 00:00:00 2001 From: "Sven M. Hallberg" <pesco@khjk.org> Date: Wed, 16 Sep 2015 23:42:18 +0200 Subject: [PATCH] split out h_pprint_lr_info for debugging purposes --- src/backends/lalr.c | 36 +++++++----------------------------- src/backends/lr.c | 32 ++++++++++++++++++++++++++++++++ src/backends/lr.h | 1 + 3 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/backends/lalr.c b/src/backends/lalr.c index 272f00d6..ec7a5b5f 100644 --- a/src/backends/lalr.c +++ b/src/backends/lalr.c @@ -355,8 +355,6 @@ HParserBackendVTable h__lalr_backend_vtable = { // dummy! int test_lalr(void) { - HAllocator *mm__ = &system_allocator; - /* E -> E '-' T | T @@ -371,44 +369,24 @@ int test_lalr(void) h_bind_indirect(E, E_); HParser *p = E; - printf("\n==== G R A M M A R ====\n"); - HCFGrammar *g = h_cfgrammar_(mm__, h_desugar_augmented(mm__, p)); - if (g == NULL) { - fprintf(stderr, "h_cfgrammar failed\n"); + HCFGrammar *g = h_pprint_lr_info(stdout, p); + if(!g) return 1; - } - h_pprint_grammar(stdout, g, 0); - - printf("\n==== D F A ====\n"); - HLRDFA *dfa = h_lr0_dfa(g); - if (dfa) { - h_pprint_lrdfa(stdout, g, dfa, 0); - } else { - fprintf(stderr, "h_lalr_dfa failed\n"); - } - printf("\n==== L R ( 0 ) T A B L E ====\n"); - HLRTable *table0 = h_lr0_table(g, dfa); - if (table0) { - h_pprint_lrtable(stdout, g, table0, 0); - } else { - fprintf(stderr, "h_lr0_table failed\n"); - } - h_lrtable_free(table0); - - printf("\n==== L A L R T A B L E ====\n"); + fprintf(stdout, "\n==== L A L R T A B L E ====\n"); if (h_compile(p, PB_LALR, NULL)) { - fprintf(stderr, "does not compile\n"); + fprintf(stdout, "does not compile\n"); return 2; } h_pprint_lrtable(stdout, g, (HLRTable *)p->backend_data, 0); - printf("\n==== P A R S E R E S U L T ====\n"); + fprintf(stdout, "\n==== P A R S E R E S U L T ====\n"); HParseResult *res = h_parse(p, (uint8_t *)"n-(n-((n)))-n", 13); if (res) { h_pprint(stdout, res->ast, 0, 2); } else { - printf("no parse\n"); + fprintf(stdout, "no parse\n"); } + return 0; } diff --git a/src/backends/lr.c b/src/backends/lr.c index 59c8c907..161bbf96 100644 --- a/src/backends/lr.c +++ b/src/backends/lr.c @@ -538,3 +538,35 @@ void h_pprint_lrtable(FILE *f, const HCFGrammar *g, const HLRTable *table, fputc('\n', f); #endif } + +HCFGrammar *h_pprint_lr_info(FILE *f, HParser *p) +{ + HAllocator *mm__ = &system_allocator; + + fprintf(f, "\n==== G R A M M A R ====\n"); + HCFGrammar *g = h_cfgrammar_(mm__, h_desugar_augmented(mm__, p)); + if (g == NULL) { + fprintf(f, "h_cfgrammar failed\n"); + return NULL; + } + h_pprint_grammar(f, g, 0); + + fprintf(f, "\n==== D F A ====\n"); + HLRDFA *dfa = h_lr0_dfa(g); + if (dfa) { + h_pprint_lrdfa(f, g, dfa, 0); + } else { + fprintf(f, "h_lalr_dfa failed\n"); + } + + fprintf(f, "\n==== L R ( 0 ) T A B L E ====\n"); + HLRTable *table0 = h_lr0_table(g, dfa); + if (table0) { + h_pprint_lrtable(f, g, table0, 0); + } else { + fprintf(f, "h_lr0_table failed\n"); + } + h_lrtable_free(table0); + + return g; +} diff --git a/src/backends/lr.h b/src/backends/lr.h index 8f1eadd9..f9cb9a20 100644 --- a/src/backends/lr.h +++ b/src/backends/lr.h @@ -143,5 +143,6 @@ void h_pprint_lrdfa(FILE *f, const HCFGrammar *g, const HLRDFA *dfa, unsigned int indent); void h_pprint_lrtable(FILE *f, const HCFGrammar *g, const HLRTable *table, unsigned int indent); +HCFGrammar *h_pprint_lr_info(FILE *f, HParser *p); #endif -- GitLab