Select ambiguous alternatives by minimizing error size

This commit is contained in:
Max Brunsfeld 2016-04-24 00:54:20 -07:00
parent 1fb6065f02
commit fd4c33209e
10 changed files with 329 additions and 174 deletions

View file

@ -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)