X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2Fmisc%2FMetaGrammar.java;h=2007dd17a45c06ab9ce839bfb6902b14a3d172eb;hp=3a6f59d47ed8d5cd90d0705fb66e649b2fa41b57;hb=2ea67ebda6606947660f414a9daca7d70f6b8f95;hpb=bad286576656a73e315f0aa7b08a1c1714eb8390 diff --git a/src/edu/berkeley/sbp/misc/MetaGrammar.java b/src/edu/berkeley/sbp/misc/MetaGrammar.java index 3a6f59d..2007dd1 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammar.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammar.java @@ -97,32 +97,6 @@ public class MetaGrammar { this._cl = c; this._inner = inner; } - private boolean match(Method m, String s) { return match(m.getAnnotation(bind.as.class), null, s); } - private boolean match(bind.as t, Class c, String s) { - if (t==null) return false; - if (t.value().equals(s)) return true; - if (c != null && t.equals("") && c.getSimpleName().equals(s)) return true; - return false; - } - /* - private boolean match(nonterminal t, Class c, String s) { - if (t==null) return false; - if (t.value().equals(s)) return true; - if (c != null && t.equals("") && c.getSimpleName().equals(s)) return true; - return false; - } - */ - private boolean match(Class c, String s, String nonTerminalName) { - if (match((bind.as)c.getAnnotation(bind.as.class), c, s)) return true; - //if (match((nonterminal)c.getAnnotation(bind.as.class), c, nonTerminalName)) return true; - return false; - } - public boolean match(Constructor con, String s, String nonTerminalName) { - Class c = con.getDeclaringClass(); - if (match((bind.as)con.getAnnotation(bind.as.class), null, s)) return true; - //if (match((nonterminal)con.getAnnotation(bind.as.class), c, s)) return true; - return false; - } public Object repeatTag() { return new Tree.ArrayBuildingTreeFunctor(); } @@ -194,7 +168,10 @@ public class MetaGrammar { public Target(Bindable b) { this._bindable = b; } public String getName() { return _bindable.getSimpleName(); } - public bind.as getBindAs() { return (bind.as)_bindable.getAnnotation(bind.as.class); } + public bind getBind() { + return (bind)_bindable.getAnnotation(bind.class); } + public bind.as getBindAs() { + return (bind.as)_bindable.getAnnotation(bind.as.class); } //public nonterminal getNonTerminal() { return (nonterminal)_bindable.getAnnotation(bind.as.class); } public String toString() { return _bindable.getSimpleName(); } public boolean isRaw() { return _bindable.isAnnotationPresent(bind.raw.class); } @@ -206,12 +183,19 @@ public class MetaGrammar { (t.value().equals("") && getName().equals(p.tag)))) return buildSequence(p)!=null; + bind b = getBind(); + 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)))) return buildSequence(p)!=null; + if (b != null && getName().equals(p.nonTerminal)) + return buildSequence(p)!=null; + return false; } @@ -328,13 +312,6 @@ public class MetaGrammar { public static class MG { - public static @bind.as Object grammar(Object[] o) { - if (o==null) return null; - if (o[0] != null && o[0] instanceof Grammar) return o[0]; - Grammar g = new Grammar(); - g.nonterminals = (NonTerminal[])Reflection.lub((Object[])o); - return g; - } public static @bind.as class Grammar { public NonTerminal get(String s) { for(NonTerminal nt : nonterminals)