checkpoint
[sbp.git] / src / edu / berkeley / sbp / misc / MetaGrammar.java
index 4348dec..b1a3e8c 100644 (file)
@@ -258,7 +258,11 @@ public class MetaGrammar extends StringWalker {
             }
             Element[] expansion = o2;
             Sequence ret = null;
-            if (dropAll || lame) ret = Sequence.drop(expansion, and, not, lame);
+            if (dropAll || lame) {
+                ret = Sequence.drop(expansion, lame);
+                for(Sequence s : and) ret = ret.and(s);
+                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 {
@@ -266,9 +270,13 @@ public class MetaGrammar extends StringWalker {
                 for(int i=0; i<expansion.length; i++)
                     if (!drops[i])
                         if (idx==-1) idx = i;
-                        else throw new Error("multiple non-dropped elements in sequence: " + Sequence.drop(expansion,null,null,false));
+                        else throw new Error("multiple non-dropped elements in sequence: " + Sequence.drop(expansion,false));
                 if (idx != -1) ret = Sequence.singleton(expansion, idx, and, not);
-                else           ret = Sequence.drop(expansion, and, not, false);
+                else           {
+                    ret = Sequence.drop(expansion, false);
+                    for(Sequence s : and) ret = ret.and(s);
+                    for(Sequence s : not) ret = ret.not(s);
+                }
             }
             set.add(ret);
             if (this.noFollow != null) ret.noFollow = new Atom.Invert(new Atom.Infer(this.noFollow));