checkpoint
[sbp.git] / src / edu / berkeley / sbp / meta / Grammar.java
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.*;
7 import java.util.*;
8 import java.lang.annotation.*;
9 import java.lang.reflect.*;
10 import java.io.*;
11
12 public class Grammar {
13
14     /**
15      *  Create a grammar from a parse tree.
16      * 
17      *  @param t a tree produced by parsing a grammar using the metagrammar
18      *  @param s the name of the "start symbol"
19      */
20     public static Union create(Tree t, String s) {
21         return create(t, s, new AnnotationGrammarBindingResolver(MetaGrammarBindings.class));
22     }
23
24     /**
25      *  Create a grammar from a parse tree and binding resolver
26      * 
27      *  @param t   a tree produced by parsing a grammar using the metagrammar
28      *  @param s   the name of the "start symbol"
29      *  @param gbr a GrammarBindingResolver that resolves grammatical reductions into tree-node-heads
30      */
31     public static Union create(Tree t, String s, GrammarBindingResolver gbr) {
32         Tree.TreeFunctor<Object,Object> red = (Tree.TreeFunctor<Object,Object>)t.head();
33         MetaGrammarBindings.GrammarNode g = (MetaGrammarBindings.GrammarNode)red.invoke(t.children());
34         return g.build(s, gbr);
35     }
36     
37 }