//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]);
- Tree<String> res = new CharToken.CharToStringParser(MetaGrammar.make()).parse1(new CharToken.Stream(new FileInputStream(s[0])));
+ Tree<String> res = new CharToken.CharToStringParser(MetaGrammar.make()).parse(new CharToken.Stream(new FileInputStream(s[0]))).expand1();
MetaGrammar gram = (MetaGrammar)new Tib.Grammar().walk(res);
//System.out.println(gram);
Union mg = gram.done();
System.out.println("\nparsing " + s[1]);
- res = new CharToken.CharToStringParser(mg).parse1(new Tib(new FileInputStream(s[1])));
- System.out.println(((Tree)walk(res)).toString(0, 0, 120));
+ 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)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));
}