X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammar.java;h=a1e37bf85c277cfff2d5128c6674ae2ec34c04a0;hp=37edd7b09405c45127ca3351d8bf6633c1db76b6;hb=babae49de7b777a5847f277bb74c88e77c67568a;hpb=256a398ff08c792eb94941b7e7d59d01bff86a94 diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java index 37edd7b..a1e37bf 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammar.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammar.java @@ -172,8 +172,7 @@ public class MetaGrammar { public void toJava(StringBuffer sb) { sb.append("new MetaGrammar.TargetReducer(new int[] {"); - 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)); } }