mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-09-15 23:06:01 -06:00
bugfix
This commit is contained in:
@@ -242,34 +242,37 @@ bool PgfLinearizer::TreeLinNode::resolve(PgfLinearizer *linearizer)
|
|||||||
arg->check_category(linearizer, &hypos[i].type->name);
|
arg->check_category(linearizer, &hypos[i].type->name);
|
||||||
|
|
||||||
if (!item->instantiate(item->rule->args[i], arg->value))
|
if (!item->instantiate(item->rule->args[i], arg->value))
|
||||||
break;
|
goto next;
|
||||||
|
|
||||||
arg = arg->next_arg; i++;
|
arg = arg->next_arg; i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t max_value = 1;
|
{
|
||||||
for (size_t i = 0; i < item->vars.size(); i++) {
|
size_t max_value = 1;
|
||||||
if (item->vars[i] == 0)
|
for (size_t i = 0; i < item->vars.size(); i++) {
|
||||||
max_value *= item->rule->vars[i].range;
|
if (item->vars[i] == 0)
|
||||||
}
|
max_value *= item->rule->vars[i].range;
|
||||||
|
|
||||||
for (size_t value = 0; value < max_value; value++) {
|
|
||||||
Item *new_item = new (item) Item;
|
|
||||||
|
|
||||||
size_t v = value;
|
|
||||||
for (size_t i = 0; i < new_item->vars.size(); i++) {
|
|
||||||
if (new_item->vars[i] == 0) {
|
|
||||||
size_t range = new_item->rule->vars[i].range;
|
|
||||||
new_item->vars[i] = (v % range)+1;
|
|
||||||
v = v / range;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t lin_idx = new_item->eval(new_item->rule->lin_idx);
|
for (size_t value = 0; value < max_value; value++) {
|
||||||
items[lin_idx] = new_item;
|
Item *new_item = new (item) Item;
|
||||||
|
|
||||||
this->value = new_item->eval(new_item->rule->res);
|
size_t v = value;
|
||||||
|
for (size_t i = 0; i < new_item->vars.size(); i++) {
|
||||||
|
if (new_item->vars[i] == 0) {
|
||||||
|
size_t range = new_item->rule->vars[i].range;
|
||||||
|
new_item->vars[i] = (v % range)+1;
|
||||||
|
v = v / range;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t lin_idx = new_item->eval(new_item->rule->lin_idx);
|
||||||
|
items[lin_idx] = new_item;
|
||||||
|
|
||||||
|
this->value = new_item->eval(new_item->rule->res);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
next:
|
||||||
delete item;
|
delete item;
|
||||||
|
|
||||||
rule_index++;
|
rule_index++;
|
||||||
|
|||||||
Reference in New Issue
Block a user