X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FParser.java;h=a156252902572b81284f3adb2f53de326ba75ea3;hb=1b46ed935f0fb6fb18afd40f5d1771be030a5a0d;hp=41eae027893dfd1298f3a58ce7ce9edf8ac07bc3;hpb=ddf7ffb485e6b3dd0fe6b1b39b47a21a1e4b8973;p=sbp.git diff --git a/src/edu/berkeley/sbp/Parser.java b/src/edu/berkeley/sbp/Parser.java index 41eae02..a156252 100644 --- a/src/edu/berkeley/sbp/Parser.java +++ b/src/edu/berkeley/sbp/Parser.java @@ -126,7 +126,7 @@ public abstract class Parser { public final int idx = master_state_idx++; private final HashSet hs; - private transient HashMap gotoSetNonTerminals = new HashMap(); + public transient HashMap gotoSetNonTerminals = new HashMap(); private transient TopologicalBag gotoSetTerminals = new TopologicalBag(); private TopologicalBag reductions = new TopologicalBag(); @@ -272,47 +272,20 @@ public abstract class Parser { return zero = position.rewrite(null); } - public void reduce(GSS.Phase.Node parent) { - Forest[] holder = new Forest[position.pos]; - if (position.pos==0) finish(parent, zero(), parent.phase(), holder); - else reduce(parent, position.pos-1, parent.phase(), holder); - } - - public void reduce(GSS.Phase.Node parent, GSS.Phase.Node onlychild) { - Forest[] holder = new Forest[position.pos]; - if (position.pos<=0) throw new Error("called wrong form of reduce()"); - int pos = position.pos-1; - Forest old = holder[pos]; - holder[pos] = parent.pending(); - if (pos==0) { - System.arraycopy(holder, 0, position.holder, 0, holder.length); - finish(onlychild, position.rewrite(parent.phase().getLocation()), parent.phase(), holder); - } else { - reduce(onlychild, pos-1, parent.phase(), holder); - } - holder[pos] = old; - } - // FIXME: this could be more elegant and/or cleaner and/or somewhere else - private void reduce(GSS.Phase.Node parent, int pos, GSS.Phase target, Forest[] holder) { + public void reduce(GSS.Phase.Node parent, int pos, GSS.Phase target, Forest[] holder) { Forest old = holder[pos]; holder[pos] = parent.pending(); if (pos==0) { System.arraycopy(holder, 0, position.holder, 0, holder.length); for(int i=0; i