1 // Copyright 2006 all rights reserved; see LICENSE file for BSD-style license
3 package edu.berkeley.sbp.meta;
4 import edu.berkeley.sbp.util.*;
5 import edu.berkeley.sbp.*;
6 import edu.berkeley.sbp.chr.*;
7 import edu.berkeley.sbp.misc.*;
8 import edu.berkeley.sbp.bind.*;
10 import java.lang.annotation.*;
11 import java.lang.reflect.*;
14 public class Grammar {
17 * Create a grammar from a parse tree and binding resolver
19 * @param t a tree produced by parsing a grammar using the metagrammar
20 * @param s the name of the "start symbol"
21 * @param gbr a GrammarBindingResolver that resolves grammatical reductions into tree-node-heads
23 public static Union create(Tree t, String s, Grammar.Bindings gbr) {
24 TreeFunctor<Object,Object> red = (TreeFunctor<Object,Object>)t.head();
25 MetaGrammarBindings.GrammarNode g = (MetaGrammarBindings.GrammarNode)red.invoke(t.children());
26 return g.build(s, gbr);
29 public static class Bindings {
30 public Object repeatTag() { return null; }
31 public Sequence createSequence(Production p) {
32 if (p.tag==null) return null;
33 return Sequence.create(p.tag, p.elements, p.drops, false);