checkpoint
[sbp.git] / src / edu / berkeley / sbp / tib / TibDoc.java
index a262191..e753933 100644 (file)
@@ -7,10 +7,11 @@ package edu.berkeley.sbp.tib;
 //import org.ibex.io.*;
 import edu.berkeley.sbp.*;
 import edu.berkeley.sbp.misc.*;
+import edu.berkeley.sbp.util.*;
 import java.util.*;
 import java.io.*;
 
-public class TibDoc {
+public class TibDoc extends ReflectiveWalker {
     
     public static void main(String[] s) throws Exception {
         System.out.println("parsing " + s[0]);
@@ -22,19 +23,19 @@ public class TibDoc {
         System.out.println("\nparsing " + s[1]);
         Forest f = new CharToken.CharToStringParser(mg).parse(new Tib(new FileInputStream(s[1])));
         System.out.println(f);
-        System.out.println(((Tree)walk(f.expand1())).toString(0, 0, 120));
+        //System.out.println(((Tree)walk(f.expand1())).toString(0, 0, 120));
+        System.out.println(((Tree)new TibDoc().walk(f.expand1())).toPrettyString());
     }
 
-    public static Tree<String> walk(Tree<String> tree) {
-        String head = tree.head();
+    //public void header() { throw new Error(); }
+    public Object walk(String head, Object[] children) {
         if ("stringify".equals(head)) {
-            String ret = "";
-            for(Tree<String> t : tree.child(0)) ret += t;
-            return new Tree<String>(null, ret);
+            StringBuffer ret = new StringBuffer();
+            for(Tree<String> t : (Tree<String>)children[0]) ret.append(t);
+            return new Tree<String>(null, ret.toString());
         }
-        Tree<String>[] children = new Tree[tree.numChildren()];
-        for(int i=0; i<children.length; i++) children[i] = walk(tree.child(i));
-        return new Tree<String>(null, head, children);
+        if (children.length==0) return new Tree<String>(null, head, new Tree[0]);
+        return new Tree<String>(null, head, (Tree<String>[])Reflection.lub(children));
     }