From: NeilBrown Date: Fri, 5 Mar 2021 10:17:51 +0000 (+1100) Subject: parergen: fix bug in deriving itemsets X-Git-Url: https://ocean-lang.org/code/?p=ocean;a=commitdiff_plain;h=61c1380f14481ee8883f9e38d711b7ea8fe3661e parergen: fix bug in deriving itemsets The code to check if an item had already been added, was wrong. Signed-off-by: NeilBrown --- diff --git a/csrc/parsergen.mdc b/csrc/parsergen.mdc index fc95688..a6486df 100644 --- a/csrc/parsergen.mdc +++ b/csrc/parsergen.mdc @@ -1488,18 +1488,21 @@ itemsets (or merged with a pre-existing itemset). continue; if (pr->body[bp] != sym) continue; + + bp += 1; if (type >= LALR) la = is->items.data[j]; - pos = symset_find(&newitemset, pr->head->num); - if (bp + 1 == pr->body_size && + if (bp == pr->body_size && pr->precedence > 0 && pr->precedence > precedence) { // new itemset is reducible and has a precedence. precedence = pr->precedence; assoc = pr->assoc; } + pos = symset_find(&newitemset, item_num(p, bp)); + if (pos < 0) - symset_add(&newitemset, item_num(p, bp+1), la); + symset_add(&newitemset, item_num(p, bp), la); else if (type >= LALR) { // Need to merge la set. int la2 = newitemset.data[pos];