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 Object walk(Tree<T> tree, int idx) {
14 return walk(tree.child(idx));
16 public void walkChildren(Tree<T> tree) {
17 for(Tree<T> child : tree.children()) walk(child);
19 public Object walk(Tree<T> tree) {
20 Object[] args = new Object[tree.numChildren()];
22 for(Tree<T> child : tree.children()) args[i++] = walk(child);
23 args = Reflection.lub(args);
24 return walk(tree.head(), args);