From 61c1380f14481ee8883f9e38d711b7ea8fe3661e Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Fri, 5 Mar 2021 21:17:51 +1100 Subject: [PATCH] parergen: fix bug in deriving itemsets The code to check if an item had already been added, was wrong. Signed-off-by: NeilBrown --- csrc/parsergen.mdc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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]; -- 2.43.0