checkpoint
[sbp.git] / src / edu / berkeley / sbp / meta / MetaGrammarBindings.java
index 3ba3d2a..5168c34 100644 (file)
@@ -9,17 +9,14 @@ import java.lang.annotation.*;
 import java.lang.reflect.*;
 import java.io.*;
 
+/** The java classes typically used to represent a parsed grammar AST */
 public class MetaGrammarBindings {
-    public static @bind class Grammar {
-        public NonTerminal get(String s) {
-            for(NonTerminal nt : nonterminals)
-                if (nt.name.equals(s)) return nt;
-            return null;
-        }
-        public @bind.arg NonTerminal[] 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 + " ]";
         }
     }
@@ -47,8 +44,8 @@ public class MetaGrammarBindings {
     }
     public static class NonTerminal extends Un {
         public String  name = null;
-        public @bind NonTerminal(@bind.arg("Word") String name,
-                                 @bind.arg("RHS") Seq[][] sequences) {
+        public @bind NonTerminal(@bind.arg String name,
+                                 @bind.arg Seq[][] sequences) {
             this.name = name;
             this.sequences = sequences;
         }