checkpoint
authoradam <adam@megacz.com>
Wed, 5 Jul 2006 04:00:24 +0000 (00:00 -0400)
committeradam <adam@megacz.com>
Wed, 5 Jul 2006 04:00:24 +0000 (00:00 -0400)
darcs-hash:20060705040024-5007d-b154593b9d848adadc403c3979c2d8981db69f2d.gz

Makefile
src/edu/berkeley/sbp/Forest.java
src/edu/berkeley/sbp/Tree.java
src/edu/berkeley/sbp/bind/Bindable.java
src/edu/berkeley/sbp/misc/Demo.java
src/edu/berkeley/sbp/misc/DemoMetaGrammarTree.java [new file with mode: 0644]
src/edu/berkeley/sbp/tib/TibDoc.java
src/edu/berkeley/sbp/util/PrintableTree.java

index 181de0b..8b46585 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -73,6 +73,13 @@ boot: edu.berkeley.sbp.jar
                ../tests/meta.g \
                edu.berkeley.sbp.misc.MetaGrammarTree
 
+newboot: edu.berkeley.sbp.jar
+       cd src; \
+       $(java) -cp ../$< \
+               edu.berkeley.sbp.misc.Demo \
+               ../tests/meta.g \
+               edu.berkeley.sbp.misc.DemoMetaGrammarTree
+
 edu.berkeley.sbp.jar: $(shell find src -name \*.java)
        mkdir -p bin
        javac -cp javax.servlet.jar:tests/ArchSimA3.jar:tests/grappa.jar -d bin -sourcepath src $^
index 937a229..170604a 100644 (file)
@@ -222,7 +222,7 @@ public abstract class Forest<T> /*extends PrintableTree<Forest.MyBody<T>>*/
         }
 
         protected String  headToString()         { return tag==null?null:tag.toString(); }
-        protected String  headToJava()           { return null; }
+        protected String  headToJava()           { return "null"; }
         protected String  left()                 { return "{"; }
         protected String  right()                { return "}"; }
         protected boolean ignoreSingleton()      { return false; }
@@ -324,7 +324,7 @@ public abstract class Forest<T> /*extends PrintableTree<Forest.MyBody<T>>*/
     private static final Forest[] emptyForestArray = new Forest[0];
 
     protected String  headToString()    { return null; }
-    protected String  headToJava()      { return null; }
+    protected String  headToJava()      { return "null"; }
     protected String  left()            { return "<?"; }
     protected String  right()           { return "?>"; }
     protected boolean ignoreSingleton() { return true; }
index ca351d3..38fcd32 100644 (file)
@@ -42,7 +42,15 @@ public class Tree<T>
     }
 
     protected String headToString() { return head==null?null:head.toString(); }
-    protected String headToJava()   { return head==null?null:StringUtil.toJavaString(head+""); }
+    protected String headToJava()   {
+        if (head==null) return null;
+        if (head instanceof ToJava) {
+            StringBuffer sb = new StringBuffer();
+            ((ToJava)head).toJava(sb);
+            return sb.toString();
+        }
+        return head==null?"null":("\""+StringUtil.toJavaString(head.toString())+"\"");
+    }
     protected String left()   { return "{"; }
     protected String right()  { return "}"; }
     protected boolean ignoreSingleton() { return false; }
index 9e5564e..c2c0a02 100644 (file)
@@ -10,7 +10,7 @@ import java.lang.reflect.*;
 import java.io.*;
 import static edu.berkeley.sbp.util.Reflection.*;
 
-public abstract class Bindable {
+public abstract class Bindable implements ToJava {
 
     public abstract String getSimpleName();
     public abstract String toString();
@@ -37,6 +37,15 @@ public abstract class Bindable {
         public Object impose(Object[] fields) { return Reflection.impose(_method, fields); }
         public Annotation[][] getArgAnnotations() { return _method.getParameterAnnotations(); }
         public String[]       getArgNames() { return new String[_method.getParameterTypes().length]; }
+        public void toJava(StringBuffer sb) {
+            sb.append("Bindable.create(");
+            sb.append(_method.getDeclaringClass().getName().replace('$','.'));
+            sb.append(".class.getMethod(\"");
+            sb.append(_method.getName());
+            sb.append("\", ");
+            appendClassArray(sb, _method.getParameterTypes());
+            sb.append("))");
+        }
     }
 
     private static class BindableConstructor extends Bindable {
@@ -48,6 +57,13 @@ public abstract class Bindable {
         public Object impose(Object[] fields) { return Reflection.impose(_constructor, fields); }
         public Annotation[][] getArgAnnotations() { return _constructor.getParameterAnnotations(); }
         public String[]       getArgNames() { return new String[_constructor.getParameterTypes().length]; }
+        public void toJava(StringBuffer sb) {
+            sb.append("Bindable.create(");
+            sb.append(_constructor.getDeclaringClass().getName().replace('$','.'));
+            sb.append(".class.getConstructor(");
+            appendClassArray(sb, _constructor.getParameterTypes());
+            sb.append("))");
+        }
     }
 
     private static class BindableClass extends Bindable {
@@ -71,6 +87,27 @@ public abstract class Bindable {
                 ret[i] = fields[i].getName();
             return ret;
         }
+        public void toJava(StringBuffer sb) {
+            sb.append("Bindable.create(");
+            sb.append(_class.getName().replace('$','.'));
+            sb.append(".class)");
+        }
+    }
+
+
+    private static void appendClassArray(StringBuffer sb, Class[] c) {
+        sb.append("new Class[] {");
+        for(int i=0; i<c.length; i++) {
+            sb.append(makeClass(c[i]));
+            sb.append(".class");
+            if (i<c.length-1)
+                sb.append(",");
+        }
+        sb.append("}");
     }
 
+    private static String makeClass(Class c) {
+        if (!c.isArray()) return c.getName().replace('$','.');
+        return makeClass(c.getComponentType())+"[]";
+    }
 }
index fa6d733..993b285 100644 (file)
@@ -12,26 +12,66 @@ public class Demo {
     
     public static boolean harsh = false;
 
-    public static void main(String[] s) throws Exception {
+    public static void main(String[] args) throws Exception {
+        if (args.length != 2) {
+            System.err.println("usage: java " + Demo.class.getName() + " grammarfile.g com.yourdomain.package.ClassName");
+            System.exit(-1);
+        }
+        //StringBuffer sbs = new StringBuffer();
+        //((MetaGrammar)new MetaGrammar().walk(meta)).nt.get("e").toString(sbs);
+        //System.err.println(sbs);
+        String className   = args[1].substring(args[1].lastIndexOf('.')+1);
+        String packageName = args[1].substring(0, args[1].lastIndexOf('.'));
+        String fileName    = packageName.replace('.', '/') + "/" + className + ".java";
+
+        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
+        StringBuffer out = new StringBuffer();
+
+        boolean skip = false;
+        for(String s = br.readLine(); s != null; s = br.readLine()) {
+            if (s.indexOf("DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED") != -1 && s.indexOf("\"")==-1) skip = true;
+            if (s.indexOf("DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED") != -1 && s.indexOf("\"")==-1) break;
+            if (!skip) out.append(s+"\n");
+        }
 
+        out.append("\n        // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED\n");
+
+        /*
         ReflectiveMeta m = new ReflectiveMeta();
-        Tree<String> res = new CharParser(MetaGrammar.make()).parse(new FileInputStream(s[0])).expand1();
+        Tree<String> res = new CharParser(MetaGrammar.make()).parse(new FileInputStream(args[0])).expand1();
         MetaGrammar.Meta.MetaGrammarFile mgf = m.new MetaGrammarFile(res);
         MetaGrammar.BuildContext bc = new MetaGrammar.BuildContext(mgf);
 
         Union meta = mgf.get("s").build(bc);
-        Tree t = new CharParser(meta).parse(new FileInputStream(s[1])).expand1();
-
+        Tree t = new CharParser(meta).parse(new FileInputStream(args[0])).expand1();
+        */
+        Tree t = DemoMetaGrammarTree.meta;
         Union u = Demo.make(t, "s");
 
         System.err.println();
         System.err.println("== parsing with parsed grammar =================================================================================");
-        t = new CharParser((Union)u).parse(new FileInputStream(s[1])).expand1();
-        System.out.println(t.toPrettyString());
-
-        System.err.println("== parsing with parsed-parsed grammar ==========================================================================");
-        t = new CharParser(new Context(t, m).build()).parse(new FileInputStream(s[1])).expand1();
+        t = new CharParser((Union)u).parse(new FileInputStream(args[0])).expand1();
         System.out.println(t.toPrettyString());
+        //Forest<String> fs = new CharParser(make()).parse(new FileInputStream(args[0]));
+        //System.out.println(fs.expand1());
+
+        //GraphViz gv = new GraphViz();
+        //fs.toGraphViz(gv);
+        //FileOutputStream fox = new FileOutputStream("out.dot");
+        //gv.dump(fox);
+        //fox.close();
+
+        t.toJava(out);
+        out.append("\n        // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED\n");
+
+        for(String s = br.readLine(); s != null; s = br.readLine()) out.append(s+"\n");
+        br.close();
+
+        OutputStream os = new FileOutputStream(fileName);
+        PrintWriter p = new PrintWriter(new OutputStreamWriter(os));
+        p.println(out.toString());
+        p.flush();
+        os.close();
     }
 
     public static class ReflectiveMetaPlain extends ReflectiveMeta {
@@ -43,7 +83,7 @@ public class Demo {
         }
     }
 
-    public static class ReflectiveMeta extends MetaGrammar.Meta {
+    public static class ReflectiveMeta /*extends MetaGrammar.Meta*/ {
         private final Class _cl;
         private final Class[] _inner;
         public ReflectiveMeta() {
@@ -197,24 +237,34 @@ public class Demo {
             }
         }
         public Sequence makeSequence(Production p) {
-            return Sequence.rewritingSequence(new TargetReducer(p, buildSequence(p), "reducer-"+this, _bindable, isRaw()),
+            return Sequence.rewritingSequence(new TargetReducer(buildSequence(p), _bindable, isRaw()),
                                               p.elements, p.labels, p.drops);
         }
 
     }
 
-    public static class TargetReducer implements Tree.TreeFunctor<Object,Object> {
+    public static class TargetReducer implements Tree.TreeFunctor<Object,Object>, ToJava {
         private int[] map;
-        private String name;
         private Bindable _bindable;
         private boolean _israw;
-        public TargetReducer(Production p, int[] map, String name, Bindable b, boolean raw) {
+
+        public void toJava(StringBuffer sb) {
+            sb.append("new Demo.TargetReducer(new int[] {");
+            for(int i=0; i<map.length; i++)
+                sb.append((i+"")+(i<map.length-1 ? "," : ""));
+            sb.append("}, ");
+            _bindable.toJava(sb);
+            sb.append(", ");
+            sb.append(_israw ? "true" : "false");
+            sb.append(")");
+        }
+        
+        public TargetReducer(int[] map, Bindable b, boolean raw) {
             this.map = map;
-            this.name = name;
             this._bindable = b;
             this._israw = raw;
         }
-        public String toString() { return name; }
+        public String toString() { return "reducer-"+_bindable.toString(); }
         public Object invoke(Iterable<Tree<Object>> t) {
             if (_israw) return _bindable.impose(new Object[] { t });
             ArrayList ret = new ArrayList();
@@ -241,6 +291,7 @@ public class Demo {
 
     public static Union cached = null;
     public static Union make() {
+        /*
         if (cached != null) return cached;
         try {
             ReflectiveMeta m = new ReflectiveMeta();
@@ -253,6 +304,8 @@ public class Demo {
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
+        */
+        return make(DemoMetaGrammarTree.meta, "s");
     }
     public static Union make(Tree t, String s) { return make(t, s, new ReflectiveMeta()); }
     public static Union make(Tree t, String s, ReflectiveMeta rm) {
diff --git a/src/edu/berkeley/sbp/misc/DemoMetaGrammarTree.java b/src/edu/berkeley/sbp/misc/DemoMetaGrammarTree.java
new file mode 100644 (file)
index 0000000..a821ef8
--- /dev/null
@@ -0,0 +1,507 @@
+package edu.berkeley.sbp.misc;
+import edu.berkeley.sbp.*;
+import edu.berkeley.sbp.util.*;
+import edu.berkeley.sbp.bind.*;
+
+public class DemoMetaGrammarTree {
+    static final Tree meta;
+    static {
+        Tree t = null;
+        try {
+            t = 
+
+
+
+
+        // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED
+new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Grammar.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("bang", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.AnonUn.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "g", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "G", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { })})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("bang", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "G", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("plusfollow", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "N", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "T", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "i", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "l", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "N", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "T", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "i", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "l", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "W", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "=", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "R", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "H", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "R", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "H", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("plusfollow", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.AnonUn.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("plusfollow", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.AnonUn.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("bang", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "|", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("bang", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})})})})})})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.AnonUn.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("bang", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, ">", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("bang", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})})})})})})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "E", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "l", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "t", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("starfollow", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "P", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "p", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "E", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "l", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "t", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.AnonUn.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "Q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "t", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "W", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, ":", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, ":", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "P", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "P", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "/", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "P", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "-", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, ">", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "p", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "x", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "P", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "&", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "E", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "l", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "t", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "&", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "~", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "E", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "l", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "t", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tilde", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.CharClass.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Range[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "-", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "]", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "\\", new edu.berkeley.sbp.Tree[] { })})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "p", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "R", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "g", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "g", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "-", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { })})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.AnonUn.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "Q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "t", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "W", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, ":", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "T", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "m", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "i", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "l", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "W", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "l", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "i", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "t", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "l", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "Q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "t", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "(", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, ")", new edu.berkeley.sbp.Tree[] { })})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "{", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "P", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "}", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "[", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("star", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "R", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "g", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "]", new edu.berkeley.sbp.Tree[] { })})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("arrow", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "+", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "+", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tilde", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.CharClass.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Range[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "/", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("arrow", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "+", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tilde", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.CharClass.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Range[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "+", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "+", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "+", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "/", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "+", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "/", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("arrow", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "*", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "*", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tilde", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.CharClass.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Range[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "/", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("arrow", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "*", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tilde", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.CharClass.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Range[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "*", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "*", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "*", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "/", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "*", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "/", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "!", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "?", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "^", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "Q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "t", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "(", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "W", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, ")", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("slash", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class,edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "(", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "R", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "H", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "S", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, ")", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("caret", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "~", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "^", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "^", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "^", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { })})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "W", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("plusmax", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.CharClass.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Range[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class,char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "z", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class,char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "A", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "Z", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class,char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "0", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "9", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "_", new edu.berkeley.sbp.Tree[] { })})})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "Q", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "u", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "o", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "t", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "\"", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.AnonUn.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("plus", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.AnonUn.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tilde", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.CharClass.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Range[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "\"", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "\\", new edu.berkeley.sbp.Tree[] { })})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "p", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })})})})})})})})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "\"", new edu.berkeley.sbp.Tree[] { })})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "\"", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "\"", new edu.berkeley.sbp.Tree[] { })})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "c", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "a", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "p", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("retur", new Class[] {})), false), new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "\\", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("lf", new Class[] {})), false), new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "\\", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { })})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "\\", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tilde", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.CharClass.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Range[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "n", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "r", new edu.berkeley.sbp.Tree[] { })})})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, " ", new edu.berkeley.sbp.Tree[] { })})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("retur", new Class[] {})), false), new edu.berkeley.sbp.Tree[] { })})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("lf", new Class[] {})), false), new edu.berkeley.sbp.Tree[] { })})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "(", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, ")", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("starmax", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { })})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "(", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, ")", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("starmax", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { })})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "/", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "/", new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("star", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.AnonUn.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("tilde", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.CharClass.class.getConstructor(new Class[] {edu.berkeley.sbp.misc.Demo.MG.Range[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.Range.class.getConstructor(new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("retur", new Class[] {})), false), new edu.berkeley.sbp.Tree[] { })})})})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("retur", new Class[] {})), false), new edu.berkeley.sbp.Tree[] { })})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})})})})})})})})}),
+        new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.Demo.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }),
+        new edu.berkeley.sbp.Tree(null, "p", new edu.berkeley.sbp.Tree[] { })}),
+        new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.Demo.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.class.getMethod("plusmax", new Class[] {edu.berkeley.sbp.misc.Demo.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Demo.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.Demo.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { })})})})})})})})})})})})
+        // DO NOT EDIT STUFF ABOVE: IT IS AUTOMATICALLY GENERATED
+                ;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        meta = t;
+    }
+}
+
+
+
+
+
+
+
index 9587a14..bd9cb7e 100644 (file)
@@ -478,13 +478,17 @@ toContex ll = prefix ++ (concatMap tl ll) ++ suffix
     }
 
     public static void main(String[] s) throws Exception {
+            /*
         try {
 
+               FIXME FIXME
+
             Demo.ReflectiveMeta m =
                 new Demo.ReflectiveMeta(TibDoc.TD.class);
             Tree<String> res = new CharParser(MetaGrammar.make()).parse(new FileInputStream(s[0])).expand1();
             MetaGrammar.Meta.MetaGrammarFile mgf = m.new MetaGrammarFile(res);
             MetaGrammar.BuildContext bc = new MetaGrammar.BuildContext(mgf);
+            
             Union tibgram = mgf.get("s").build(bc);
 
             System.err.println("parsing " + s[1]);
@@ -493,6 +497,9 @@ toContex ll = prefix ++ (concatMap tl ll) ++ suffix
             
             Object result = ((Functor)t.head()).invoke(t);
             System.out.println((TD.Doc)result);
+            */
+
+
             /*
             System.out.println("parsing " + s[0]);
             Tree<String> res = new CharParser(MetaGrammar.make()).parse(new FileInputStream(s[0])).expand1();
@@ -510,7 +517,7 @@ toContex ll = prefix ++ (concatMap tl ll) ++ suffix
             p.println(sb);
             p.flush();
             p.close();
-            */
+
         } catch (Ambiguous a) {
             FileOutputStream fos = new FileOutputStream("/Users/megacz/Desktop/out.dot");
             PrintWriter p = new PrintWriter(new OutputStreamWriter(fos));
@@ -524,6 +531,7 @@ toContex ll = prefix ++ (concatMap tl ll) ++ suffix
         } catch (Exception e) {
             e.printStackTrace();
         }
+            */
     }
 
 }
index a6c2f6e..f32b0c9 100644 (file)
@@ -70,7 +70,7 @@ public abstract class PrintableTree<T extends PrintableTree> implements Iterable
     public void toJava(StringBuffer sb) {
         sb.append("new "+this.getClass().getName()+"(null, ");
         String head = headToJava();
-        sb.append(head==null ? "null" : "\"" + head + "\"");
+        sb.append(head);
         sb.append(", new "+this.getClass().getName()+"[] { ");
         boolean first = true;
         for(T t : this) {