X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmeta%2FMetaGrammar.java;h=e39fd4bac79af0a63e3e1759426fb38bd639d243;hb=f56263f0f1cf0c01dfbd8ea7bd1ba8a9c6bd8042;hp=0e8968f61d082b0b7f295eaf173644d04bedb86e;hpb=fa49c4e86eaabb1fad07bcfdfb004aa1fc0dea8a;p=sbp.git diff --git a/src/edu/berkeley/sbp/meta/MetaGrammar.java b/src/edu/berkeley/sbp/meta/MetaGrammar.java index 0e8968f..e39fd4b 100644 --- a/src/edu/berkeley/sbp/meta/MetaGrammar.java +++ b/src/edu/berkeley/sbp/meta/MetaGrammar.java @@ -121,22 +121,24 @@ public class MetaGrammar { public boolean isCompatible(Production p) { bind.as t = getBindAs(); + bind b = getBind(); + if (t != null && - (t.value().equals(p.tag) || - (t.value().equals("") && getName().equals(p.tag)))) + (t.value().equals(p.tag))) return buildSequence(p)!=null; - bind b = getBind(); - //System.out.println(_bindable.getClass().getSimpleName() + ": " + _bindable.getSimpleName()); + if (t != null && + ((t.value().equals("") && getName().equals(p.tag)))) + return buildSequence(p)!=null; if (b != null && getName().equals(p.tag)) return buildSequence(p)!=null; - bind.as n = getBindAs(); - if (n != null && - (n.value().equals(p.nonTerminal) || - (n.value().equals("") && getName().equals(p.nonTerminal)))) + if (t != null && + (t.value().equals(p.nonTerminal))) + return buildSequence(p)!=null; + if (t != null && + ((t.value().equals("") && getName().equals(p.nonTerminal)))) return buildSequence(p)!=null; - if (b != null && getName().equals(p.nonTerminal)) return buildSequence(p)!=null; @@ -253,7 +255,7 @@ public class MetaGrammar { MetaGrammarBindings.Grammar g = (MetaGrammarBindings.Grammar)red.invoke(t.children()); Context cx = new Context(g,rm); Union u = null; - for(MetaGrammarBindings.NonTerminal nt : g.nonterminals) { + for(MetaGrammarBindings.NonTerminal nt : g.values()) { Union el = (Union)cx.get(nt.name); StringBuffer st = new StringBuffer(); el.toString(st); @@ -275,7 +277,7 @@ public class MetaGrammar { } public Union build() { Union ret = null; - for(MetaGrammarBindings.NonTerminal nt : grammar.nonterminals) { + for(MetaGrammarBindings.NonTerminal nt : grammar.values()) { Union u = get(nt.name); if ("s".equals(nt.name)) ret = u;