X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FDemo.java;h=2891b0f77fe4fe305e4536512caf71d71ca04266;hb=f36d0734ca6991c02d0586bdfddda205048aa916;hp=b6c05241d23d2b8c6a94484fe38f931de1cc8918;hpb=117f3082281baf893dd183c0d50d809b147f2f1c;p=sbp.git diff --git a/src/edu/berkeley/sbp/misc/Demo.java b/src/edu/berkeley/sbp/misc/Demo.java index b6c0524..2891b0f 100644 --- a/src/edu/berkeley/sbp/misc/Demo.java +++ b/src/edu/berkeley/sbp/misc/Demo.java @@ -89,23 +89,7 @@ public class Demo { return false; } public Object repeatTag() { - return new Functor,Object>() { - public String toString() { return ""; } - public Object invoke(Iterable t) { - ArrayList ret = new ArrayList(); - for(Tree tc : t) { - if (tc.head() != null && tc.head() instanceof Functor) - ret.add(((Functor,Object>)tc.head()).invoke(tc.children())); - else if (tc.numChildren() == 0) - ret.add(tc.head()); - else { - System.err.println("FIXME: don't know what to do about " + tc); - ret.add(null); - } - } - return ret.toArray(new Object[0]); - } - }; + return new Tree.ArrayBuildingTreeFunctor(); } public Sequence tryResolveTag(String tag, String nonTerminalName, Element[] els, Object[] labels, boolean[] drops) { Production p = new Production(tag, nonTerminalName, els, labels, drops); @@ -239,10 +223,10 @@ public class Demo { public Sequence makeSequence(Production p) { return Sequence.rewritingSequence(new TargetReducer(p, buildSequence(p), "reducer-"+this), p.elements, p.labels, p.drops); } - public abstract Object plant(Object[] fields, int[] map); + public abstract Object plant(Object[] fields); public boolean isRaw() { return false; } - public Object invokeRaw(Iterable t) { return null; } - public class TargetReducer implements Functor,Object> { + public Object invokeRaw(Iterable> t) { return null; } + public class TargetReducer implements Tree.TreeFunctor { private Production p; private int[] map; private String name; @@ -252,12 +236,12 @@ public class Demo { this.name = name; } public String toString() { return name; } - public Object invoke(Iterable t) { + public Object invoke(Iterable> t) { if (isRaw()) return invokeRaw(t); ArrayList ret = new ArrayList(); for(Tree tc : t) { if (tc.head() != null && tc.head() instanceof Functor) - ret.add(((Functor,Object>)tc.head()).invoke(tc.children())); + ret.add(((Tree.TreeFunctor)tc.head()).invoke(tc.children())); else if (tc.numChildren() == 0) ret.add(tc.head()); else { @@ -266,7 +250,12 @@ public class Demo { } } System.err.println("input tree: " + t); - return plant(ret.toArray(new Object[0]), map); + Object[] o = (Object[])ret.toArray(new Object[0]); + int max = 0; + for(int i=0; i t) { + public Object invokeRaw(Iterable> t) { try { return _method.invoke(null, new Object[] { t }); } catch (Exception e) { throw new RuntimeException(e); } } - public Object plant(Object[] fields, int[] map) { + public Object plant(Object[] fields) { try { Class[] argTypes = _method.getParameterTypes(); Object[] args = new Object[argTypes.length]; int j = 0; - for(int i=0; i,Object> red = (Functor,Object>)t.head(); + Tree.TreeFunctor red = (Tree.TreeFunctor)t.head(); MG.Grammar g = (MG.Grammar)red.invoke(t.children()); Context cx = new Context(g,rm); Union u = null; @@ -781,7 +767,7 @@ public class Demo { } public Context(Tree t, ReflectiveMeta rm) { this.rm = rm; - Functor,Object> red = (Functor,Object>)t.head(); + Tree.TreeFunctor red = (Tree.TreeFunctor)t.head(); this.grammar = (MG.Grammar)red.invoke(t.children()); } public Union peek(String name) { return map.get(name); }