return false;
}
public Object repeatTag() {
- return new Reducer() {
+ return new Functor<Iterable<Tree>,Object>() {
public String toString() { return ""; }
- public Object reduce(Iterable<Tree> t) {
+ public Object invoke(Iterable<Tree> t) {
ArrayList ret = new ArrayList();
for(Tree tc : t) {
- if (tc.head() != null && tc.head() instanceof Reducer)
- ret.add(((Reducer)tc.head()).reduce(tc.children()));
+ if (tc.head() != null && tc.head() instanceof Functor)
+ ret.add(((Functor<Iterable<Tree>,Object>)tc.head()).invoke(tc.children()));
else if (tc.numChildren() == 0)
ret.add(tc.head());
else {
public abstract Object plant(Object[] fields, int[] map);
public boolean isRaw() { return false; }
public Object invokeRaw(Iterable<Tree> t) { return null; }
- public class TargetReducer implements Reducer {
+ public class TargetReducer implements Functor<Iterable<Tree>,Object> {
private Production p;
private int[] map;
private String name;
this.name = name;
}
public String toString() { return name; }
- public Object reduce(Iterable<Tree> t) {
+ public Object invoke(Iterable<Tree> t) {
if (isRaw()) return invokeRaw(t);
ArrayList ret = new ArrayList();
for(Tree tc : t) {
- if (tc.head() != null && tc.head() instanceof Reducer)
- ret.add(((Reducer)tc.head()).reduce(tc.children()));
+ if (tc.head() != null && tc.head() instanceof Functor)
+ ret.add(((Functor<Iterable<Tree>,Object>)tc.head()).invoke(tc.children()));
else if (tc.numChildren() == 0)
ret.add(tc.head());
else {
}
}
- public static interface Reducer {
- public Object reduce(Iterable<Tree> t);
- }
-
public static class TargetClass extends Target {
public final Class _class;
public TargetClass(Class _class) { this._class = _class; }
}
public static Union make(Tree t, String s) { return make(t, s, new ReflectiveMeta()); }
public static Union make(Tree t, String s, ReflectiveMeta rm) {
- Reducer red = (Reducer)t.head();
- MG.Grammar g = (MG.Grammar)red.reduce(t.children());
+ Functor<Iterable<Tree>,Object> red = (Functor<Iterable<Tree>,Object>)t.head();
+ MG.Grammar g = (MG.Grammar)red.invoke(t.children());
Context cx = new Context(g,rm);
Union u = null;
for(MG.NonTerminal nt : g.nonterminals) {
}
public Context(Tree t, ReflectiveMeta rm) {
this.rm = rm;
- Reducer red = (Reducer)t.head();
- this.grammar = (MG.Grammar)red.reduce(t.children());
+ Functor<Iterable<Tree>,Object> red = (Functor<Iterable<Tree>,Object>)t.head();
+ this.grammar = (MG.Grammar)red.invoke(t.children());
}
public Union peek(String name) { return map.get(name); }
public void put(String name, Union u) { map.put(name, u); }