parser->data got renamed to backend_data, also h_llk_free

This commit is contained in:
Sven M. Hallberg 2013-05-11 22:02:59 +02:00
parent a1105d413a
commit 286458f58a
2 changed files with 13 additions and 5 deletions

View file

@ -143,7 +143,7 @@ int h_llk_compile(HAllocator* mm__, HParser* parser, const void* params)
// TODO: eliminate left recursion // TODO: eliminate left recursion
// TODO: avoid conflicts by splitting occurances? // TODO: avoid conflicts by splitting occurances?
// generate table and store in parser->data. // generate table and store in parser->backend_data.
HLLkTable *table = h_llktable_new(mm__); HLLkTable *table = h_llktable_new(mm__);
if(fill_table(grammar, table) < 0) { if(fill_table(grammar, table) < 0) {
// the table was ambiguous // the table was ambiguous
@ -151,7 +151,7 @@ int h_llk_compile(HAllocator* mm__, HParser* parser, const void* params)
h_llktable_free(table); h_llktable_free(table);
return -1; return -1;
} }
parser->data = table; parser->backend_data = table;
// free grammar and its arena. // free grammar and its arena.
// desugared parsers (HCFChoice and HCFSequence) are unaffected by this. // desugared parsers (HCFChoice and HCFSequence) are unaffected by this.
@ -160,13 +160,21 @@ int h_llk_compile(HAllocator* mm__, HParser* parser, const void* params)
return 0; return 0;
} }
void h_llk_free(HParser *parser)
{
HLLkTable *table = parser->backend_data;
h_llktable_free(table);
parser->backend_data = NULL;
parser->backend = PB_PACKRAT;
}
/* LL(k) driver */ /* LL(k) driver */
HParseResult *h_llk_parse(HAllocator* mm__, const HParser* parser, HInputStream* stream) HParseResult *h_llk_parse(HAllocator* mm__, const HParser* parser, HInputStream* stream)
{ {
const HLLkTable *table = parser->data; const HLLkTable *table = parser->backend_data;
assert(table != NULL); assert(table != NULL);
HArena *arena = h_new_arena(mm__, 0); // will hold the results HArena *arena = h_new_arena(mm__, 0); // will hold the results
@ -313,7 +321,8 @@ HParseResult *h_llk_parse(HAllocator* mm__, const HParser* parser, HInputStream*
HParserBackendVTable h__llk_backend_vtable = { HParserBackendVTable h__llk_backend_vtable = {
.compile = h_llk_compile, .compile = h_llk_compile,
.parse = h_llk_parse .parse = h_llk_parse,
.free = h_llk_free
}; };

View file

@ -126,7 +126,6 @@ typedef struct HParser_ {
HParserBackend backend; HParserBackend backend;
void* backend_data; void* backend_data;
void *env; void *env;
void *data; /* e.g., parse tables */
HCFChoice *desugared; /* if the parser can be desugared, its desugared form */ HCFChoice *desugared; /* if the parser can be desugared, its desugared form */
} HParser; } HParser;