checkpoint
authoradam <adam@megacz.com>
Wed, 14 Dec 2005 02:40:15 +0000 (21:40 -0500)
committeradam <adam@megacz.com>
Wed, 14 Dec 2005 02:40:15 +0000 (21:40 -0500)
darcs-hash:20051214024015-5007d-6b143d5b071f94cf592444ffff69e98e31d0ee21.gz

src/edu/berkeley/sbp/misc/MetaGrammar.java
tests/meta.g

index 6224fa0..a5d7e1d 100644 (file)
@@ -27,14 +27,14 @@ public class MetaGrammar extends ReflectiveWalker {
 
     // MetaGrammar //////////////////////////////////////////////////////////////////////////////
 
 
     // MetaGrammar //////////////////////////////////////////////////////////////////////////////
 
-    public Object     _star_(Element r) { return new Rep(r, null, false, true); }
-    public Element     _leftbracket_(Object o, Object[] args) { return rangex(o==null || !(o instanceof Character) ? null : o, args); }
-    public Union       _colon__colon__equals_(String s, PreSequence[][] p) { return nonTerminalZ(s, p); }
-    public Union       _bang__colon__colon__equals_(String s, PreSequence[][] p) { return nonTerminalZ(s, p, true); }
+    public Object      _star_(Element r)                                              { return new Rep(r, null, false, true); }
+    public Element     _leftbracket_(Object o, Object[] args)                         { return rangex(o==null || !(o instanceof Character) ? null : o, args); }
+    public Union       _colon__colon__equals_(String s, PreSequence[][] p)            { return nonTerminalZ(s, p); }
+    public Union       _bang__colon__colon__equals_(String s, PreSequence[][] p)      { return nonTerminalZ(s, p, true); }
     public Union       _colon__colon__equals_(boolean q, String s, PreSequence[][] p) { return nonTerminalZ(s, p, q); }
     public Union       _colon__colon__equals_(boolean q, String s, PreSequence[][] p) { return nonTerminalZ(s, p, q); }
-    public Element     _leftparen__rightparen_()               { return epsilon; }
-    public Element     epsilon(Object o, Object b)               { return epsilon; }
-    public Element     _rightparen_(Object e)                 { return SELF; }
+    public Element     _leftparen__rightparen_()                                      { return epsilon; }
+    public Element     epsilon(Object o, Object b)                                    { return epsilon; }
+    public Element     _rightparen_(Object e)                                         { return SELF; }
 
     public PreSequence _amp_(PreSequence p, Object[] o) {
         p.needs.add(new PreSequence(o, null, true));
 
     public PreSequence _amp_(PreSequence p, Object[] o) {
         p.needs.add(new PreSequence(o, null, true));
@@ -54,6 +54,7 @@ public class MetaGrammar extends ReflectiveWalker {
     public PreSequence[] alternatives(PreSequence[] s) { return s; }
         
     public Range       _minus_(Character a, Character b)   { return b==null ? new Range(a.charValue(), true) : new Range(a.charValue(), b.charValue()); }
     public PreSequence[] alternatives(PreSequence[] s) { return s; }
         
     public Range       _minus_(Character a, Character b)   { return b==null ? new Range(a.charValue(), true) : new Range(a.charValue(), b.charValue()); }
+    public Object  _leftparen_(PreSequence[][] p) { return nonTerminalZ(p); }
     public Union       nonTerminalY(String s) { return nonTerminalX(s, false, false); }
     public Union nonTerminalX(String s, boolean synthetic, boolean dropAll) {
         Union n = s.equals(startSymbol) ? g : nt.get(s);
     public Union       nonTerminalY(String s) { return nonTerminalX(s, false, false); }
     public Union nonTerminalX(String s, boolean synthetic, boolean dropAll) {
         Union n = s.equals(startSymbol) ? g : nt.get(s);
@@ -61,7 +62,6 @@ public class MetaGrammar extends ReflectiveWalker {
         if (dropAll) this.dropAll.add(n);
         return n;
     }
         if (dropAll) this.dropAll.add(n);
         return n;
     }
-    public Object  _leftparen_(PreSequence[][] p) { return nonTerminalZ(p); }
     public Union       nonTerminalZ(PreSequence[][] p)           { return nonTerminalX("anon"+(anon++), p, false, false); }
     public Union       nonTerminalZ(String s, PreSequence[][] p) { return nonTerminalX(s, p, false, false); }
     public Union       nonTerminalZ(String s, PreSequence[][] p, boolean q) { return nonTerminalX(s, p, false, q); }
     public Union       nonTerminalZ(PreSequence[][] p)           { return nonTerminalX("anon"+(anon++), p, false, false); }
     public Union       nonTerminalZ(String s, PreSequence[][] p) { return nonTerminalX(s, p, false, false); }
     public Union       nonTerminalZ(String s, PreSequence[][] p, boolean q) { return nonTerminalX(s, p, false, q); }
@@ -73,7 +73,6 @@ public class MetaGrammar extends ReflectiveWalker {
         Object[] ret = new Object[o.length * 2 - 1];
         for(int i=0; i<o.length; i++) {
             Object oi = o[i];
         Object[] ret = new Object[o.length * 2 - 1];
         for(int i=0; i<o.length; i++) {
             Object oi = o[i];
-            //if (oi instanceof Rep) oi = ((Rep)oi).build(new MyDrop(sep));
             ret[i*2]   = oi;
             if (i*2+1<ret.length) ret[i*2+1] = new MyDrop(sep);
         }
             ret[i*2]   = oi;
             if (i*2+1<ret.length) ret[i*2+1] = new MyDrop(sep);
         }
index 17bff83..5103b5b 100644 (file)
@@ -35,6 +35,8 @@ e        ::= word                             => "nonTerminalY"
            |     "[~" (range*) "]" => "rangex"
            |  e ^"%%" e                 /ws
            |  e ^"$$" e                 /ws
            |     "[~" (range*) "]" => "rangex"
            |  e ^"%%" e                 /ws
            |  e ^"$$" e                 /ws
+           |  e ^"+/" e                 /ws
+           |  e ^"*/" e                 /ws
            |  e ^"?"                    /ws
            |  e ^"~/~"                  /ws
 
            |  e ^"?"                    /ws
            |  e ^"~/~"                  /ws