checkpoint
authoradam <adam@megacz.com>
Thu, 6 Jul 2006 05:57:39 +0000 (01:57 -0400)
committeradam <adam@megacz.com>
Thu, 6 Jul 2006 05:57:39 +0000 (01:57 -0400)
darcs-hash:20060706055739-5007d-23a55dc2e24ba50b6d04028b40576b6cab343872.gz

src/edu/berkeley/sbp/meta/MetaGrammar.java
src/edu/berkeley/sbp/meta/MetaGrammarBindings.java
src/edu/berkeley/sbp/meta/MetaGrammarTree.java

index 0e8968f..2077bbd 100644 (file)
@@ -253,7 +253,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 +275,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;
index f780e80..5168c34 100644 (file)
@@ -11,18 +11,12 @@ import java.io.*;
 
 /** 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 + " ]";
         }
     }
index 064ae41..2040cee 100644 (file)
@@ -22,6 +22,7 @@ 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.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[] { }),
@@ -515,3 +516,4 @@ new edu.berkeley.sbp.Tree(null, new MetaGrammar.TargetReducer(new int[] {0}, Bin
 
 
 
+