checkpoint
[sbp.git] / src / edu / berkeley / sbp / meta / Grammar.java
diff --git a/src/edu/berkeley/sbp/meta/Grammar.java b/src/edu/berkeley/sbp/meta/Grammar.java
new file mode 100644 (file)
index 0000000..693a7ba
--- /dev/null
@@ -0,0 +1,37 @@
+package edu.berkeley.sbp.meta;
+import edu.berkeley.sbp.util.*;
+import edu.berkeley.sbp.*;
+import edu.berkeley.sbp.chr.*;
+import edu.berkeley.sbp.misc.*;
+import edu.berkeley.sbp.bind.*;
+import java.util.*;
+import java.lang.annotation.*;
+import java.lang.reflect.*;
+import java.io.*;
+
+public class Grammar {
+
+    /**
+     *  Create a grammar from a parse tree.
+     * 
+     *  @param t a tree produced by parsing a grammar using the metagrammar
+     *  @param s the name of the "start symbol"
+     */
+    public static Union create(Tree t, String s) {
+        return create(t, s, new AnnotationGrammarBindingResolver(MetaGrammarBindings.class));
+    }
+
+    /**
+     *  Create a grammar from a parse tree and binding resolver
+     * 
+     *  @param t   a tree produced by parsing a grammar using the metagrammar
+     *  @param s   the name of the "start symbol"
+     *  @param gbr a GrammarBindingResolver that resolves grammatical reductions into tree-node-heads
+     */
+    public static Union create(Tree t, String s, GrammarBindingResolver gbr) {
+        Tree.TreeFunctor<Object,Object> red = (Tree.TreeFunctor<Object,Object>)t.head();
+        MetaGrammarBindings.GrammarNode g = (MetaGrammarBindings.GrammarNode)red.invoke(t.children());
+        return g.build(s, gbr);
+    }
+    
+}