copyright notices/updates
[sbp.git] / src / edu / berkeley / sbp / meta / Grammar.java
1 // Copyright 2006 all rights reserved; see LICENSE file for BSD-style license
2
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.*;
9 import java.util.*;
10 import java.lang.annotation.*;
11 import java.lang.reflect.*;
12 import java.io.*;
13
14 public class Grammar {
15
16     /**
17      *  Create a grammar from a parse tree and binding resolver
18      * 
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
22      */
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);
27     }
28
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);
34         }
35     }
36     
37 }