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);
}
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;
/** The java classes typically used to represent a parsed grammar AST */
public class MetaGrammarBindings {
- public static class Grammar {
- public NonTerminal get(String s) {
- for(NonTerminal nt : nonterminals)
- if (nt.name.equals(s)) return nt;
- return null;
- }
- public NonTerminal[] nonterminals;
- public Grammar() { }
- public @bind Grammar(NonTerminal[] nonterminals) { this.nonterminals = nonterminals; }
+ public static class Grammar extends HashMap<String,NonTerminal> {
+ public @bind Grammar(NonTerminal[] nonterminals) {
+ for(NonTerminal nt : nonterminals) this.put(nt.name, nt); }
public String toString() {
String ret = "[ ";
- for(NonTerminal nt : nonterminals) ret += nt + ", ";
+ for(NonTerminal nt : values()) ret += nt + ", ";
return ret + " ]";
}
}
+
// 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.meta.MetaGrammarBindings.Grammar.class.getConstructor(new Class[] {edu.berkeley.sbp.meta.MetaGrammarBindings.NonTerminal[].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.meta.MetaGrammarBindings.NonTerminal.class.getConstructor(new Class[] {java.lang.String.class,edu.berkeley.sbp.meta.MetaGrammarBindings.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.meta.MetaGrammarBindings.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.meta.MetaGrammarBindings.class.getMethod("psx", new Class[] {edu.berkeley.sbp.meta.MetaGrammarBindings.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.meta.MetaGrammarBindings.class.getMethod("seq", new Class[] {edu.berkeley.sbp.meta.MetaGrammarBindings.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.meta.MetaGrammarBindings.class.getMethod("bang", new Class[] {edu.berkeley.sbp.meta.MetaGrammarBindings.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.meta.MetaGrammarBindings.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.meta.MetaGrammarBindings.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[] { }),
+