Select ambiguous alternatives by minimizing error size
This commit is contained in:
parent
1fb6065f02
commit
fd4c33209e
10 changed files with 329 additions and 174 deletions
|
|
@ -110,10 +110,13 @@ recur:
|
|||
void ts_tree_set_children(TSTree *self, size_t child_count, TSTree **children) {
|
||||
if (self->child_count > 0)
|
||||
ts_free(self->children);
|
||||
|
||||
self->children = children;
|
||||
self->child_count = child_count;
|
||||
self->named_child_count = 0;
|
||||
self->visible_child_count = 0;
|
||||
size_t error_size = 0;
|
||||
|
||||
for (size_t i = 0; i < child_count; i++) {
|
||||
TSTree *child = children[i];
|
||||
|
||||
|
|
@ -136,9 +139,16 @@ void ts_tree_set_children(TSTree *self, size_t child_count, TSTree **children) {
|
|||
if (child->symbol == ts_builtin_sym_error) {
|
||||
self->fragile_left = self->fragile_right = true;
|
||||
self->parse_state = TS_TREE_STATE_ERROR;
|
||||
} else {
|
||||
error_size += child->error_size;
|
||||
}
|
||||
}
|
||||
|
||||
if (self->symbol == ts_builtin_sym_error)
|
||||
self->error_size = self->size.chars;
|
||||
else
|
||||
self->error_size = error_size;
|
||||
|
||||
if (child_count > 0) {
|
||||
self->lex_state = children[0]->lex_state;
|
||||
if (children[0]->fragile_left)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue