From: adam Date: Wed, 5 Jul 2006 04:47:48 +0000 (-0400) Subject: checkpoint X-Git-Tag: tag_for_25-Mar~206 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=2ea67ebda6606947660f414a9daca7d70f6b8f95;hp=bad286576656a73e315f0aa7b08a1c1714eb8390 checkpoint darcs-hash:20060705044748-5007d-3cb5501834daccc21f76a2353a389d0ea41699df.gz --- diff --git a/src/edu/berkeley/sbp/bind/bind.java b/src/edu/berkeley/sbp/bind/bind.java index e384ca4..4441ee1 100644 --- a/src/edu/berkeley/sbp/bind/bind.java +++ b/src/edu/berkeley/sbp/bind/bind.java @@ -9,7 +9,7 @@ import java.lang.annotation.*; import java.lang.reflect.*; import java.io.*; -public class bind { +public @interface bind { /** * Constructors, classes, and methods with this attribute will * match every production of the nonterminal called "value()" 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) diff --git a/src/edu/berkeley/sbp/misc/MetaGrammarTree.java b/src/edu/berkeley/sbp/misc/MetaGrammarTree.java index 85e6f3f..d638a28 100644 --- a/src/edu/berkeley/sbp/misc/MetaGrammarTree.java +++ b/src/edu/berkeley/sbp/misc/MetaGrammarTree.java @@ -18,6 +18,7 @@ public class MetaGrammarTree { + // DO NOT EDIT STUFF BELOW: IT IS AUTOMATICALLY GENERATED new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.Grammar.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.MetaGrammar.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("word", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "s", new edu.berkeley.sbp.Tree[] { })})}), new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.MetaGrammar.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.MetaGrammar.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("bang", new Class[] {edu.berkeley.sbp.misc.MetaGrammar.MG.El.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.NonTerminalReference.class), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("word", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "w", new edu.berkeley.sbp.Tree[] { }), @@ -448,7 +449,7 @@ new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bin new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }), new edu.berkeley.sbp.Tree(null, "d", new edu.berkeley.sbp.Tree[] { })})})})})})})})})})})})})})})})}), new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("quoted", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("quoted", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("quoted", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("c", new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "\"", new edu.berkeley.sbp.Tree[] { })})})})})})})})})}), - new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.MetaGrammar.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.MetaGrammar.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("grammar", new Class[] {java.lang.Object[].class})), false), new edu.berkeley.sbp.Tree[] { }), + new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.MetaGrammar.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("tag", new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.MetaGrammar.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("psx", new Class[] {edu.berkeley.sbp.misc.MetaGrammar.MG.Seq.class})), false), new edu.berkeley.sbp.Tree[] { }), new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("seq", new Class[] {edu.berkeley.sbp.misc.MetaGrammar.MG.El[].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.StringLiteral.class.getConstructor(new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("quoted", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("quoted", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("quoted", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("c", new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "\"", new edu.berkeley.sbp.Tree[] { })})}), new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("quoted", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("c", new Class[] {char.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "\"", new edu.berkeley.sbp.Tree[] { })})})})})})})})})})})})})}), new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0,1}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.misc.MetaGrammar.MG.Seq[][].class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bindable.create(edu.berkeley.sbp.misc.MetaGrammar.MG.class.getMethod("word", new Class[] {java.lang.String.class})), false), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, new Tree.ArrayBuildingTreeFunctor(), new edu.berkeley.sbp.Tree[] { new edu.berkeley.sbp.Tree(null, "e", new edu.berkeley.sbp.Tree[] { }), @@ -508,3 +509,4 @@ new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bin +