1 package edu.berkeley.sbp.misc;
4 import java.lang.reflect.*;
5 import java.lang.ref.*;
6 import edu.berkeley.sbp.*;
7 import edu.berkeley.sbp.*;
8 import edu.berkeley.sbp.util.*;
9 import edu.berkeley.sbp.*;
11 public abstract class TreeWalker<T> {
12 public abstract Object walk(T head, Object[] args);
13 public void walkChildren(Tree<T> tree) {
14 for(Tree<T> child : tree.children()) walk(child);
16 public Object walk(Tree<T> tree) {
17 Object[] args = new Object[tree.numChildren()];
19 for(Tree<T> child : tree.children()) args[i++] = walk(child);
20 args = Reflection.lub(args);
21 return walk(tree.head(), args);