From: adam Date: Wed, 4 Jan 2006 10:53:17 +0000 (-0500) Subject: checkpoint X-Git-Tag: tag_for_25-Mar~442 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=7d87b6f9aa045ec7e4a802a88240a235c5fde5a3 checkpoint darcs-hash:20060104105317-5007d-bed73d0e9cb6781fca85c4837237d63133667a5a.gz --- diff --git a/src/edu/berkeley/sbp/Parser.java b/src/edu/berkeley/sbp/Parser.java index 817aea6..a24c523 100644 --- a/src/edu/berkeley/sbp/Parser.java +++ b/src/edu/berkeley/sbp/Parser.java @@ -312,9 +312,8 @@ public abstract class Parser { public String toString() { return "[reduce " + position + "]"; } public Forest reduce(GSS.Phase.Node parent) { - Forest rex = numPop==0 ? zero() : null; - Forest ret = reduce(parent, numPop-1, rex, null, parent.phase()); - return ret; + if (numPop==0) return finish(parent, zero(), parent.phase()); + return reduce(parent, numPop-1, null, null, parent.phase()); } public Forest reduce(GSS.Phase.Node parent, GSS.Phase.Node onlychild) { @@ -357,12 +356,16 @@ public abstract class Parser { for(GSS.Phase.Node child : parent.parents()) reduce(child, pos-1, rex, null, target); } else { - State state = parent.state.gotoSetNonTerminals.get(position.owner()); - if (state!=null) - target.newNode(parent, rex, state, numPop<=0, parent.phase()); + return finish(parent, rex, target); } return rex; } + private Forest finish(GSS.Phase.Node parent, Forest result, GSS.Phase target) { + State state = parent.state.gotoSetNonTerminals.get(position.owner()); + if (state!=null) + target.newNode(parent, result, state, numPop<=0, parent.phase()); + return result; + } } }