return true;
}
+ public void uninhibit(int p, Sequence s) {
+ if (s.hated!=null)
+ for(Sequence s2 : s.hated)
+ inhibited.remove(p, s2);
+ }
+
public void inhibit(Reduction r, int p) {
if (r.position.owner().hated == null) return;
// remember that dead states are still allowed to shift -- just not allowed to reduce
+ boolean reset = false;
for(Sequence seq : r.position.owner().hated) {
if (performed.contains(p,seq)) {
- inhibited.clear();
- inhibited.add(p, seq);
- resets++;
- throw new Reset();
+ uninhibit(p, seq);
+ //System.out.println("\nresetting due to " + r.position.owner() + " killing " + seq);
+ if (!reset) inhibited.add(p, seq);
+ reset = true;
}
- inhibited.add(p, seq);
+ if (!reset) inhibited.add(p, seq);
+ }
+ if (reset) {
+ resets++;
+ throw new Reset();
}
}
this.reduction = reduction;
}
public void perform() {
- System.out.println("performing: " + reduction.position);
+ //System.out.println("performing: " + reduction.position);
newNode(parent, pending, state, fromEmptyReduction, reduction);
}
}