/** implements Tomita's Graph Structured Stack */
class GSS {
+ public static int count = 0;
public GSS() { }
private Phase.Node[] reducing_list = null;
singularReductions = new IntPairMap<Forest>();
expectedInhibit.clear();
expectedInhibit.addAll(inhibited);
+ reset = false;
good = false;
closed = false;
reducing = false;
}
if (!owner.lame)
newNode(parent, pending, state, fromEmptyReduction);
- if (reduction!=null) inhibit(reduction, parent==null?0:parent.phase().pos);
+ if (reduction!=null) uninhibit(reduction, parent==null?0:parent.phase().pos);
if (reduction != null) {
boolean redo = true;
while(redo) {
return true;
}
- public void uninhibit(int p, Sequence s) {
+ public void inhibit(int p, Sequence s) {
if (s.hated!=null)
for(Sequence s2 : s.hated)
inhibited.remove(p, s2);
}
- public void inhibit(Position r, int p) {
+ public void uninhibit(Position r, int p) {
if (r.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.owner().hated) {
if (performed.contains(p,seq)) {
- uninhibit(p, seq);
+ inhibit(p, seq);
//System.out.println("\nresetting due to " + r.owner() + " killing " + seq);
//inhibited.clear();
inhibited.add(p, seq);
reset();
reduce();
}
+ count = 0;
}
+ private boolean reset = false;
class Reset extends RuntimeException { }
/** perform all shift operations, adding promoted nodes to <tt>next</tt> */
}
- public class Waiting {
+ class Waiting {
Node parent;
Forest pending;
State state;
// Node /////////////////////////////////////////////////////////////////////////////////
/** a node in the GSS */
- public final class Node extends FastSet<Node> implements Invokable<Position, Node, Node>, IntegerMappable {
+ final class Node extends FastSet<Node> implements Invokable<Position, Node, Node>, IntegerMappable {
private Forest.Ref holder = null;
private boolean allqueued = false;