checkpoint
[sbp.git] / src / edu / berkeley / sbp / misc / MetaGrammar.java
index d03baaf..2751db7 100644 (file)
@@ -71,37 +71,6 @@ public class MetaGrammar extends ReflectiveWalker {
         return n;
     }
 
-    public Object   _backslash__leftbrace_(String s)      { return SELF; }
-    public Object   _leftbrace_(PreSequence p) {
-        return nonTerminal("braced"+(anon++),
-                           new PreSequence[][] {
-                               new PreSequence[] {
-                                   new PreSequence(new Element[] { leftBrace(),
-                                                                   p.buildUnion(),
-                                                                   rightBrace()
-                                   })
-                               }
-                           },
-                           false,
-                           false);
-    }
-
-    public PreSequence _equals__greater_(PreSequence p, String tag) { p.tag = tag; return p; }
-
-    public PreSequence ps(Object[] o) { return new PreSequence(o); }
-    public PreSequence ps2(Object[] o1, String s, Object[] o2) {
-        if (o1==null) o1 = new Object[0];
-        if (o2==null) o2 = new Object[0];
-        Object[] o3 = new Object[o1.length + o2.length + 1];
-        System.arraycopy(o1, 0, o3, 0, o1.length);
-        o3[o1.length] = string(s);
-        System.arraycopy(o2, 0, o3, o1.length+1, o2.length);
-        PreSequence ret = new PreSequence(o3, s);
-        ret.drops[o1.length] = o3.length>1;
-        return ret;
-    }
-    public PreSequence _slash_(PreSequence p, Object sep) { return p.sparse(sep); }
-
     public String string(Tree<String> tree) {
         String ret = "";
         if (tree.head()!=null) ret += tree.head();
@@ -136,6 +105,35 @@ public class MetaGrammar extends ReflectiveWalker {
         else if ("literal".equals(head)) { Element ret = string(string(tree.child(0))); dropAll.add(ret); return ret; }
         else if ("-".equals(head)) return new Range(walk(tree, 0).toString().charAt(0), walk(tree,1).toString().charAt(0));
         else if ("range".equals(head)) return new Range(walk(tree, 0).toString().charAt(0), walk(tree,0).toString().charAt(0));
+        else if ("gram".equals(head)) return walk(tree, 1);
+        else if ("=>".equals(head)) { PreSequence p = (PreSequence)walk(tree, 0); p.tag = string(tree.child(1)); return p; }
+        else if ("/".equals(head)) return ((PreSequence)walk(tree, 0)).sparse((Element)walk(tree, 1));
+        else if ("ps".equals(head)) return new PreSequence((Element[])walk(tree, 0));
+        else if ("ps2".equals(head)) {
+            Object[] o1 = (Object[])walk(tree, 0);
+            String s = string(tree.child(1));
+            Object[] o2 = (Object[])walk(tree, 2);
+            if (o1==null) o1 = new Object[0];
+            if (o2==null) o2 = new Object[0];
+            Object[] o3 = new Object[o1.length + o2.length + 1];
+            System.arraycopy(o1, 0, o3, 0, o1.length);
+            o3[o1.length] = string(s);
+            System.arraycopy(o2, 0, o3, o1.length+1, o2.length);
+            PreSequence ret = new PreSequence(o3, s);
+            ret.drops[o1.length] = o3.length>1;
+            return ret;
+        } else if ("{".equals(head))
+            return nonTerminal("braced"+(anon++),
+                               new PreSequence[][] {
+                                   new PreSequence[] {
+                                       new PreSequence(new Element[] { leftBrace(),
+                                                                       ((PreSequence)walk(tree, 0)).buildUnion(),
+                                                                       rightBrace()
+                                       })
+                                   }
+                               },
+                               false,
+                               false);
         else if ("[".equals(head) || "[~".equals(head)) {
             boolean positive = "[".equals(head);
             Range[] rr = (Range[])walk(tree, 0);
@@ -149,7 +147,6 @@ public class MetaGrammar extends ReflectiveWalker {
         else return super.walk(tree);
     }
 
-    public Object    gram(Object o, Object g, Object o2) { return g; }
 
     //////////////////////////////////////////////////////////////////////////////