[e-cvs] cvs commit: e/src/jsrc/org/quasiliteral/term QuasiBuilder.java QuasiBuilderAdaptor.java TermParser.java term.y

markm@eros.cs.jhu.edu markm@eros.cs.jhu.edu
Sat, 22 Dec 2001 01:46:56 -0500


markm       01/12/22 01:46:56

  Modified:    src/jsrc/org/quasiliteral/astro Astro.java AstroArg.java
               src/jsrc/org/quasiliteral/quasiterm QAstro.java
                        QBuilder.java QSome.java
               src/jsrc/org/quasiliteral/term QuasiBuilder.java
                        QuasiBuilderAdaptor.java TermParser.java term.y
  Log:
  we now do nested quantifiers

Revision  Changes    Path
1.10      +0 -9      e/src/jsrc/org/quasiliteral/astro/Astro.java

Index: Astro.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/Astro.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Astro.java	2001/12/12 06:35:58	1.9
+++ Astro.java	2001/12/22 06:46:55	1.10
@@ -76,15 +76,6 @@
     String getOptArgString(short tagCode);
 
     /**
-     * What source text was originally lexed or parsed to produce this token?
-     * <p>
-     * The source-span annotations on the text are normally the significant
-     * part, not the text itself.  Absence of source information is indicated
-     * with an empty string, rather than null.
-     */
-    Twine getSource();
-
-    /**
      * @return :(ConstList of(AstroArg)); In most domains, AstroArg is the
      * same as Astro, so this usually returns (ConstList of(Astro)).
      */



1.3       +10 -0     e/src/jsrc/org/quasiliteral/astro/AstroArg.java

Index: AstroArg.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/AstroArg.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AstroArg.java	2001/12/12 06:35:58	1.2
+++ AstroArg.java	2001/12/22 06:46:55	1.3
@@ -1,5 +1,7 @@
 package org.quasiliteral.astro;
 
+import org.erights.e.elib.tables.Twine;
+
 //This file is hereby placed in the public domain
 
 /**
@@ -15,4 +17,12 @@
  */
 public interface AstroArg {
 
+    /**
+     * What source text was originally lexed or parsed to produce this node?
+     * <p>
+     * The source-span annotations on the text are normally the significant
+     * part, not the text itself.  Absence of source information is indicated
+     * with an empty string, rather than null.
+     */
+    Twine getSource();
 }



1.3       +1 -17     e/src/jsrc/org/quasiliteral/quasiterm/QAstro.java

Index: QAstro.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/quasiterm/QAstro.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- QAstro.java	2001/12/22 05:46:10	1.2
+++ QAstro.java	2001/12/22 06:46:55	1.3
@@ -35,28 +35,12 @@
     }
 
     /**
-     * Transitive snapshot through all substructure that's instanceof EList.
-     */
-    static private Object transSnapshot(Object thing) {
-        if (!(thing instanceof EList)) {
-            return thing;
-        }
-        EList list = (EList)thing;
-        int len = list.size();
-        Object[] result = new Object[len];
-        for (int i = 0; i < len; i++) {
-            result[i] = transSnapshot(list.get(i));
-        }
-        return ConstList.fromArray(result);
-    }
-
-    /**
      *
      */
     public ConstList matchBind(ConstList args, Object specimen) {
         FlexList bindings = FlexList.make();
         if (matchBind(args, specimen, bindings)) {
-            return (ConstList)transSnapshot(bindings);
+            return bindings.snapshot();
         } else {
             return null;
         }



1.6       +6 -8      e/src/jsrc/org/quasiliteral/quasiterm/QBuilder.java

Index: QBuilder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/quasiterm/QBuilder.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- QBuilder.java	2001/12/22 05:46:10	1.5
+++ QBuilder.java	2001/12/22 06:46:55	1.6
@@ -166,16 +166,14 @@
     /**
      *
      */
-    public AstroArg some(Astro optTerm, String quant) {
+    public AstroArg some(AstroArg optSub, String quant) {
         T.require(quant.length() == 1, "Must be single char: ", quant);
-        Twine source;
-        if (null == optTerm) {
-            source = EmptyTwine.THE_ONE;
-        } else {
-            source = optTerm.getSource();
+        Twine source = EmptyTwine.THE_ONE;
+        if (null != optSub) {
+            source = optSub.getSource();
         }
         return new QSome(myBuilder,
-                         (QAstroArg)optTerm,
+                         (QAstroArg)optSub,
                          quant.charAt(0),
                          source);
     }
@@ -183,7 +181,7 @@
     /**
      *
      */
-    public AstroArg group(Object args, String quant) {
+    public AstroArg group(Object args) {
         throw new RuntimeException("XXX not yet implemented");
     }
 



1.3       +18 -3     e/src/jsrc/org/quasiliteral/quasiterm/QSome.java

Index: QSome.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/quasiterm/QSome.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- QSome.java	2001/12/22 05:46:10	1.2
+++ QSome.java	2001/12/22 06:46:55	1.3
@@ -164,16 +164,31 @@
      */
     /*package*/
     int startShape(ConstList args,
-                   FlexList optBindings, int[] prefix,
+                   FlexList optBindings,
+                   int[] prefix,
                    int shapeSoFar) {
-        throw new RuntimeException("XXX not yet implemented");
+        if (null == myOptSubPattern) {
+            return shapeSoFar;
+        } else {
+            return myOptSubPattern.startShape(args,
+                                              optBindings,
+                                              prefix,
+                                              shapeSoFar);
+        }
     }
 
+    /**
+     *
+     */
     /*package*/
     void endShape(FlexList optBindings,
                   int[] prefix,
                   int shape) {
-        throw new RuntimeException("XXX not yet implemented");
+        if (null == myOptSubPattern) {
+            // Do nothing.
+        } else {
+            myOptSubPattern.endShape(optBindings, prefix, shape);
+        }
     }
 
     /**



1.5       +3 -3      e/src/jsrc/org/quasiliteral/term/QuasiBuilder.java

Index: QuasiBuilder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/QuasiBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- QuasiBuilder.java	2001/12/21 05:30:35	1.4
+++ QuasiBuilder.java	2001/12/22 06:46:56	1.5
@@ -75,17 +75,17 @@
      * <p>
      * Adds quant to the rank of optTerm.
      */
-    AstroArg some(Astro optTerm, String quant);
+    AstroArg some(AstroArg optSub, String quant);
 
     /**
      * Treat the 'args' list as a repeating sequence.
      * <p>
      * Matches a consecutive sequence of subsequences matched by 'args'.
-     * Adds quant to the rank of each arg.
+     * Doesn't affect rank since each arg is exactly once.
      *
      * @param args is a list of AstroArg.
      */
-    AstroArg group(Object args, String quant);
+    AstroArg group(Object args);
 
     /**
      * On substitution, "evaluates" to 'args[litInt]'.



1.5       +2 -2      e/src/jsrc/org/quasiliteral/term/QuasiBuilderAdaptor.java

Index: QuasiBuilderAdaptor.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/QuasiBuilderAdaptor.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- QuasiBuilderAdaptor.java	2001/12/21 05:30:35	1.4
+++ QuasiBuilderAdaptor.java	2001/12/22 06:46:56	1.5
@@ -145,11 +145,11 @@
         throw new RuntimeException("not quasi-ing");
     }
 
-    public AstroArg some(Astro optTerm, String quant) {
+    public AstroArg some(AstroArg optSub, String quant) {
         throw new RuntimeException("not quasi-ing");
     }
 
-    public AstroArg group(Object args, String quant) {
+    public AstroArg group(Object args) {
         throw new RuntimeException("not quasi-ing");
     }
 



1.20      +39 -39    e/src/jsrc/org/quasiliteral/term/TermParser.java

Index: TermParser.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/TermParser.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- TermParser.java	2001/12/21 05:30:35	1.19
+++ TermParser.java	2001/12/22 06:46:56	1.20
@@ -172,52 +172,52 @@
 };
 final static short yylen[] = {                            2,
     1,    1,    4,    3,    1,    1,    2,    0,    1,    1,
-    3,    1,    3,    1,    3,    1,    2,    1,    1,    4,
+    3,    1,    3,    1,    3,    1,    2,    1,    1,    3,
     2,    1,    1,    1,    1,    1,    1,    1,    1,    1,
     4,    4,
 };
 final static short yydefred[] = {                         0,
    30,   26,   27,   28,   29,    0,    0,    0,    0,    1,
     0,    5,    6,    0,    0,   19,    0,   22,   23,   24,
-    0,    0,    0,    0,    0,   14,   18,    0,    0,    0,
-    7,    0,   21,   17,    4,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   15,   31,   32,    3,   20,
+   16,    0,    0,    0,    0,    0,   18,    0,    0,    0,
+    7,    0,   21,    4,    0,    0,    0,   17,    0,    0,
+    0,   20,    0,    0,    0,   31,   32,    3,
 };
 final static short yydgoto[] = {                          9,
    21,   11,   22,   12,   13,   14,   23,   24,   25,   26,
    27,
 };
 final static short yysindex[] = {                       -31,
-    0,    0,    0,    0,    0,  -36, -101,  -98,    0,    0,
-  -14,    0,    0,  -33,  -36,    0, -232,    0,    0,    0,
-   -7,  -63,  -12,  -90,   -1,    0,    0, -221, -212,  -36,
-    0,  -20,    0,    0,    0,  -36,  -36,  -36,  -77,  -72,
-   16,   -7,  -90,   -1,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  -36, -114, -104,    0,    0,
+  -14,    0,    0,  -33,  -36,    0, -231,    0,    0,    0,
+    0,  -61,  -10,  -86,    9,   -7,    0, -206, -202,  -36,
+    0,   -4,    0,    0,  -36,  -36,  -36,    0,  -66,  -64,
+   21,    0,  -86,    9,   -7,    0,    0,    0,
 };
 final static short yyrindex[] = {                         0,
-    0,    0,    0,    0,    0,  -34,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,  -30,    0,    0,    0,    0,
     8,    0,    0,    1,    0,    0,    0,    0,    0,    0,
-  -27,    0,  -39,  -26,  -32,    0,    0,    0,    0,   21,
+    0,    0,  -39,  -20,  -28,  -27,    0,    0,    0,   27,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,  -21,  -28,    0,    0,    0,    0,    0,
+    0,    0,  -19,  -21,  -26,    0,    0,    0,
 };
 final static short yygindex[] = {                         0,
-   63,    0,   38,    0,   55,    0,   58,   34,   37,   39,
-   -2,
+   69,    0,   40,    0,   61,    0,   62,   41,   42,   43,
+    3,
 };
 final static int YYTABLESIZE=230;
 final static short yytable[] = {                          7,
-   25,    9,    7,   15,    7,   20,   19,    2,   12,   16,
-   16,   12,   13,   16,   10,   13,   16,   10,   34,   11,
-   42,   28,   11,   36,   29,   30,   18,    8,   33,   35,
-    8,   36,    8,   37,   20,   19,   38,   39,   25,   49,
-   25,   25,   25,   25,   25,    2,   40,   46,    2,    2,
-    2,    2,   47,    9,    6,   18,   48,   17,    8,    6,
-   12,    8,   10,   25,   13,   16,   10,   41,   31,   43,
-    2,   11,   32,   44,    0,    0,   45,    0,    0,    0,
+   25,    9,    7,   15,    7,   20,   19,    2,   28,   16,
+   14,   15,   12,   14,   15,   12,   14,   15,   29,   13,
+   10,   11,   13,   10,   11,   30,   18,    8,   38,   33,
+    8,   34,    8,   35,   20,   19,   42,   36,   25,   35,
+   25,   25,   25,   25,   25,    2,   37,   38,    2,    2,
+    2,    2,   39,    9,    6,   18,   40,   17,   46,    6,
+   47,   48,    8,   25,   12,   14,   15,    8,   10,   41,
+    2,   13,   10,   11,   31,   43,   32,   44,    0,   45,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,   12,    0,   25,    0,   13,   16,    0,    0,    0,
-    2,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,   25,    0,   12,   14,   15,    0,    0,
+    2,    0,   13,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,   25,    0,    0,    0,    0,    0,
     0,    2,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -232,17 +232,17 @@
     1,    2,    3,    4,    5,    1,    2,    3,    4,    5,
 };
 final static short yycheck[] = {                         36,
-    0,   41,   36,   40,   36,   42,   43,    0,   41,   46,
-   38,   44,   41,   41,   41,   44,   44,   44,   21,   41,
-   41,  123,   44,   44,  123,   40,   63,   64,  261,   93,
-   64,   44,   64,  124,   42,   43,   38,  259,   38,   42,
-   40,   41,   42,   43,   44,   38,  259,  125,   41,   42,
-   43,   44,  125,   93,   91,   63,   41,   94,   93,   91,
-   93,   41,    0,   63,   93,   93,   93,   30,   14,   36,
-   63,   93,   15,   37,   -1,   -1,   38,   -1,   -1,   -1,
+    0,   41,   36,   40,   36,   42,   43,    0,  123,   46,
+   38,   38,   41,   41,   41,   44,   44,   44,  123,   41,
+   41,   41,   44,   44,   44,   40,   63,   64,   26,  261,
+   64,   93,   64,   44,   42,   43,   41,  124,   38,   44,
+   40,   41,   42,   43,   44,   38,   38,   45,   41,   42,
+   43,   44,  259,   93,   91,   63,  259,   94,  125,   91,
+  125,   41,   93,   63,   93,   93,   93,   41,    0,   30,
+   63,   93,   93,   93,   14,   35,   15,   36,   -1,   37,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,  124,   -1,   93,   -1,  124,  124,   -1,   -1,   -1,
-   93,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   93,   -1,  124,  124,  124,   -1,   -1,
+   93,   -1,  124,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,  124,   -1,   -1,   -1,   -1,   -1,
    -1,  124,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
@@ -296,10 +296,10 @@
 "bag : seq",
 "bag : bag '&' seq",
 "seq : term",
-"seq : term quant",
+"seq : seq quant",
 "seq : quant",
 "seq : '.'",
-"seq : '(' args ')' quant",
+"seq : '(' args ')'",
 "seq : '^' LiteralString",
 "quant : '?'",
 "quant : '+'",
@@ -678,11 +678,11 @@
 break;
 case 17:
 //#line 117 "term.y"
-{ yyval = b.some((Astro)val_peek(1), (String)val_peek(0)); }
+{ yyval = b.some((AstroArg)val_peek(1), (String)val_peek(0)); }
 break;
 case 18:
 //#line 118 "term.y"
-{ yyval = b.some(null,      (String)val_peek(0)); }
+{ yyval = b.some(null,         (String)val_peek(0)); }
 break;
 case 19:
 //#line 119 "term.y"
@@ -690,7 +690,7 @@
 break;
 case 20:
 //#line 120 "term.y"
-{ yyval = b.group(val_peek(2),       (String)val_peek(0)); }
+{ yyval = b.group(val_peek(1)); }
 break;
 case 21:
 //#line 121 "term.y"



1.19      +4 -4      e/src/jsrc/org/quasiliteral/term/term.y

Index: term.y
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/term.y,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- term.y	2001/12/21 05:30:35	1.18
+++ term.y	2001/12/22 06:46:56	1.19
@@ -114,10 +114,10 @@
  */
 seq:
         term                    // An Astro is already a fine AstroArg
- |      term quant              { $$ = b.some((Astro)$1, (String)$2); }
- |           quant              { $$ = b.some(null,      (String)$1); }
- |           '.'                { reserved("Use '@{_}' for now"); }
- |      '(' args ')' quant      { $$ = b.group($2,       (String)$4); }
+ |      seq quant               { $$ = b.some((AstroArg)$1, (String)$2); }
+ |          quant               { $$ = b.some(null,         (String)$1); }
+ |          '.'                 { reserved("Use '@{_}' for now"); }
+ |      '(' args ')'            { $$ = b.group($2); }
  |      '^' LiteralString       { $$ = b.unpack((Astro)$2); }
  ;