1 package edu.berkeley.sbp.meta;
2 import edu.berkeley.sbp.util.*;
3 import edu.berkeley.sbp.*;
4 import edu.berkeley.sbp.chr.*;
5 import edu.berkeley.sbp.misc.*;
6 import edu.berkeley.sbp.bind.*;
8 import java.lang.annotation.*;
9 import java.lang.reflect.*;
12 public class Grammar {
15 * Create a grammar from a parse tree and binding resolver
17 * @param t a tree produced by parsing a grammar using the metagrammar
18 * @param s the name of the "start symbol"
19 * @param gbr a GrammarBindingResolver that resolves grammatical reductions into tree-node-heads
21 public static Union create(Tree t, String s, Grammar.Bindings gbr) {
22 Tree.TreeFunctor<Object,Object> red = (Tree.TreeFunctor<Object,Object>)t.head();
23 MetaGrammarBindings.GrammarNode g = (MetaGrammarBindings.GrammarNode)red.invoke(t.children());
24 return g.build(s, gbr);
27 public static class Bindings {
28 public Object repeatTag() { return null; }
29 public Sequence createSequence(Production p) {
30 if (p.tag==null) return null;
31 return Sequence.rewritingSequence(p.tag, p.elements, p.drops);