X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammar.java;h=2340de21b89829fe7c43fe02d89ee74d54958361;hb=a7ed3694a03bf9fe30e3274775c0646554e99bd4;hp=77635d017e3534852d7f237f1f64122c9455edbc;hpb=41b74cd8469abb0bdff811f26594a7ef87cb26a6;p=sbp.git diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java index 77635d0..2340de2 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammar.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammar.java @@ -52,52 +52,22 @@ public class MetaGrammar { p.flush(); os.close(); } - - - public static class Production { - public String tag; - public String nonTerminal; - public Object[] labels; - public boolean[] drops; - public Element[] elements; - public int count = 0; - public Production(String tag, String nonTerminal, Element[] elements, Object[] labels, boolean[] drops) { - this.tag = tag; - this.elements = elements; - this.nonTerminal = nonTerminal; - this.labels = labels; - this.drops = drops; - for(int i=0; i 0 && + _bindable.getArgTypes()[0] == Input.Region.class) { + Functor func = new Functor() { + public Object invoke(final Input.Region region) { + return + new TreeBindableReducer(buildSequence(p), + _bindable, + isRaw()) { + public Object invoke(Iterable> t) { + if (_israw) return _bindable.impose(new Object[] { t }); + ArrayList ret = new ArrayList(); + ret.add(region); + for(Tree tc : t) { + if (tc.head() != null && tc.head() instanceof Functor) + ret.add(((Tree.TreeFunctor)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); + } + } + Object[] o = (Object[])ret.toArray(new Object[0]); + int max = 0; + for(int i=0; i, ToJava { - private int[] map; - private Bindable _bindable; - private boolean _israw; + public static class TreeBindableReducer implements Tree.TreeFunctor, ToJava { + int[] map; + Bindable _bindable; + boolean _israw; public void toJava(StringBuffer sb) { - sb.append("new MetaGrammar.TargetReducer(new int[] {"); + sb.append("new MetaGrammar.TreeBindableReducer(new int[] {"); for(int i=0; i