diff --git a/src/backends/glr.c b/src/backends/glr.c index f7b6f8b15ac41495a2cfb5c19cf787f81a3e8e4d..82ad5c06bf6e80c426ae45453933976bf7a32ef6 100644 --- a/src/backends/glr.c +++ b/src/backends/glr.c @@ -129,6 +129,8 @@ HParserBackendVTable h__glr_backend_vtable = { // dummy! int test_glr(void) { + HAllocator *mm__ = &system_allocator; + /* E -> E '+' E | 'd' @@ -141,7 +143,7 @@ int test_glr(void) HParser *p = E; printf("\n==== G R A M M A R ====\n"); - HCFGrammar *g = h_cfgrammar(&system_allocator, p); + HCFGrammar *g = h_cfgrammar_(mm__, h_desugar_augmented(mm__, p)); if(g == NULL) { fprintf(stderr, "h_cfgrammar failed\n"); return 1; diff --git a/src/backends/lalr.c b/src/backends/lalr.c index 242988eeed435fb77742ed92e9acbb91c4a67e66..93becf31b23f0ba5a1204441442c96622aa55fe7 100644 --- a/src/backends/lalr.c +++ b/src/backends/lalr.c @@ -207,7 +207,7 @@ static bool match_production(HLREnhGrammar *eg, HCFChoice **p, // desugar parser with a fresh start symbol // this guarantees that the start symbol will not occur in any productions -static HCFChoice *augment(HAllocator *mm__, HParser *parser) +HCFChoice *h_desugar_augmented(HAllocator *mm__, HParser *parser) { HCFChoice *augmented = h_new(HCFChoice, 1); @@ -231,7 +231,7 @@ int h_lalr_compile(HAllocator* mm__, HParser* parser, const void* params) // build LR(0) table // if necessary, resolve conflicts "by conversion to SLR" - HCFGrammar *g = h_cfgrammar_(mm__, augment(mm__, parser)); + HCFGrammar *g = h_cfgrammar_(mm__, h_desugar_augmented(mm__, parser)); if(g == NULL) // backend not suitable (language not context-free) return -1; @@ -349,7 +349,7 @@ int test_lalr(void) HParser *p = E; printf("\n==== G R A M M A R ====\n"); - HCFGrammar *g = h_cfgrammar_(mm__, augment(mm__, p)); + HCFGrammar *g = h_cfgrammar_(mm__, h_desugar_augmented(mm__, p)); if(g == NULL) { fprintf(stderr, "h_cfgrammar failed\n"); return 1; diff --git a/src/backends/lr.h b/src/backends/lr.h index ca8418e8bfdefa568d748d12259a4be2520491c6..1158542ba98a0224355e98529b8b7562e3e67197 100644 --- a/src/backends/lr.h +++ b/src/backends/lr.h @@ -123,6 +123,7 @@ HHashValue h_hash_transition(const void *p); HLRDFA *h_lr0_dfa(HCFGrammar *g); HLRTable *h_lr0_table(HCFGrammar *g, const HLRDFA *dfa); +HCFChoice *h_desugar_augmented(HAllocator *mm__, HParser *parser); int h_lalr_compile(HAllocator* mm__, HParser* parser, const void* params); void h_lalr_free(HParser *parser);