checkpoint
authoradam <adam@megacz.com>
Sun, 22 Jan 2006 08:06:41 +0000 (03:06 -0500)
committeradam <adam@megacz.com>
Sun, 22 Jan 2006 08:06:41 +0000 (03:06 -0500)
darcs-hash:20060122080641-5007d-ada17d447bd9b9646a22b3e6f105d262fafb2765.gz

src/edu/berkeley/sbp/misc/MetaGrammar.java
src/edu/berkeley/sbp/util/VisitableMap.java

index 51c8d1a..7fe8afa 100644 (file)
@@ -102,6 +102,9 @@ public class MetaGrammar extends StringWalker {
         return ret;
     }
 
         return ret;
     }
 
+    public Sequence sequence(Object o, boolean lame) {
+        return new PreSequence((Element[])Reflection.lub((Object[])o), null).buildSequence(null, lame, false);
+    }
     public Object walk(Tree<String> tree) {
         String head = tree.head();
         if (tree.numChildren()==0) return super.walk(tree);
     public Object walk(Tree<String> tree) {
         String head = tree.head();
         if (tree.numChildren()==0) return super.walk(tree);
@@ -117,10 +120,8 @@ public class MetaGrammar extends StringWalker {
         else if ("++".equals(head))  return Repeat.maximal1((Element)walk(tree.child(0)));
         else if ("?".equals(head))   return Repeat.maybe((Element)walk(tree.child(0)));
         else if ("!".equals(head))   { Element e = (Element)walk(tree.child(0)); dropAll.add(e); return e; }
         else if ("++".equals(head))  return Repeat.maximal1((Element)walk(tree.child(0)));
         else if ("?".equals(head))   return Repeat.maybe((Element)walk(tree.child(0)));
         else if ("!".equals(head))   { Element e = (Element)walk(tree.child(0)); dropAll.add(e); return e; }
-        else if ("&".equals(head))
-            return ((Sequence)walk(tree,0)).and(new PreSequence((Element[])Reflection.lub((Object[])walk(tree, 1)), null).buildSequence(null, true, false));
-        else if ("&~".equals(head))
-            return ((Sequence)walk(tree,0)).not(new PreSequence((Element[])Reflection.lub((Object[])walk(tree, 1)), null).buildSequence(null, true, false));
+        else if ("&".equals(head))   return ((Sequence)walk(tree,0)).and(sequence(walk(tree, 1), true));
+        else if ("&~".equals(head))  return ((Sequence)walk(tree,0)).not(sequence(walk(tree, 1), true));
         else if ("epsilon".equals(head)) return Union.epsilon;
         else if ("()".equals(head)) return Union.epsilon;
         else if (")".equals(head)) return SELF;
         else if ("epsilon".equals(head)) return Union.epsilon;
         else if ("()".equals(head)) return Union.epsilon;
         else if (")".equals(head)) return SELF;
@@ -137,8 +138,7 @@ public class MetaGrammar extends StringWalker {
         else if ("psy".equals(head)) return (PreSequence)walk(tree, 0);
         else if ("->".equals(head)) { PreSequence p = (PreSequence)walk(tree, 0); p.noFollow = (Element)walk(tree, 1); return p; }
         else if ("/".equals(head)) return ((PreSequence)walk(tree, 0)).sparse((Element)walk(tree, 1));
         else if ("psy".equals(head)) return (PreSequence)walk(tree, 0);
         else if ("->".equals(head)) { PreSequence p = (PreSequence)walk(tree, 0); p.noFollow = (Element)walk(tree, 1); return p; }
         else if ("/".equals(head)) return ((PreSequence)walk(tree, 0)).sparse((Element)walk(tree, 1));
-        else if ("~".equals(head))
-            return new Hack(new Atom.Invert(new Atom.Infer((Element)walk(tree, 0))));
+        else if ("~".equals(head)) return new Hack(new Atom.Invert(new Atom.Infer((Element)walk(tree, 0))));
         else if ("ps".equals(head)) return new PreSequence((Element[])walk(tree, 0));
         else if ("qprod".equals(head)) {
             String s = string(tree.child(0));
         else if ("ps".equals(head)) return new PreSequence((Element[])walk(tree, 0));
         else if ("qprod".equals(head)) {
             String s = string(tree.child(0));
index ab41a81..df6a1a1 100644 (file)
@@ -1,7 +1,13 @@
 package edu.berkeley.sbp.util;
 import java.util.*;
 
 package edu.berkeley.sbp.util;
 import java.util.*;
 
+/** a Map that knows how to apply an Invokable to all its elements */
 public interface VisitableMap<K,V> {
 public interface VisitableMap<K,V> {
+
+    /** invokes <tt>ivbc</tt> on each element of this map, passing constant arguments <tt>b</tt> and <tt>c</tt> */
     public <B,C> void invoke(K k, Invokable<V,B,C> ivbc, B b, C c);
     public <B,C> void invoke(K k, Invokable<V,B,C> ivbc, B b, C c);
+
+    /** returns true iff this map contains some value <tt>v</tt> for key <tt>k</tt> */
     public boolean contains(K k);
     public boolean contains(K k);
+
 }
 }