X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammar.java;h=acda0119f3cc1e47ea1b82245837284c60a1e6f6;hp=78c654a66ec0751fee256ce97ec82d448beb6a8e;hb=a7ba8d8a5f0cb7fbb5bf67f1a95f1cad5226c507;hpb=59eead6bf0f2d9a7abeba03f3fdab04625521faf diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java index 78c654a..acda011 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammar.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammar.java @@ -58,15 +58,13 @@ public class MetaGrammar { public static class Production { public String tag; public String nonTerminal; - public Object[] labels; public boolean[] drops; public Element[] elements; public int count = 0; - public Production(String tag, String nonTerminal, Element[] elements, Object[] labels, boolean[] drops) { + public Production(String tag, String nonTerminal, Element[] elements, boolean[] drops) { this.tag = tag; this.elements = elements; this.nonTerminal = nonTerminal; - this.labels = labels; this.drops = drops; for(int i=0; i red = (Tree.TreeFunctor)t.head(); - MetaGrammarBindings.Grammar g = (MetaGrammarBindings.Grammar)red.invoke(t.children()); - Context cx = new Context(g,rm); - Union u = null; - for(MetaGrammarBindings.NonTerminal nt : g.values()) { - Union el = (Union)cx.get(nt.name); - StringBuffer st = new StringBuffer(); - el.toString(st); - if (nt.name.equals(s)) u = el; - } - return u; + MetaGrammarBindings.GrammarNode g = (MetaGrammarBindings.GrammarNode)red.invoke(t.children()); + return g.build(s, rm); } - - - public static class Context { - public HashMap map = new HashMap(); - public MetaGrammarBindings.Grammar grammar; - public String cnt = null; - public GrammarBindingResolver rm; - public Context(MetaGrammarBindings.Grammar g, GrammarBindingResolver rm) { - this.grammar = g; - this.rm = rm; - } - public Union build() { - Union ret = null; - for(MetaGrammarBindings.NonTerminal nt : grammar.values()) { - Union u = get(nt.name); - if ("s".equals(nt.name)) - ret = u; - } - return ret; - } - public Context(Tree t, GrammarBindingResolver rm) { - this.rm = rm; - Tree.TreeFunctor red = (Tree.TreeFunctor)t.head(); - this.grammar = (MetaGrammarBindings.Grammar)red.invoke(t.children()); - } - public Union peek(String name) { return map.get(name); } - public void put(String name, Union u) { map.put(name, u); } - public Union get(String name) { - Union ret = map.get(name); - if (ret != null) return ret; - ret = new Union(name); - map.put(name, ret); - MetaGrammarBindings.NonTerminal nt = grammar.get(name); - if (nt==null) { - System.err.println("*** warning could not find " + name); - } else { - String old = cnt; - cnt = name; - nt.build(this, ret); - cnt = old; - } - return ret; - } - - } - /*private*/ static Atom infer(Element e) { return infer((Topology)Atom.toAtom(e)); } - /*private*/ static Atom infer(Topology t) { return new CharRange(new CharTopology(t)); } }