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 and binding resolver
16      * 
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
20      */
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);
25     }
26
27     public static class Bindings {
28         public Object repeatTag()                   { return null; }
29         public Sequence tryResolveTag(Production p) {
30             if (p.tag==null) return null;
31             return Sequence.rewritingSequence(p.tag, p.elements, p.drops);
32         }
33     }
34     
35 }