From 21740a3a499b34210969ad5f06a1b1dbd80145f3 Mon Sep 17 00:00:00 2001 From: adam Date: Wed, 4 Jan 2006 04:08:07 -0500 Subject: [PATCH] checkpoint darcs-hash:20060104090807-5007d-87304a4b9d4ef193924a1c8c7c59f1c3fca9affe.gz --- src/edu/berkeley/sbp/Forest.java | 8 +++++--- src/edu/berkeley/sbp/GSS.java | 24 ++++++++++-------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/edu/berkeley/sbp/Forest.java b/src/edu/berkeley/sbp/Forest.java index ed1c9ac..6ac1e4b 100644 --- a/src/edu/berkeley/sbp/Forest.java +++ b/src/edu/berkeley/sbp/Forest.java @@ -144,7 +144,7 @@ public abstract class Forest { } public Iterator> iterator() { return ((IterableForest)resolve()).iterator(); } public HashSet> expand(boolean toss) { return resolve().expand(toss); } - public boolean valid() { resolve(); return valid; } + public boolean valid() { if (valid) return true; resolve(); return valid; } public String toString() { return resolve().toString(); } public Forest resolve() { if (hp==null) return res; @@ -156,11 +156,13 @@ public abstract class Forest { else results = new HashSet(); } if (results != null) { - for(Forest p : hp) for(Body b : (IterableForest)p) results.add(b); + for(Forest p : hp) + for(Body b : (IterableForest)p) + results.add(b); for(Body b : results) { if (b.keep() && (b.creator==null || !b.creator.lame)) continue; - if (!b.keep(results)) continue; if (b.creator!=null && b.creator.lame) continue; + if (!b.keep(results)) continue; valid = true; b.addTo(nh); } diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index 26b6448..04a6310 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -122,11 +122,10 @@ class GSS { reducing = true; HashSet s = new HashSet(); s.addAll(hash.values()); + //while(pendingReduct.size()>0) + //pendingReduct.removeFirst().go(); for(Phase.Node n : s) n.queueEmptyReductions(); for(Phase.Node n : s) n.queueReductions(); - while(pendingReduct.size()>0) - //pendingReduct.iterator().next().go(); - pendingReduct.removeFirst().go(); } /** perform all shift operations, adding promoted nodes to next */ @@ -207,9 +206,12 @@ class GSS { queueReductions(n2); } + private HashSet queued = new HashSet(); /** FIXME */ public void queueReductions(Node n2) { - newReduct(this, n2, null); + if (queued.contains(n2)) return; + queued.add(n2); + new Reduct(this, n2, null).go(); } @@ -232,10 +234,6 @@ class GSS { } } - public void newReduct(Node n, Node n2, Parser.Table.Reduction r) { - new Reduct(n, n2, r)/*.go()*/; - } - // Forest / Completed Reductions ////////////////////////////////////////////////////////////////////////////// /** a pending or completed reduction */ @@ -265,7 +263,7 @@ class GSS { reductions.add(this); pendingReduct.addFirst(this); pendingReductions++; - //if (reducing) go(); + go(); } /** perform the reduction */ @@ -295,17 +293,15 @@ class GSS { // children wind up being children of the newly // created node rather than part of the popped // sequence - + if (r.numPop <= 0) continue; if (r.numPop == 1) { Forest ret = n.cache().get(r); if (ret != null) r.reduce(n, n2, n.phase, ret); else n.cache().put(r, r.reduce(n, n2, n.phase, null)); + } else { + r.reduce(n, n2, Phase.this, null); } } - for(Parser.Table.Reduction r : token==null ? n.state.getEofReductions() : n.state.getReductions(token)) { - if (r.numPop <= 1) continue; - r.reduce(n, n2, Phase.this, null); - } } else if (r.numPop != 1) { r.reduce(n, n2, Phase.this, null); } -- 1.7.10.4