From: adam Date: Sun, 8 Jan 2006 09:40:10 +0000 (-0500) Subject: got rid of Body.creator X-Git-Tag: tag_for_25-Mar~415 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=21c2c8445fd1d0c6ed630a2ecb259ddd9712c750;ds=sidebyside got rid of Body.creator darcs-hash:20060108094010-5007d-732ae891c2be5b21b26a6f741021c2dfb7b2c96d.gz --- diff --git a/src/edu/berkeley/sbp/Forest.java b/src/edu/berkeley/sbp/Forest.java index e675f63..705208f 100644 --- a/src/edu/berkeley/sbp/Forest.java +++ b/src/edu/berkeley/sbp/Forest.java @@ -18,13 +18,12 @@ public abstract class Forest { /** expand this forest into a set of trees */ public abstract HashSet> expand(boolean toss); - public abstract boolean empty(); - static Forest singleton(Token.Location loc, Sequence creator) { return create(loc, null, new Forest[] { }, creator, false, true); } - static Forest singleton(Token.Location loc, Forest body, Sequence creator) { return create(loc, null, new Forest[] { body }, creator, false, true); } - static Forest leaf(Token.Location loc, T tag, Sequence creator) { return create(loc, tag, null, creator, false, false); } - public static Forest create(Token.Location loc, T tag, Forest[] tokens, Sequence creator, boolean unwrap, boolean singleton) { - return new MultiForest(loc, tag, tokens, creator, unwrap, singleton); + static Forest singleton(Token.Location loc) { return create(loc, null, new Forest[] { }, false, true); } + static Forest singleton(Token.Location loc, Forest body) { return create(loc, null, new Forest[] { body }, false, true); } + static Forest leaf(Token.Location loc, T tag) { return create(loc, tag, null, false, false); } + public static Forest create(Token.Location loc, T tag, Forest[] tokens, boolean unwrap, boolean singleton) { + return new MultiForest(loc, tag, tokens, unwrap, singleton); } // Body ////////////////////////////////////////////////////////////////////////////// @@ -34,17 +33,15 @@ public abstract class Forest { private final Token.Location location; private final T tag; private final Forest[] tokens; - private final Sequence creator; private final boolean unwrap; private final boolean singleton; - private Body(Token.Location loc, T tag, Forest[] tokens, Sequence creator, boolean unwrap, boolean singleton) { + private Body(Token.Location loc, T tag, Forest[] tokens, boolean unwrap, boolean singleton) { this.location = loc; this.tag = tag; this.tokens = tokens==null ? emptyForestArray : new Forest[tokens.length]; if (tokens != null) System.arraycopy(tokens, 0, this.tokens, 0, tokens.length); if (tokens != null) for(int i=0; i { * viewed, it becomes immutable */ static class Ref extends IterableForest { - public boolean empty() { - if (res!=null) return res.empty(); - for(Forest f : hp) if (!f.empty()) return false; - return true; - } private FastSet hp = new FastSet(); private Forest res = null; public Ref() { } @@ -151,11 +143,10 @@ public abstract class Forest { // Implementations ////////////////////////////////////////////////////////////////////////////// private static class MultiForest extends IterableForest { - public boolean empty() { return results.size()>0; } private final FastSet> results; private MultiForest(FastSet> results) { this.results = results; } - public MultiForest(Token.Location loc, T tag, Forest[] tokens, Sequence creator, boolean unwrap, boolean singleton) { - this.results = new FastSet>(new Body(loc, tag, tokens, creator, unwrap, singleton)); + public MultiForest(Token.Location loc, T tag, Forest[] tokens, boolean unwrap, boolean singleton) { + this.results = new FastSet>(new Body(loc, tag, tokens, unwrap, singleton)); } public Iterator> iterator() { return results.iterator(); } diff --git a/src/edu/berkeley/sbp/Parser.java b/src/edu/berkeley/sbp/Parser.java index c270a90..3609182 100644 --- a/src/edu/berkeley/sbp/Parser.java +++ b/src/edu/berkeley/sbp/Parser.java @@ -37,7 +37,7 @@ public abstract class Parser { GSS gss = new GSS(); Token.Location loc = input.getLocation(); GSS.Phase current = gss.new Phase(null, this, null, input.next(1, 0, 0), loc, null); - current.newNode(null, Forest.leaf(null, null, null), pt.start, true); + current.newNode(null, Forest.leaf(null, null), pt.start, true); int count = 1; for(;;) { loc = input.getLocation(); diff --git a/src/edu/berkeley/sbp/Sequence.java b/src/edu/berkeley/sbp/Sequence.java index 610af58..adf93fa 100644 --- a/src/edu/berkeley/sbp/Sequence.java +++ b/src/edu/berkeley/sbp/Sequence.java @@ -170,7 +170,7 @@ public abstract class Sequence extends Element implements Iterable { private final Object result; public Constant(Element[] e, Object result, HashSet and, HashSet not) { super(e, and, not); this.result = result; } public Forest postReduce(Token.Location loc, Forest[] args) { - return (Forest)Forest.leaf(loc, result, this); + return (Forest)Forest.leaf(loc, result); } static class Drop extends Constant { public Drop(Element[] e, HashSet and, HashSet not, boolean lame) { @@ -185,7 +185,7 @@ public abstract class Sequence extends Element implements Iterable { private final int idx; public Singleton(Element e, HashSet and, HashSet not) { this(new Element[] { e }, 0, and, not); } public Singleton(Element[] e, int idx, HashSet and, HashSet not) { super(e, and, not); this.idx = idx; } - public Forest postReduce(Token.Location loc, Forest[] args) { return (Forest)Forest.singleton(loc, args[idx], this); } + public Forest postReduce(Token.Location loc, Forest[] args) { return (Forest)Forest.singleton(loc, args[idx]); } } public static class Unwrap extends Sequence { @@ -194,13 +194,13 @@ public abstract class Sequence extends Element implements Iterable { public Unwrap(Element[] e, boolean[] drops, HashSet and, HashSet not) { super(e, and, not); this.drops = drops; } public Forest postReduce(Token.Location loc, Forest[] args) { for(int i=0; i[] args2 = new Forest[count]; int j = 0; for(int i=0; i { int j = 0; for(int i=0; i top() { return new IntegerTopology(); } public Forest shiftedToken(CharToken ct, Token.Location loc) { - return Forest.create(loc, ct.result(), null, null, false, false); + return Forest.create(loc, ct.result(), null, false, false); } }