checkpoint
authoradam <adam@megacz.com>
Sun, 15 Jan 2006 21:37:00 +0000 (16:37 -0500)
committeradam <adam@megacz.com>
Sun, 15 Jan 2006 21:37:00 +0000 (16:37 -0500)
darcs-hash:20060115213700-5007d-c923da6b8b48f32fba019a187869a5a90a949e02.gz

src/edu/berkeley/sbp/Sequence.java
src/edu/berkeley/sbp/misc/MetaGrammar.java

index 0283c2b..8995b5c 100644 (file)
@@ -36,8 +36,7 @@ public abstract class Sequence extends Element implements Iterable<Element> {
      *  @param e     the elements to match
      *  @param drops only elements of <tt>e</tt> whose corresponding <tt>boolean</tt> in <tt>drops</tt> is <i>false</i> will be included in the output tree
      **/
-    public static Sequence rewritingSequence(Object tag, Element[] e, boolean[] drops, HashSet<Sequence> and, HashSet<Sequence> not) {
-        return new RewritingSequence(tag, e, drops, and, not); }
+    public static Sequence rewritingSequence(Object tag, Element[] e, boolean[] drops) { return new RewritingSequence(tag, e, drops, null, null); }
 
     ////////////////////////////////////////////////////////////////////////////////
 
index 24d3a46..f628813 100644 (file)
@@ -264,8 +264,11 @@ public class MetaGrammar extends StringWalker {
                 for(Sequence s : not) ret = ret.not(s);
             }
             else if (unwrap)    ret = new Sequence.Unwrap(expansion, drops, and, not);
-            else if (tag!=null) ret = Sequence.rewritingSequence(tag, expansion, drops, and, not);
-            else {
+            else if (tag!=null) {
+                ret = Sequence.rewritingSequence(tag, expansion, drops);
+                for(Sequence s : and) ret = ret.and(s);
+                for(Sequence s : not) ret = ret.not(s);
+            } else {
                 int idx = -1;
                 for(int i=0; i<expansion.length; i++)
                     if (!drops[i])