X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammar.java;h=78c4b725a47a490bcb3127eeace8858ba96b33c8;hp=acda0119f3cc1e47ea1b82245837284c60a1e6f6;hb=c8a17fdd2e149fe5feecd96c71b7f2cab286ab96;hpb=92d14ef4956f39a591363709ed95bfa2999dc319 diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java index acda011..78c4b72 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammar.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammar.java @@ -75,16 +75,17 @@ public class MetaGrammar { public static class Target { public int[] buildSequence(Production p) { Annotation[][] annotations = _bindable.getArgAnnotations(); + Class[] types = _bindable.getArgTypes(); String[] names = _bindable.getArgNames(); - String name = _bindable.getSimpleName(); - int len = annotations.length; - int ofs = 0; + String name = _bindable.getSimpleName(); + int len = annotations.length; + int ofs = 0; bind.arg[] argtags = new bind.arg[len]; for(int i=0; i0 && types[0]==Input.Region.class; + for(int i=0; i> t) { + public Object invoke(Tree t) { if (_israw) return _bindable.impose(new Object[] { t }); ArrayList ret = new ArrayList(); for(Tree tc : t) { if (tc.head() != null && tc.head() instanceof Functor) - ret.add(((Tree.TreeFunctor)tc.head()).invoke(tc.children())); + ret.add(((Tree.TreeFunctor)tc.head()).invoke(tc)); else if (tc.numChildren() == 0) ret.add(tc.head()); else { @@ -200,8 +207,14 @@ public class MetaGrammar { Object[] o = (Object[])ret.toArray(new Object[0]); int max = 0; for(int i=0; i 0 && + _bindable.getArgTypes()[0]==Input.Region.class) + max++; Object[] o2 = new Object[max+1]; for(int i=0; i 0 && + _bindable.getArgTypes()[0]==Input.Region.class) + o2[0] = t.getRegion(); return _bindable.impose(o2); } } @@ -211,7 +224,7 @@ public class MetaGrammar { public static Union make(Tree t, String s) { return make(t, s, new AnnotationGrammarBindingResolver(MetaGrammarBindings.class)); } public static Union make(Tree t, String s, GrammarBindingResolver rm) { Tree.TreeFunctor red = (Tree.TreeFunctor)t.head(); - MetaGrammarBindings.GrammarNode g = (MetaGrammarBindings.GrammarNode)red.invoke(t.children()); + MetaGrammarBindings.GrammarNode g = (MetaGrammarBindings.GrammarNode)red.invoke(t); return g.build(s, rm); }