checkpoint
[sbp.git] / src / edu / berkeley / sbp / misc / MetaGrammar.java
index 6eab9ed..18803cf 100644 (file)
@@ -33,11 +33,10 @@ public class MetaGrammar extends ReflectiveWalker {
     private String startSymbol;
     private boolean strings;
 
-    private Element  set(Range.Set r) { return CharToken.set(r); }
-    private Element  string(String s) { return CharToken.string(s); }
-    private Topology top()            { return CharToken.top(); }
-    private Atom     leftBrace()      { return CharToken.leftBrace; }
-    private Atom     rightBrace()     { return CharToken.rightBrace; }
+    private Element  set(Range.Set r) { if (strings) throw new Error(); return CharToken.set(r); }
+    private Element  string(String s) { return strings ? StringToken.string(s) : CharToken.string(s); }
+    private Atom     leftBrace()      { return strings ? StringToken.leftBrace : CharToken.leftBrace; }
+    private Atom     rightBrace()     { return strings ? StringToken.rightBrace : CharToken.rightBrace; }
 
     public MetaGrammar() { this("s", false); }
     public MetaGrammar(String s) { this(s, false); }
@@ -94,9 +93,9 @@ public class MetaGrammar extends ReflectiveWalker {
         return nonTerminal("braced"+(anon++),
                            new PreSequence[][] {
                                new PreSequence[] {
-                                   new PreSequence(leftBrace()),
-                                   p,
-                                   new PreSequence(rightBrace())
+                                   new PreSequence(new Element[] { leftBrace(),
+                                                                   p.buildUnion(),
+                                                                   rightBrace() })
                                }
                            },
                            false,