[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); }
;
/**