X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammar.java;h=acda0119f3cc1e47ea1b82245837284c60a1e6f6;hp=37edd7b09405c45127ca3351d8bf6633c1db76b6;hb=a7ba8d8a5f0cb7fbb5bf67f1a95f1cad5226c507;hpb=256a398ff08c792eb94941b7e7d59d01bff86a94 diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java index 37edd7b..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.GrammarNode g = (MetaGrammarBindings.GrammarNode)red.invoke(t.children()); - Context cx = new Context(g,rm); - Union u = null; - for(MetaGrammarBindings.NonTerminalNode 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; + return g.build(s, rm); } - - - public static class Context { - public HashMap map = new HashMap(); - public MetaGrammarBindings.GrammarNode grammar; - public String cnt = null; - public GrammarBindingResolver rm; - public Context(MetaGrammarBindings.GrammarNode g, GrammarBindingResolver rm) { - this.grammar = g; - this.rm = rm; - } - public Union build() { - Union ret = null; - for(MetaGrammarBindings.NonTerminalNode 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.GrammarNode)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.NonTerminalNode 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)); } }