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

markm@eros.cs.jhu.edu markm@eros.cs.jhu.edu
Wed, 19 Dec 2001 17:36:13 -0500


markm       01/12/19 17:36:13

  Modified:    src/jsrc/org/erights/e/develop/format StringHelper.java
               src/jsrc/org/quasiliteral/astro AstroBuilder.java
                        BaseBuilder.java
               src/jsrc/org/quasiliteral/quasiterm QBuilder.java QTerm.java
               src/jsrc/org/quasiliteral/term QuasiBuilder.java
                        QuasiBuilderAdaptor.java TermBuilder.java
                        TermParser.java term.y
  Log:
  A bit of grammar refactoring

Revision  Changes    Path
1.5       +6 -6      e/src/jsrc/org/erights/e/develop/format/StringHelper.java

Index: StringHelper.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/develop/format/StringHelper.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- StringHelper.java	2001/12/19 10:18:06	1.4
+++ StringHelper.java	2001/12/19 22:36:13	1.5
@@ -147,17 +147,17 @@
     }
 
     /**
-     * Return name prefixed by "a " or "an " according to a simple (and
+     * Return self prefixed by "a " or "an " according to a simple (and
      * therefore inadequate) heuristic, but good enough for cheezy uses.
      * <p>
      * Note that this routine is not expected to internationalize well.
      */
-    static public String aan(String name) {
-        char c = Character.toLowerCase(name.charAt(0));
-        if (name.length() >= 1 && "aeiouh".indexOf(c) != -1) {
-            return "an " + name;
+    static public String aan(String self) {
+        char c = Character.toLowerCase(self.charAt(0));
+        if (self.length() >= 1 && "aeiouh".indexOf(c) != -1) {
+            return "an " + self;
         } else {
-            return "a " + name;
+            return "a " + self;
         }
     }
 }



1.7       +30 -1     e/src/jsrc/org/quasiliteral/astro/AstroBuilder.java

Index: AstroBuilder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/AstroBuilder.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- AstroBuilder.java	2001/12/12 06:35:58	1.6
+++ AstroBuilder.java	2001/12/19 22:36:13	1.7
@@ -28,6 +28,15 @@
     AstroSchema getSchema();
 
     /**
+     * When we're finished building, this should be applied to the root node.
+     * <p>
+     * It is normally just an identity function, but allows, for example,
+     * post-parsing cleanup.  This is called by the parser, but not currently
+     * by the 'build' or 'qbuild' methods of other trees.
+     */
+    Astro start(Astro top);
+
+    /**
      * Makes a leaf (eg, a Token) not representing literal data, but just a
      * token tag (token type indicator) as identified by 'tag'.
      * <p>
@@ -117,8 +126,28 @@
      * to be zero-arity, or an exception will be thrown.
      *
      * @param args :Args
+     */
+    Astro term(Astro functor, Object args);
+
+    /**
+     * For when a functor is used as a term without being followed by an
+     * explicit '()'.
+     * <p>
+     * For literal Astros, this is equivalent to 'term(functor, list())', but
+     * is separate for support of quasi-literals, and explained at
+     * {@link #term(Astro, Object)}.
+     */
+    Astro term(Astro functor);
+
+    /**
+     * For supporting the square bracket shorthand for terms that represent
+     * tuples.
+     * <p>
+     * This is equivalent to 'term(leafTag("tuple"), args)', although an
+     * individual builder/schema may have its own idea about what tagName
+     * to use to mark a tuple.
      */
-    Astro term(Astro leaf, Object args);
+    Astro tuple(Object args);
 
     /**
      * The empty args list



1.5       +18 -0     e/src/jsrc/org/quasiliteral/astro/BaseBuilder.java

Index: BaseBuilder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/BaseBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- BaseBuilder.java	2001/12/18 05:24:44	1.4
+++ BaseBuilder.java	2001/12/19 22:36:13	1.5
@@ -1,6 +1,7 @@
 package org.quasiliteral.astro;
 
 import org.erights.e.elib.tables.Twine;
+import org.erights.e.elib.tables.EmptyTwine;
 
 import java.math.BigInteger;
 
@@ -32,6 +33,13 @@
     }
 
     /**
+     * Just returns top
+     */
+    public Astro start(Astro top) {
+        return top;
+    }
+
+    /**
      * Actually makes the kind of leaf this builder makes.
      * <p>
      * This is 'internal*' and 'protected' because it assumes that the
@@ -117,6 +125,16 @@
         return leafInternal(mySchema.getLiteralStringTag(),
                             data,
                             source);
+    }
+
+    public Astro term(Astro functor) {
+        return term(functor, list());
+    }
+
+    public Astro tuple(Object args) {
+        return term(leafTag(mySchema.obtainTagForName("tuple"),
+                            EmptyTwine.THE_ONE),
+                    args);
     }
 
     public Object list(AstroArg first) {



1.3       +9 -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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- QBuilder.java	2001/12/19 10:18:08	1.2
+++ QBuilder.java	2001/12/19 22:36:13	1.3
@@ -96,15 +96,12 @@
     /**
      *
      */
-    public Astro term(Astro leaf, Object args) {
-        return new QTerm(myBuilder, (QAstro)leaf, ((EList)args).snapshot());
+    public Astro term(Astro functor, Object args) {
+        return new QTerm(myBuilder, (QAstro)functor, ((EList)args).snapshot());
     }
 
-    /**
-     *
-     */
-    public boolean doesQuasis() {
-        return true;
+    public Astro term(Astro functor) {
+        throw new RuntimeException("XXX not yet implemented");
     }
 
     /**
@@ -126,7 +123,11 @@
     /**
      *
      */
-    public Astro termHole(Astro optIdent, Astro functorHole) {
+    public boolean doesQuasis() {
+        return true;
+    }
+
+    public Astro taggedHole(Astro ident, Astro functorHole) {
         throw new RuntimeException("XXX not yet implemented");
     }
 



1.3       +0 -7      e/src/jsrc/org/quasiliteral/quasiterm/QTerm.java

Index: QTerm.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/quasiterm/QTerm.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- QTerm.java	2001/12/19 10:18:08	1.2
+++ QTerm.java	2001/12/19 22:36:13	1.3
@@ -80,13 +80,6 @@
     /**
      *
      */
-    public Astro build(AstroBuilder builder) {
-        throw new RuntimeException("Can't build.  Try qbuild instead");
-    }
-
-    /**
-     *
-     */
     public AstroArg qbuild(QuasiBuilder qbuilder) {
         Astro func = (Astro)myQFunctor.qbuild(qbuilder);
         Object args = qbuilder.list();



1.3       +2 -5      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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- QuasiBuilder.java	2001/12/19 10:18:08	1.2
+++ QuasiBuilder.java	2001/12/19 22:36:13	1.3
@@ -36,12 +36,9 @@
     boolean doesQuasis();
 
     /**
-     * Upgrades the functorHole to a TermHole.
-     * <p>
-     * If optIdent is provided, then it will only match terms with a matching
-     * tag.
+     *
      */
-    Astro termHole(Astro optIdent, Astro functorHole);
+    Astro taggedHole(Astro ident, Astro functorHole);
 
     /**
      * Matched anything matched by either leftArg or rightArg.



1.3       +15 -3     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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- QuasiBuilderAdaptor.java	2001/12/19 10:18:08	1.2
+++ QuasiBuilderAdaptor.java	2001/12/19 22:36:13	1.3
@@ -53,6 +53,10 @@
         return myBuilder.getSchema();
     }
 
+    public Astro start(Astro top) {
+        return myBuilder.start(top);
+    }
+
     public Astro leafTag(AstroTag tag, Twine source) {
         return myBuilder.leafTag(tag, source);
     }
@@ -88,9 +92,17 @@
     public Astro leafTwine(Twine data, Twine source) {
         return myBuilder.leafTwine(data, source);
     }
+
+    public Astro term(Astro functor, Object args) {
+        return myBuilder.term(functor, args);
+    }
+
+    public Astro term(Astro functor) {
+        return myBuilder.term(functor);
+    }
 
-    public Astro term(Astro leaf, Object args) {
-        return myBuilder.term(leaf, args);
+    public Astro tuple(Object args) {
+        return myBuilder.tuple(args);
     }
 
     public Object list() {
@@ -121,7 +133,7 @@
         return false;
     }
 
-    public Astro termHole(Astro optIdent, Astro functorHole) {
+    public Astro taggedHole(Astro ident, Astro functorHole) {
         throw new RuntimeException("not quasi-ing");
     }
 



1.20      +3 -3      e/src/jsrc/org/quasiliteral/term/TermBuilder.java

Index: TermBuilder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/TermBuilder.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- TermBuilder.java	2001/12/19 10:18:08	1.19
+++ TermBuilder.java	2001/12/19 22:36:13	1.20
@@ -76,12 +76,12 @@
     }
 
     /**
-     * @param func :Term with no arguments
+     * @param functor :Term with no arguments
      * @param args :(EList of(Term))
      * @return :Term
      */
-    public Astro term(Astro leaf, Object args) {
-        Term func = (Term)leaf;
+    public Astro term(Astro functor, Object args) {
+        Term func = (Term)functor;
         T.require(func.getArgs().size() == 0,
                   "To use as a functor, a Term must not have args: ",
                   func);



1.18      +110 -103  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.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- TermParser.java	2001/12/19 10:18:08	1.17
+++ TermParser.java	2001/12/19 22:36:13	1.18
@@ -165,59 +165,63 @@
 public final static short EOL=262;
 public final static short YYERRCODE=256;
 final static short yylhs[] = {                           -1,
-    0,    1,    1,    1,    1,    1,    3,    3,    5,    5,
-    6,    6,    7,    7,    8,    8,    8,    8,    8,    8,
-    9,    9,    9,    2,    2,    2,    2,    2,    4,    4,
+    0,    1,    1,    1,    2,    2,    2,    3,    3,    7,
+    7,    8,    8,    9,    9,   10,   10,   10,   10,   10,
+   10,   11,   11,   11,    4,    4,    4,    4,    4,    6,
+    5,    5,
 };
 final static short yylen[] = {                            2,
-    1,    1,    4,    4,    1,    2,    0,    1,    1,    3,
-    1,    3,    1,    3,    1,    2,    1,    1,    4,    2,
-    1,    1,    1,    1,    1,    1,    1,    1,    4,    4,
+    1,    1,    4,    3,    1,    1,    2,    0,    1,    1,
+    3,    1,    3,    1,    3,    1,    2,    1,    1,    4,
+    2,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+    4,    4,
 };
 final static short yydefred[] = {                         0,
-    0,   25,   26,   27,   28,    0,    0,    0,    1,    0,
-    0,    6,    0,    0,    0,    0,    0,    0,    0,   18,
-    0,   21,   22,   23,    0,    0,    0,    0,    0,   13,
-   17,    0,   29,   30,    0,   20,   16,    3,    0,    0,
-    0,    4,    0,    0,    0,   14,   19,
+   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,
+};
+final static short yydgoto[] = {                          9,
+   21,   11,   22,   12,   13,   14,   23,   24,   25,   26,
+   27,
 };
-final static short yydgoto[] = {                          8,
-   25,   10,   26,   11,   27,   28,   29,   30,   31,
-};
 final static short yysindex[] = {                       -31,
-  -34,    0,    0,    0,    0, -106,  -99,    0,    0,   -9,
-   -6,    0, -224, -223,  -36,  -36,  -88,  -87,  -36,    0,
- -214,    0,    0,    0,  -23,    7,    9,  -70,   17,    0,
-    0,   16,    0,    0,  -19,    0,    0,    0,  -36,  -36,
-  -36,    0,  -23,  -70,   17,    0,    0,
+    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,
 };
 final static short yyrindex[] = {                         0,
-    1,    0,    0,    0,    0,    0,    0,    0,    0,    8,
-   18,    0,    0,    0,   22,   22,    0,    0,    0,    0,
-    0,    0,    0,    0,  -29,    0,   24,  -18,  -30,    0,
+    0,    0,    0,    0,    0,  -34,    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,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,  -12,  -28,    0,    0,
+    0,    0,  -21,  -28,    0,    0,    0,    0,    0,
 };
 final static short yygindex[] = {                         0,
-   66,    0,   51,   67,   50,   31,   32,   33,  -22,
+   63,    0,   38,    0,   55,    0,   58,   34,   37,   39,
+   -2,
 };
 final static int YYTABLESIZE=230;
-final static short yytable[] = {                          6,
-   24,    6,   37,   19,    6,   24,   23,    2,   15,   20,
-   11,   15,   12,   11,   15,   12,   13,    5,   24,   23,
-   47,   43,    9,   14,   39,    9,   22,    7,   10,    7,
-   15,   10,    7,   16,   17,   18,   33,   34,   24,   22,
-   24,   24,   24,   24,   24,    2,   36,   38,    2,    2,
-    2,    2,   39,   40,   41,    5,   42,   21,    5,    5,
-    5,    5,    7,   24,    8,    9,   32,   12,   35,   44,
-    2,   45,    0,   46,    0,    0,    0,    0,    0,    0,
-    5,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,   11,   15,   12,    0,    0,    0,    0,
+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,
     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,    0,    0,    0,    0,    0,    0,    0,
-    0,    0,    0,    0,   24,    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,
-    0,    5,    0,    0,    0,    0,    0,    0,    0,    0,
+    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -228,21 +232,20 @@
     1,    2,    3,    4,    5,    1,    2,    3,    4,    5,
 };
 final static short yycheck[] = {                         36,
-    0,   36,   25,   40,   36,   42,   43,    0,   38,   46,
-   41,   41,   41,   44,   44,   44,  123,    0,   42,   43,
-   43,   41,   41,  123,   44,   44,   63,   64,   41,   64,
-   40,   44,   64,   40,  259,  259,  125,  125,   38,   63,
-   40,   41,   42,   43,   44,   38,  261,   41,   41,   42,
-   43,   44,   44,  124,   38,   38,   41,   94,   41,   42,
-   43,   44,   41,   63,   41,    0,   16,    1,   19,   39,
-   63,   40,   -1,   41,   -1,   -1,   -1,   -1,   -1,   -1,
-   63,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-   -1,   -1,   -1,  124,  124,  124,   -1,   -1,   -1,   -1,
+    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,
    -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,   -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,
-   -1,  124,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
@@ -250,9 +253,10 @@
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   257,  258,  259,  260,  261,  257,  258,  259,  260,  261,
 };
-final static short YYFINAL=8;
+final static short YYFINAL=9;
 final static short YYMAXTOKEN=262;
 final static String yyname[] = {
 "end-of-file",null,null,null,null,null,null,null,null,null,null,null,null,null,
@@ -261,7 +265,7 @@
 "','",null,"'.'",null,null,null,null,null,null,null,null,null,null,null,null,
 null,null,null,null,"'?'","'@'",null,null,null,null,null,null,null,null,null,
 null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
-null,null,null,null,"'^'",null,null,null,null,null,null,null,null,null,null,
+null,"'['",null,"']'","'^'",null,null,null,null,null,null,null,null,null,null,
 null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
 null,null,"'{'","'|'","'}'",null,null,null,null,null,null,null,null,null,null,
 null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
@@ -279,9 +283,10 @@
 "start : term",
 "term : functor",
 "term : functor '(' argList ')'",
-"term : functorHole '(' argList ')'",
-"term : functorHole",
-"term : ID functorHole",
+"term : '[' argList ']'",
+"functor : leaf",
+"functor : functorHole",
+"functor : id functorHole",
 "argList :",
 "argList : args",
 "args : arg",
@@ -299,16 +304,17 @@
 "quant : '?'",
 "quant : '+'",
 "quant : '*'",
-"functor : ID",
-"functor : LiteralChar",
-"functor : LiteralInteger",
-"functor : LiteralFloat64",
-"functor : LiteralString",
+"leaf : id",
+"leaf : LiteralChar",
+"leaf : LiteralInteger",
+"leaf : LiteralFloat64",
+"leaf : LiteralString",
+"id : ID",
 "functorHole : '$' '{' LiteralInteger '}'",
 "functorHole : '@' '{' LiteralInteger '}'",
 };
 
-//#line 144 "term.y"
+//#line 153 "term.y"
 
 
 /**
@@ -475,7 +481,7 @@
 static public final AstroSchema DEFAULT_SCHEMA =
   new BaseSchema("Term-Tree-Language", ConstList.fromArray(TheTokens));
 
-//#line 427 "TermParser.java"
+//#line 433 "TermParser.java"
 //###############################################################
 // method: yylexdebug : check lexer state
 //###############################################################
@@ -622,90 +628,91 @@
       {
 //########## USER-SUPPLIED ACTIONS ##########
 case 1:
-//#line 76 "term.y"
-{ myOptResult = (Astro)val_peek(0); }
+//#line 77 "term.y"
+{ myOptResult = b.start((Astro)val_peek(0)); }
 break;
-case 3:
+case 2:
 //#line 81 "term.y"
-{ yyval = b.term((Astro)val_peek(3), val_peek(1)); }
+{ yyval = b.term((Astro)val_peek(0)); }
 break;
-case 4:
+case 3:
 //#line 82 "term.y"
 { yyval = b.term((Astro)val_peek(3), val_peek(1)); }
 break;
-case 5:
-//#line 84 "term.y"
-{ yyval = b.termHole(null,      (Astro)val_peek(0)); }
-break;
-case 6:
-//#line 85 "term.y"
-{ yyval = b.termHole((Astro)val_peek(1), (Astro)val_peek(0)); }
+case 4:
+//#line 83 "term.y"
+{ yyval = b.tuple(val_peek(1)); }
 break;
 case 7:
 //#line 89 "term.y"
-{ yyval = b.list(); }
+{ yyval = b.taggedHole((Astro)val_peek(1),
+                                                         (Astro)val_peek(0)); }
 break;
-case 9:
+case 8:
 //#line 94 "term.y"
-{ yyval = b.list((AstroArg)val_peek(0)); }
+{ yyval = b.list(); }
 break;
 case 10:
-//#line 95 "term.y"
-{ yyval = b.with(val_peek(2), (AstroArg)val_peek(0)); }
+//#line 99 "term.y"
+{ yyval = b.list((AstroArg)val_peek(0)); }
 break;
-case 12:
+case 11:
 //#line 100 "term.y"
-{ yyval = b.alt((AstroArg)val_peek(2), (AstroArg)val_peek(0));}
+{ yyval = b.with(val_peek(2), (AstroArg)val_peek(0)); }
 break;
-case 14:
+case 13:
 //#line 105 "term.y"
+{ yyval = b.alt((AstroArg)val_peek(2), (AstroArg)val_peek(0));}
+break;
+case 15:
+//#line 110 "term.y"
 { yyval = b.bag((AstroArg)val_peek(2), (AstroArg)val_peek(0));}
 break;
-case 16:
-//#line 113 "term.y"
+case 17:
+//#line 118 "term.y"
 { yyval = b.seq((Astro)val_peek(1), (String)val_peek(0)); }
 break;
-case 17:
-//#line 114 "term.y"
+case 18:
+//#line 119 "term.y"
 { yyval = b.seq(null,      (String)val_peek(0)); }
 break;
-case 18:
-//#line 115 "term.y"
+case 19:
+//#line 120 "term.y"
 { yyval = b.seq(null,      "."); }
 break;
-case 19:
-//#line 116 "term.y"
+case 20:
+//#line 121 "term.y"
 { yyval = b.group(val_peek(2),      (String)val_peek(0)); }
 break;
-case 20:
-//#line 117 "term.y"
+case 21:
+//#line 122 "term.y"
 { yyval = b.unpack((Astro)val_peek(0)); }
 break;
-case 21:
-//#line 121 "term.y"
+case 22:
+//#line 126 "term.y"
 { yyval = "?"; }
 break;
-case 22:
-//#line 122 "term.y"
+case 23:
+//#line 127 "term.y"
 { yyval = "+"; }
 break;
-case 23:
-//#line 123 "term.y"
+case 24:
+//#line 128 "term.y"
 { yyval = "*"; }
 break;
-case 24:
-//#line 127 "term.y"
+case 30:
+//#line 140 "term.y"
 { yyval = untag((Astro)val_peek(0)); }
 break;
-case 29:
-//#line 138 "term.y"
+case 31:
+//#line 147 "term.y"
 { yyval = b.dollarHole((Astro)val_peek(1)); }
 break;
-case 30:
-//#line 139 "term.y"
+case 32:
+//#line 148 "term.y"
 { yyval = b.atHole(    (Astro)val_peek(1)); }
 break;
-//#line 654 "TermParser.java"
+//#line 661 "TermParser.java"
 //########## END OF USER-SUPPLIED ACTIONS ##########
     }//switch
     //#### Now let's reduce... ####



1.17      +19 -10    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.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- term.y	2001/12/19 10:18:08	1.16
+++ term.y	2001/12/19 22:36:13	1.17
@@ -44,8 +44,9 @@
  * this grammar is simply:<pre>
  *
  *     term:
- *             functor
+ *             functor                  # sugar for: <functor>()
  *      |      functor '(' argList ')'
+ *      |      '[' argList ']'          # sugar for: tuple(<argList>...)
  *      ;
  *
  *     argList:
@@ -60,7 +61,7 @@
  *
  *     seq:
  *             term
- *      |      '^' LiteralString
+ *      |      '^' LiteralString        # ^"xyz" is sugar for: 'x', 'y', 'z'
  *
  *     functor:
  *             ID
@@ -73,16 +74,20 @@
  * </pre>
  */
 start:
-        term                         { myOptResult = (Astro)$1; }
+        term                         { myOptResult = b.start((Astro)$1); }
 ;
 
 term:
-        functor
- |      functor     '(' argList ')'  { $$ = b.term((Astro)$1, $3); }
- |      functorHole '(' argList ')'  { $$ = b.term((Astro)$1, $3); }
+        functor                      { $$ = b.term((Astro)$1); }
+ |      functor '(' argList ')'      { $$ = b.term((Astro)$1, $3); }
+ |      '[' argList ']'              { $$ = b.tuple($2); }
+ ;
 
- |         functorHole               { $$ = b.termHole(null,      (Astro)$1); }
- |      ID functorHole               { $$ = b.termHole((Astro)$1, (Astro)$2); }
+functor:
+        leaf
+ |      functorHole
+ |      id functorHole               { $$ = b.taggedHole((Astro)$1,
+                                                         (Astro)$2); }
  ;
 
 argList:
@@ -123,12 +128,16 @@
  |      '*'                          { $$ = "*"; }
  ;
 
-functor:
-        ID                           { $$ = untag((Astro)$1); }
+leaf:
+        id
  |      LiteralChar
  |      LiteralInteger
  |      LiteralFloat64
  |      LiteralString
+ ;
+
+id:
+        ID                           { $$ = untag((Astro)$1); }
  ;
 
 /**