unwrap (reshape) singleton terminal symbols correctly
This commit is contained in:
parent
010d957fe8
commit
4138506273
1 changed files with 10 additions and 0 deletions
|
|
@ -37,6 +37,15 @@ static void collect_nts(HCFGrammar *grammar, HCFChoice *symbol);
|
|||
static void collect_geneps(HCFGrammar *grammar);
|
||||
|
||||
|
||||
static const HParsedToken *h_act_first(const HParseResult *p)
|
||||
{
|
||||
assert(p->ast);
|
||||
assert(p->ast->token_type == TT_SEQUENCE);
|
||||
assert(p->ast->seq->used > 0);
|
||||
|
||||
return p->ast->seq->elements[0];
|
||||
}
|
||||
|
||||
/* Convert 'parser' into CFG representation by desugaring and compiling the set
|
||||
* of nonterminals.
|
||||
* A NULL return means we are unable to represent the parser as a CFG.
|
||||
|
|
@ -63,6 +72,7 @@ HCFGrammar *h_cfgrammar(HAllocator* mm__, const HParser *parser)
|
|||
nt->seq[0]->items[0] = desugared;
|
||||
nt->seq[0]->items[1] = NULL;
|
||||
nt->seq[1] = NULL;
|
||||
nt->reshape = h_act_first;
|
||||
h_hashset_put(g->nts, nt);
|
||||
g->start = nt;
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue