return super.walk(tree);
}
*/
+ public void walk(String tag) {
+ Member m = member(normalize(tag), 0, false);
+ if (m!=null) Reflection.fuzzyInvoke(target, m);
+ }
public Object walk(String tag, Object[] argo) {
if (argo.length==0) return super.walk(tag, argo);
if (argo==null) return tag;
import java.lang.reflect.*;
public abstract class StringWalker extends TreeWalker<String> {
- public Object walk(Tree<String> tree) { return super.walk(tree); }
+ public void walk(String tag) { }
+ public Object walk(Tree<String> tree) {
+ walk(tree.head());
+ return super.walk(tree);
+ }
public Object walk(String tag, Object[] tokens) {
if (tokens.length==0) return tag;
if (tag==null) return null;
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]);
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())).toPrettyString());
+ System.out.println(((Tree)new TibDoc().walk(f.expand1())).toPrettyString());
}
- public static Tree<String> walk(Tree<String> tree) {
+ public Tree<String> walk(Tree<String> tree) {
String head = tree.head();
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.child(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));
}
}
+ public static Object fuzzyInvoke(Object o, Member m) { return fuzzyInvoke(o, m, new Object[0]); }
/** invoke method/constructor m on object o with arguments args, and perform reasonable coercions as needed */
public static Object fuzzyInvoke(Object o, Member m, Object[] args) {
try {