[e-cvs] cvs commit: e/src/jsrc/org/quasiliteral/term Functor.java
markm@eros.cs.jhu.edu
markm@eros.cs.jhu.edu
Sat, 3 Nov 2001 19:38:12 -0500
markm 01/11/03 19:38:12
Modified: src/esrc/org/erights/e/install/props substFromProps.emaker
src/jsrc Makefile
src/jsrc/org/erights/e/elang/syntax ELexer.java EParser.java
e.y
src/jsrc/org/erights/e/elib/base SourceSpan.java
src/jsrc/org/erights/e/elib/tables AtomicTwine.java
CompositeTwine.java EmptyTwine.java
LocatedTwine.java Twine.java
src/jsrc/org/quasiliteral/astro AstroToken.java
src/jsrc/org/quasiliteral/term Functor.java
Added: src/jsrc/org/quasiliteral/quasiterm term.y
Log:
quasi-term-trees making much progress
Revision Changes Path
1.4 +1 -1 e/src/esrc/org/erights/e/install/props/substFromProps.emaker
Index: substFromProps.emaker
===================================================================
RCS file: /cvs/e/src/esrc/org/erights/e/install/props/substFromProps.emaker,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- substFromProps.emaker 2001/03/12 07:01:40 1.3
+++ substFromProps.emaker 2001/11/04 00:38:11 1.4
@@ -6,7 +6,7 @@
result += left
def prop := props get(name bare(), null)
if (null != prop) {
- result += name infect(prop)
+ result += name infect(prop, false)
}
text := right
}
1.57 +6 -10 e/src/jsrc/Makefile
Index: Makefile
===================================================================
RCS file: /cvs/e/src/jsrc/Makefile,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -r1.56 -r1.57
--- Makefile 2001/11/03 13:32:50 1.56
+++ Makefile 2001/11/04 00:38:11 1.57
@@ -39,30 +39,26 @@
find $(ER)/meta/$(ER)/elib -name '*.java' >> files.tmp
$(JCOMPILE) @files.tmp
-# AST manipulations
-# depends on stl_elib
-_astro:
- find antlr -name '*.java' > files.tmp
- find org/quasiliteral -name '*.java' >> files.tmp
- find org/capml -name '*.java' >> files.tmp
- $(JCOMPILE) @files.tmp
-
# tools needed to build elang
# depends on stl_elib
elang_builder:
find org/erights/build -name '*.java' > files.tmp
find org/apache/oro -name '*.java' >> files.tmp
+ find antlr -name '*.java' >> files.tmp
$(JCOMPILE) @files.tmp
# optional: remake the parser from yacc, or just use the generated
# one, which is included.
elang_parser:
+ (cd $(TOP)/src/jsrc/org/quasiliteral/quasiterm; $(MAKE) all)
(cd $(ER)/elang/syntax; $(MAKE) all)
# space-time-local elang
-# depends on stl_elib, elang_builder, _astro
+# depends on stl_elib, elang_builder
stl_elang:
find $(ER)/elang -name '*.java' > files.tmp
+ find org/quasiliteral -name '*.java' >> files.tmp
+ find org/capml -name '*.java' >> files.tmp
$(JCOMPILE) @files.tmp
# elmer
@@ -96,7 +92,7 @@
$(JCOMPILE) @files.tmp
-pre_parser: setup _develop stl_elib _astro elang_builder
+pre_parser: setup _develop stl_elib elang_builder
post_parser: stl_elang _elmer _extern _vattp _captp _ertp
1.60 +21 -20 e/src/jsrc/org/erights/e/elang/syntax/ELexer.java
Index: ELexer.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/ELexer.java,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -r1.59 -r1.60
--- ELexer.java 2001/11/03 13:32:50 1.59
+++ ELexer.java 2001/11/04 00:38:11 1.60
@@ -441,7 +441,7 @@
} while (myChar != EOFCHAR &&
isIdentifierPart((char)myChar));
Twine name = endToken();
- String key = name.toLowerCase().substring(1);
+ String key = name.bare().toLowerCase().substring(1);
int tt = EParser.tokenType(key);
if (tt != -1) {
syntaxError(key + " is a keyword");
@@ -473,7 +473,7 @@
} while (myChar != EOFCHAR &&
isIdentifierPart((char)myChar));
Twine name = endToken();
- String key = name.toLowerCase().substring(1);
+ String key = name.bare().toLowerCase().substring(1);
int tt = EParser.tokenType(key);
if (tt != -1) {
syntaxError(key + " is a keyword");
@@ -861,8 +861,8 @@
}
nextChar();
return new AstroToken(EParser.LiteralChar,
- endToken(),
- new Character(value));
+ endToken(),
+ new Character(value));
}
/**
@@ -883,7 +883,7 @@
}
}
Twine source = endToken();
- int ttype = EParser.tokenType(source.toLowerCase());
+ int ttype = EParser.tokenType(source.bare().toLowerCase());
if (-1 == ttype) {
ttype = EParser.Identifier;
}
@@ -978,20 +978,19 @@
}
}
Twine tok = endToken();
- tok = tok.replaceAll("_", "");
- String str = tok.bare();
+ String str = tok.replaceAll("_", "").bare();
if (floating) {
return new AstroToken(EParser.LiteralFloat64,
- tok,
- Double.valueOf(str));
+ tok,
+ Double.valueOf(str));
} else {
if (radix == 16) {
//remove the leading "0x" to make BigInteger happy
str = str.substring(2);
}
return new AstroToken(EParser.LiteralInteger,
- tok,
- new BigInteger(str, radix));
+ tok,
+ new BigInteger(str, radix));
}
}
@@ -1063,8 +1062,8 @@
Twine closer = endToken();
myIndenter.pop('`', closer);
return new AstroToken(EParser.QuasiClose,
- closer,
- buf.toString());
+ closer,
+ buf.toString());
} else if (peekChar('`')) {
//terminal '$' or '@' before a '`' is eaten and added to the
@@ -1088,8 +1087,8 @@
//interpolated '$' or '@' is neither eaten nor added to the
//value of the resulting QuasiOpen token.
return new AstroToken(EParser.QuasiOpen,
- openner,
- buf.toString());
+ openner,
+ buf.toString());
}
}
}
@@ -1169,8 +1168,8 @@
Twine closer = endToken();
myIndenter.pop('"', closer);
return new AstroToken(EParser.LiteralString,
- closer,
- value.toString());
+ closer,
+ value.toString());
}
/**
@@ -1242,9 +1241,11 @@
AstroToken t;
do {
t = lex.nextToken();
- stdout.println(t);
- if (t.getType() == '\n') {
- stdout.println(lex.myIndenter.toString());
+ stdout.println(t.asFunctor(EParser.getTokenNames()));
+ if (t.getType() == EParser.EOL) {
+ stdout.print("stack: ",
+ lex.myIndenter.toString(),
+ "\n");
}
} while (t.getType() != EParser.EOFTOK);
return;
1.97 +270 -262 e/src/jsrc/org/erights/e/elang/syntax/EParser.java
Index: EParser.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/EParser.java,v
retrieving revision 1.96
retrieving revision 1.97
diff -u -r1.96 -r1.97
--- EParser.java 2001/11/03 13:32:50 1.96
+++ EParser.java 2001/11/04 00:38:11 1.97
@@ -23,12 +23,13 @@
import org.erights.e.elang.interp.Interp;
import org.erights.e.elib.base.Ejector;
import org.erights.e.elib.prim.StaticMaker;
+import org.erights.e.elib.tables.ConstList;
import org.erights.e.elib.tables.ConstMap;
import org.erights.e.elib.tables.IdentityCacheTable;
import org.erights.e.elib.tables.IntTable;
import org.erights.e.elib.tables.Twine;
- import org.quasiliteral.astro.AstroToken;
-//#line 29 "EParser.java"
+import org.quasiliteral.astro.AstroToken;
+//#line 30 "EParser.java"
@@ -1133,7 +1134,7 @@
"reserved : WSTRING",
};
-//#line 1182 "e.y"
+//#line 1183 "e.y"
/**
*
@@ -1141,7 +1142,7 @@
static public final StaticMaker EParserMaker =
StaticMaker.make(EParser.class);
-/**
+/**
* caches previous simple parses (as is used for quasi-parsing)
*/
static private IdentityCacheTable OurCache =
@@ -1150,7 +1151,7 @@
/**
*
*/
-static private final ConstMap DefaultProps =
+static private final ConstMap DefaultProps =
ConstMap.fromProperties(System.getProperties());
@@ -1158,7 +1159,7 @@
/** contains all the tokens after yylval */
private ELexer myLexer;
-/**
+/**
* Do we escape after parsing only one expression, or do we parse the
* entire input?
*/
@@ -1260,7 +1261,7 @@
/**
* If the input is empty, returns the null expression e`null`, rather
- * than null.
+ * than null.
*/
public ENode parse() {
ENode result = optParse();
@@ -1321,7 +1322,7 @@
int ttype = ((AstroToken)yylval).getType();
if (EParser.EOFTOK == ttype && "syntax error".equals(s)) {
myLexer.needMore("Unexpected EOF");
-
+
} else {
syntaxError(s);
}
@@ -1593,6 +1594,13 @@
/**
*
*/
+static /*package*/ ConstList getTokenNames() {
+ return ConstList.fromArray(TheTokens);
+}
+
+/**
+ *
+ */
static private IntTable TheTokenTable = null;
/**
@@ -1622,7 +1630,7 @@
/**
* These are the tokens that may appear at the end of a line, in which
* case the next line is a (to be indented) continuation of the
- * expression.
+ * expression.
* <p>
* Note that > isn't on the list because of its role in closing a
* calculated URI expression.
@@ -1700,7 +1708,7 @@
static public boolean isContinuer(int tokenType) {
return TheContinuers[tokenType];
}
-//#line 5619 "EParser.java"
+//#line 5627 "EParser.java"
//###############################################################
// method: yylexdebug : check lexer state
//###############################################################
@@ -1720,7 +1728,7 @@
//###############################################################
// method: yyparse : parse input and execute indicated items
//###############################################################
-int yyparse()
+int yyparse()
{
int yyn; //next next thing to do
int yym; //
@@ -1736,7 +1744,7 @@
while (true) //until parsing is done, either correctly, or w/error
{
doaction=true;
- if (yydebug) debug("loop");
+ if (yydebug) debug("loop");
//#### NEXT ACTION (from reduction table)
for (yyn=yydefred[yystate];yyn==0;yyn=yydefred[yystate])
{
@@ -1847,400 +1855,400 @@
{
//########## USER-SUPPLIED ACTIONS ##########
case 1:
-//#line 154 "e.y"
+//#line 155 "e.y"
{ myEscape.run(null); }
break;
case 2:
-//#line 155 "e.y"
+//#line 156 "e.y"
{ myEscape.run(val_peek(0)); }
break;
case 3:
-//#line 157 "e.y"
+//#line 158 "e.y"
{ myEscape.run(val_peek(0)); }
break;
case 5:
-//#line 165 "e.y"
+//#line 166 "e.y"
{ pocket("define"); }
break;
case 6:
-//#line 174 "e.y"
+//#line 175 "e.y"
{ yyval = val_peek(1); }
break;
case 7:
-//#line 178 "e.y"
+//#line 179 "e.y"
{ yyval = val_peek(1); }
break;
case 9:
-//#line 189 "e.y"
+//#line 190 "e.y"
{ yyval = sequence(val_peek(2), val_peek(0)); }
break;
case 11:
-//#line 194 "e.y"
+//#line 195 "e.y"
{ yyval = sequence(val_peek(2), val_peek(0)); }
break;
case 12:
-//#line 202 "e.y"
+//#line 203 "e.y"
{ yyval = oneExpr(val_peek(0)); }
break;
case 16:
-//#line 217 "e.y"
+//#line 218 "e.y"
{ yyval = sequence(val_peek(2), val_peek(0)); }
break;
case 17:
-//#line 218 "e.y"
+//#line 219 "e.y"
{ yyval = forward(val_peek(0)); }
break;
case 18:
-//#line 233 "e.y"
+//#line 234 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 21:
-//#line 238 "e.y"
+//#line 239 "e.y"
{ yyval = assign(val_peek(2), val_peek(0)); }
break;
case 22:
-//#line 239 "e.y"
+//#line 240 "e.y"
{ yyval = update(val_peek(2), val_peek(1), val_peek(0)); }
break;
case 23:
-//#line 240 "e.y"
+//#line 241 "e.y"
{ yyval = assAsr(val_peek(2), val_peek(0)); }
break;
case 24:
-//#line 241 "e.y"
+//#line 242 "e.y"
{ yyval = update(val_peek(2), val_peek(1), val_peek(0)); }
break;
case 25:
-//#line 243 "e.y"
+//#line 244 "e.y"
{ yyval = define(val_peek(2), val_peek(0)); }
break;
case 26:
-//#line 244 "e.y"
+//#line 245 "e.y"
{ yyval = define(val_peek(2), val_peek(0)); }
break;
case 27:
-//#line 245 "e.y"
+//#line 246 "e.y"
{ yyval = define(val_peek(2), val_peek(0)); }
break;
case 29:
-//#line 254 "e.y"
+//#line 255 "e.y"
{ yyval = condOr(val_peek(2), val_peek(0)); }
break;
case 31:
-//#line 263 "e.y"
+//#line 264 "e.y"
{ yyval = condAnd(val_peek(2), val_peek(0)); }
break;
case 33:
-//#line 272 "e.y"
+//#line 273 "e.y"
{ yyval = same(val_peek(2), val_peek(0)); }
break;
case 34:
-//#line 273 "e.y"
+//#line 274 "e.y"
{ yyval = not(same(val_peek(2), val_peek(0))); }
break;
case 35:
-//#line 274 "e.y"
+//#line 275 "e.y"
{ yyval = call(val_peek(2), "and", val_peek(0)); }
break;
case 36:
-//#line 275 "e.y"
+//#line 276 "e.y"
{ yyval = call(val_peek(2), "or", val_peek(0)); }
break;
case 37:
-//#line 276 "e.y"
+//#line 277 "e.y"
{ yyval = call(val_peek(2), "xor", val_peek(0)); }
break;
case 38:
-//#line 277 "e.y"
+//#line 278 "e.y"
{ yyval = call(val_peek(2), "butNot", val_peek(0)); }
break;
case 39:
-//#line 279 "e.y"
+//#line 280 "e.y"
{ yyval = matchBind(val_peek(2), val_peek(0)); }
break;
case 40:
-//#line 280 "e.y"
+//#line 281 "e.y"
{ yyval = not(matchBind(val_peek(2), val_peek(0))); }
break;
case 41:
-//#line 292 "e.y"
+//#line 293 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 44:
-//#line 297 "e.y"
+//#line 298 "e.y"
{ yyval = lessThan(val_peek(2), val_peek(0)); }
break;
case 45:
-//#line 298 "e.y"
+//#line 299 "e.y"
{ yyval = leq(val_peek(2), val_peek(0)); }
break;
case 46:
-//#line 299 "e.y"
+//#line 300 "e.y"
{ yyval = asBigAs(val_peek(2), val_peek(0)); }
break;
case 47:
-//#line 300 "e.y"
+//#line 301 "e.y"
{ yyval = geq(val_peek(2), val_peek(0)); }
break;
case 48:
-//#line 301 "e.y"
+//#line 302 "e.y"
{ yyval = greaterThan(val_peek(2), val_peek(0)); }
break;
case 50:
-//#line 310 "e.y"
+//#line 311 "e.y"
{ yyval = thru(val_peek(2), val_peek(0)); }
break;
case 51:
-//#line 311 "e.y"
+//#line 312 "e.y"
{ yyval = till(val_peek(2), val_peek(0)); }
break;
case 53:
-//#line 320 "e.y"
+//#line 321 "e.y"
{ yyval = call(val_peek(2), "shiftLeft", val_peek(0)); }
break;
case 54:
-//#line 321 "e.y"
+//#line 322 "e.y"
{ yyval = call(val_peek(2), "shiftLeft",
list(call(val_peek(0), "negate", list())));
}
break;
case 55:
-//#line 331 "e.y"
+//#line 332 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 58:
-//#line 336 "e.y"
+//#line 337 "e.y"
{ yyval = call(val_peek(2), "add", val_peek(0)); }
break;
case 59:
-//#line 337 "e.y"
+//#line 338 "e.y"
{ yyval = call(val_peek(2), "subtract", val_peek(0)); }
break;
case 60:
-//#line 345 "e.y"
+//#line 346 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 63:
-//#line 350 "e.y"
+//#line 351 "e.y"
{ yyval = call(val_peek(2), "multiply", val_peek(0)); }
break;
case 64:
-//#line 351 "e.y"
+//#line 352 "e.y"
{ yyval = call(val_peek(2), "approxDivide", val_peek(0)); }
break;
case 65:
-//#line 352 "e.y"
+//#line 353 "e.y"
{ yyval = call(val_peek(2), "floorDivide", val_peek(0)); }
break;
case 66:
-//#line 353 "e.y"
+//#line 354 "e.y"
{ yyval = call(val_peek(2), "remainder", val_peek(0)); }
break;
case 67:
-//#line 354 "e.y"
+//#line 355 "e.y"
{ yyval = mod(val_peek(2), val_peek(0)); }
break;
case 68:
-//#line 362 "e.y"
+//#line 363 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 71:
-//#line 367 "e.y"
+//#line 368 "e.y"
{ yyval = call(val_peek(2), "pow", val_peek(0)); }
break;
case 72:
-//#line 376 "e.y"
+//#line 377 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 75:
-//#line 381 "e.y"
+//#line 382 "e.y"
{ yyval = call(val_peek(0), "not", list()); }
break;
case 76:
-//#line 382 "e.y"
+//#line 383 "e.y"
{ yyval = call(val_peek(0), "complement", list());}
break;
case 77:
-//#line 383 "e.y"
+//#line 384 "e.y"
{ yyval = call(val_peek(0), "negate", list()); }
break;
case 78:
-//#line 384 "e.y"
+//#line 385 "e.y"
{ yyval = slotExpr(val_peek(0)); }
break;
case 81:
-//#line 396 "e.y"
+//#line 397 "e.y"
{ yyval = call(val_peek(3), "get", val_peek(1)); }
break;
case 82:
-//#line 397 "e.y"
+//#line 398 "e.y"
{ yyval = send(val_peek(3), val_peek(1), val_peek(0)); }
break;
case 83:
-//#line 398 "e.y"
+//#line 399 "e.y"
{ yyval = send(val_peek(2), "run", val_peek(0)); }
break;
case 84:
-//#line 400 "e.y"
+//#line 401 "e.y"
{ pocket("no-paren-call");
yyval = send(val_peek(2), val_peek(0), list()); }
break;
case 85:
-//#line 402 "e.y"
+//#line 403 "e.y"
{ pocket("no-paren-call");
yyval = call(val_peek(1), val_peek(0), list()); }
break;
case 86:
-//#line 404 "e.y"
+//#line 405 "e.y"
{ pocket("dot-props");
yyval = property(val_peek(2), val_peek(0), list()); }
break;
case 87:
-//#line 406 "e.y"
+//#line 407 "e.y"
{ pocket("dot-props");
yyval = property(val_peek(3), val_peek(1), val_peek(0)); }
break;
case 88:
-//#line 414 "e.y"
+//#line 415 "e.y"
{ yyval = doMeta(val_peek(1), "run", val_peek(0)); }
break;
case 89:
-//#line 415 "e.y"
+//#line 416 "e.y"
{ yyval = doMeta(val_peek(2), val_peek(1), val_peek(0)); }
break;
case 90:
-//#line 416 "e.y"
+//#line 417 "e.y"
{ yyval = doMetaSend(val_peek(2), "run", val_peek(0)); }
break;
case 91:
-//#line 417 "e.y"
+//#line 418 "e.y"
{ yyval = doMetaSend(val_peek(3), val_peek(1), val_peek(0)); }
break;
case 92:
-//#line 419 "e.y"
+//#line 420 "e.y"
{ pocket("no-paren-call");
yyval = doMeta(val_peek(1), val_peek(0), list()); }
break;
case 93:
-//#line 421 "e.y"
+//#line 422 "e.y"
{ pocket("no-paren-call");
yyval = doMetaSend(val_peek(2), val_peek(0), list()); }
break;
case 95:
-//#line 435 "e.y"
+//#line 436 "e.y"
{ yyval = call(val_peek(1), "run", val_peek(0)); }
break;
case 96:
-//#line 436 "e.y"
+//#line 437 "e.y"
{ yyval = call(val_peek(2), val_peek(1), val_peek(0)); }
break;
case 97:
-//#line 444 "e.y"
+//#line 445 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 98:
-//#line 445 "e.y"
+//#line 446 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 99:
-//#line 446 "e.y"
+//#line 447 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 100:
-//#line 447 "e.y"
+//#line 448 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 101:
-//#line 448 "e.y"
+//#line 449 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 103:
-//#line 452 "e.y"
+//#line 453 "e.y"
{ yyval = uriExpr(val_peek(0)); }
break;
case 104:
-//#line 453 "e.y"
+//#line 454 "e.y"
{ yyval = uriExpr(val_peek(2),val_peek(1)); }
break;
case 105:
-//#line 455 "e.y"
+//#line 456 "e.y"
{ yyval = quasiExpr(val_peek(1),val_peek(0)); }
break;
case 107:
-//#line 458 "e.y"
+//#line 459 "e.y"
{ yyval = tuple(val_peek(1)); }
break;
case 108:
-//#line 459 "e.y"
+//#line 460 "e.y"
{ yyval = map(val_peek(1)); }
break;
case 109:
-//#line 461 "e.y"
+//#line 462 "e.y"
{ yyval = hide(val_peek(0)); }
break;
case 110:
-//#line 463 "e.y"
+//#line 464 "e.y"
{ yyval = escape(val_peek(1),val_peek(0)); }
break;
case 111:
-//#line 465 "e.y"
+//#line 466 "e.y"
{ yyval = whilex(val_peek(1),val_peek(0)); }
break;
case 112:
-//#line 467 "e.y"
+//#line 468 "e.y"
{ yyval = switchx(val_peek(2),val_peek(1)); }
break;
case 113:
-//#line 469 "e.y"
+//#line 470 "e.y"
{ yyval = tryx(val_peek(2),val_peek(1),val_peek(0)); }
break;
case 118:
-//#line 477 "e.y"
+//#line 478 "e.y"
{ yyval = quasiLiteralExpr(val_peek(1)); }
break;
case 119:
-//#line 478 "e.y"
+//#line 479 "e.y"
{ yyval = quasiLiteralExpr(val_peek(0)); }
break;
case 120:
-//#line 479 "e.y"
+//#line 480 "e.y"
{ yyval = quasiLiteralExpr(); }
break;
case 121:
-//#line 480 "e.y"
+//#line 481 "e.y"
{ yyval = quasiPatternExpr(val_peek(1)); }
break;
case 122:
-//#line 481 "e.y"
+//#line 482 "e.y"
{ yyval = quasiPatternExpr(val_peek(0)); }
break;
case 123:
-//#line 484 "e.y"
+//#line 485 "e.y"
{ reserved("select"); }
break;
case 124:
-//#line 485 "e.y"
+//#line 486 "e.y"
{ pocket("typedef");
yyval = val_peek(0); }
break;
case 126:
-//#line 494 "e.y"
+//#line 495 "e.y"
{ yyval = object(val_peek(1), val_peek(0)); }
break;
case 127:
-//#line 495 "e.y"
+//#line 496 "e.y"
{ yyval = methObject(val_peek(3),val_peek(1),val_peek(0)); }
break;
case 128:
-//#line 496 "e.y"
+//#line 497 "e.y"
{ yyval = thunk(val_peek(0)); }
break;
case 129:
-//#line 498 "e.y"
+//#line 499 "e.y"
{ yyval = classExpr(val_peek(1),val_peek(0)); }
break;
case 130:
-//#line 500 "e.y"
+//#line 501 "e.y"
{ pocket("anon-lambda");
yyval = methObject(audits(ignore(),
list()),
@@ -2248,626 +2256,626 @@
val_peek(0)); }
break;
case 131:
-//#line 505 "e.y"
+//#line 506 "e.y"
{ pocket("anon-lambda");
yyval = thunk(val_peek(0)); }
break;
case 132:
-//#line 513 "e.y"
+//#line 514 "e.y"
{ yyval = noun(val_peek(0)); }
break;
case 133:
-//#line 522 "e.y"
+//#line 523 "e.y"
{ yyval = val_peek(1); }
break;
case 134:
-//#line 531 "e.y"
+//#line 532 "e.y"
{ yyval = ifx(val_peek(1), val_peek(0)); }
break;
case 135:
-//#line 532 "e.y"
+//#line 533 "e.y"
{ yyval = ifx(val_peek(3), val_peek(2), val_peek(0)); }
break;
case 136:
-//#line 533 "e.y"
+//#line 534 "e.y"
{ yyval = ifx(val_peek(4), val_peek(3), val_peek(0)); }
break;
case 137:
-//#line 541 "e.y"
+//#line 542 "e.y"
{ yyval = forx(val_peek(5),val_peek(3),val_peek(1)); }
break;
case 138:
-//#line 549 "e.y"
+//#line 550 "e.y"
{ yyval = when(val_peek(3),val_peek(2),val_peek(1),val_peek(0)); }
break;
case 139:
-//#line 559 "e.y"
+//#line 560 "e.y"
{ yyval = macro(val_peek(4), val_peek(2), val_peek(1), val_peek(0)); }
break;
case 140:
-//#line 561 "e.y"
+//#line 562 "e.y"
{ yyval = macro(val_peek(5), val_peek(3), val_peek(2), val_peek(0)); }
break;
case 141:
-//#line 565 "e.y"
+//#line 566 "e.y"
{ yyval = null; }
break;
case 142:
-//#line 567 "e.y"
+//#line 568 "e.y"
{ yyval = macro(val_peek(5), val_peek(3), val_peek(2), val_peek(1)); }
break;
case 143:
-//#line 569 "e.y"
+//#line 570 "e.y"
{ yyval = macro(val_peek(5), val_peek(3), val_peek(2), val_peek(0)); }
break;
case 144:
-//#line 577 "e.y"
+//#line 578 "e.y"
{ yyval = null; }
break;
case 147:
-//#line 584 "e.y"
+//#line 585 "e.y"
{ yyval = noun("simple__quasiParser"); }
break;
case 148:
-//#line 585 "e.y"
+//#line 586 "e.y"
{ yyval = noun(val_peek(0) + "__quasiParser"); }
break;
case 149:
-//#line 586 "e.y"
+//#line 587 "e.y"
{ yyval = val_peek(1); }
break;
case 150:
-//#line 590 "e.y"
+//#line 591 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 151:
-//#line 591 "e.y"
+//#line 592 "e.y"
{ yyval = with(val_peek(1), val_peek(0)); }
break;
case 152:
-//#line 595 "e.y"
+//#line 596 "e.y"
{ yyval = list(val_peek(1), val_peek(0)); }
break;
case 153:
-//#line 596 "e.y"
+//#line 597 "e.y"
{ yyval = with(with(val_peek(2), val_peek(1)), val_peek(0)); }
break;
case 154:
-//#line 600 "e.y"
+//#line 601 "e.y"
{ yyval = dollarNoun(val_peek(0)); }
break;
case 155:
-//#line 601 "e.y"
+//#line 602 "e.y"
{ yyval = val_peek(1); }
break;
case 158:
-//#line 619 "e.y"
+//#line 620 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 159:
-//#line 620 "e.y"
+//#line 621 "e.y"
{ yyval = with(val_peek(3), val_peek(0)); }
break;
case 161:
-//#line 630 "e.y"
+//#line 631 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 162:
-//#line 631 "e.y"
+//#line 632 "e.y"
{ yyval = with(val_peek(3), val_peek(0)); }
break;
case 163:
-//#line 638 "e.y"
+//#line 639 "e.y"
{ yyval = new Assoc(ignore(), val_peek(0)); }
break;
case 165:
-//#line 643 "e.y"
+//#line 644 "e.y"
{ yyval = new Assoc(val_peek(2), val_peek(0)); }
break;
case 166:
-//#line 644 "e.y"
+//#line 645 "e.y"
{ reserved("var-extract-pattern"); }
break;
case 168:
-//#line 649 "e.y"
+//#line 650 "e.y"
{ yyval = suchThat(val_peek(2), val_peek(0)); }
break;
case 169:
-//#line 651 "e.y"
+//#line 652 "e.y"
{ reserved("meta pattern"); }
break;
case 171:
-//#line 656 "e.y"
+//#line 657 "e.y"
{ yyval = listPattern(val_peek(1)); }
break;
case 172:
-//#line 657 "e.y"
+//#line 658 "e.y"
{ yyval = cdrPattern(val_peek(3), val_peek(0)); }
break;
case 173:
-//#line 659 "e.y"
+//#line 660 "e.y"
{ reserved("map pattern"); }
break;
case 174:
-//#line 660 "e.y"
+//#line 661 "e.y"
{ reserved("map pattern"); }
break;
case 176:
-//#line 665 "e.y"
+//#line 666 "e.y"
{ yyval = patternEquals(val_peek(0)); }
break;
case 178:
-//#line 670 "e.y"
+//#line 671 "e.y"
{ yyval = quasiPattern(val_peek(1), val_peek(0)); }
break;
case 179:
-//#line 674 "e.y"
+//#line 675 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 180:
-//#line 675 "e.y"
+//#line 676 "e.y"
{ yyval = with(val_peek(1), val_peek(0)); }
break;
case 181:
-//#line 679 "e.y"
+//#line 680 "e.y"
{ yyval = list(val_peek(1), val_peek(0)); }
break;
case 182:
-//#line 680 "e.y"
+//#line 681 "e.y"
{ yyval = with(with(val_peek(2), val_peek(1)), val_peek(0));}
break;
case 185:
-//#line 689 "e.y"
+//#line 690 "e.y"
{ yyval = atNoun(val_peek(0)); }
break;
case 186:
-//#line 690 "e.y"
+//#line 691 "e.y"
{ yyval = val_peek(1); }
break;
case 187:
-//#line 703 "e.y"
+//#line 704 "e.y"
{ yyval = finalPattern(val_peek(2), val_peek(0)); }
break;
case 188:
-//#line 704 "e.y"
+//#line 705 "e.y"
{ yyval = finalPattern(val_peek(0)); }
break;
case 189:
-//#line 705 "e.y"
+//#line 706 "e.y"
{ yyval = slotDefiner(val_peek(0)); }
break;
case 190:
-//#line 706 "e.y"
+//#line 707 "e.y"
{ yyval = ignore(); }
break;
case 191:
-//#line 707 "e.y"
+//#line 708 "e.y"
{ reserved("anon guard"); }
break;
case 194:
-//#line 711 "e.y"
+//#line 712 "e.y"
{ yyval = quasiLiteralPatt(val_peek(1)); }
break;
case 195:
-//#line 712 "e.y"
+//#line 713 "e.y"
{ yyval = quasiPatternPatt(val_peek(1)); }
break;
case 196:
-//#line 716 "e.y"
+//#line 717 "e.y"
{ yyval = bindDefiner(val_peek(2), val_peek(0)); }
break;
case 197:
-//#line 717 "e.y"
+//#line 718 "e.y"
{ yyval = bindDefiner(val_peek(0)); }
break;
case 198:
-//#line 721 "e.y"
+//#line 722 "e.y"
{ yyval = varPattern(val_peek(2), val_peek(0)); }
break;
case 199:
-//#line 722 "e.y"
+//#line 723 "e.y"
{ yyval = varPattern(val_peek(0)); }
break;
case 200:
-//#line 731 "e.y"
+//#line 732 "e.y"
{ yyval = finalPattern(val_peek(0)); }
break;
case 201:
-//#line 732 "e.y"
+//#line 733 "e.y"
{ yyval = ignore(); }
break;
case 202:
-//#line 733 "e.y"
+//#line 734 "e.y"
{ yyval = bindDefiner(val_peek(0)); }
break;
case 203:
-//#line 734 "e.y"
+//#line 735 "e.y"
{ yyval = varPattern(val_peek(0)); }
break;
case 204:
-//#line 735 "e.y"
+//#line 736 "e.y"
{ yyval = quasiLiteralPatt(val_peek(1)); }
break;
case 205:
-//#line 736 "e.y"
+//#line 737 "e.y"
{ yyval = quasiPatternPatt(val_peek(1)); }
break;
case 207:
-//#line 753 "e.y"
+//#line 754 "e.y"
{ yyval = val_peek(0); }
break;
case 208:
-//#line 754 "e.y"
+//#line 755 "e.y"
{ yyval = bindDefiner(val_peek(0)); }
break;
case 209:
-//#line 755 "e.y"
+//#line 756 "e.y"
{ yyval = varPattern(val_peek(0)); }
break;
case 210:
-//#line 762 "e.y"
+//#line 763 "e.y"
{ yyval = audits(val_peek(0), list()); }
break;
case 211:
-//#line 763 "e.y"
+//#line 764 "e.y"
{ pocket("auditors");
yyval = audits(val_peek(2), val_peek(0)); }
break;
case 212:
-//#line 771 "e.y"
+//#line 772 "e.y"
{ yyval = audits(val_peek(0), list()); }
break;
case 213:
-//#line 772 "e.y"
+//#line 773 "e.y"
{ pocket("auditors");
yyval = audits(val_peek(2), val_peek(0)); }
break;
case 214:
-//#line 777 "e.y"
+//#line 778 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 215:
-//#line 778 "e.y"
+//#line 779 "e.y"
{ yyval = with(val_peek(3), val_peek(0)); }
break;
case 216:
-//#line 790 "e.y"
+//#line 791 "e.y"
{ yyval = list(); }
break;
case 217:
-//#line 791 "e.y"
+//#line 792 "e.y"
{ yyval = append(list(val_peek(3)),val_peek(1)); }
break;
case 220:
-//#line 805 "e.y"
+//#line 806 "e.y"
{ yyval = method(val_peek(1), val_peek(0)); }
break;
case 221:
-//#line 807 "e.y"
+//#line 808 "e.y"
{ reserved("fields"); }
break;
case 222:
-//#line 808 "e.y"
+//#line 809 "e.y"
{ reserved("on event"); }
break;
case 223:
-//#line 809 "e.y"
+//#line 810 "e.y"
{ reserved("sealed meta"); }
break;
case 224:
-//#line 810 "e.y"
+//#line 811 "e.y"
{ reserved("sealed meta"); }
break;
case 225:
-//#line 818 "e.y"
+//#line 819 "e.y"
{ yyval = methHead("run", val_peek(2), val_peek(0)); }
break;
case 226:
-//#line 819 "e.y"
+//#line 820 "e.y"
{ yyval = methHead(val_peek(4), val_peek(2), val_peek(0)); }
break;
case 227:
-//#line 821 "e.y"
+//#line 822 "e.y"
{ pocket("no-paren-method");
yyval = methHead(val_peek(1), list(), val_peek(0)); }
break;
case 228:
-//#line 830 "e.y"
+//#line 831 "e.y"
{ yyval = methHead("run", val_peek(2), val_peek(0)); }
break;
case 229:
-//#line 832 "e.y"
+//#line 833 "e.y"
{ pocket("one-method-object");
yyval = methHead(val_peek(4), val_peek(2), val_peek(0)); }
break;
case 230:
-//#line 834 "e.y"
+//#line 835 "e.y"
{ pocket("no-paren-method");
yyval = methHead(val_peek(1), list(), val_peek(0)); }
break;
case 231:
-//#line 843 "e.y"
+//#line 844 "e.y"
{ yyval = list(val_peek(5), val_peek(2), val_peek(0)); }
break;
case 232:
-//#line 853 "e.y"
+//#line 854 "e.y"
{ yyval = matcher(val_peek(1), val_peek(0)); }
break;
case 233:
-//#line 862 "e.y"
+//#line 863 "e.y"
{ yyval = delegatex(val_peek(0)); }
break;
case 234:
-//#line 869 "e.y"
+//#line 870 "e.y"
{ yyval = VOID; }
break;
case 235:
-//#line 870 "e.y"
+//#line 871 "e.y"
{ yyval = val_peek(0); }
break;
case 236:
-//#line 874 "e.y"
+//#line 875 "e.y"
{ yyval = val_peek(1); }
break;
case 237:
-//#line 883 "e.y"
+//#line 884 "e.y"
{ yyval = list(val_peek(7), val_peek(5), val_peek(2), val_peek(0)); }
break;
case 238:
-//#line 886 "e.y"
+//#line 887 "e.y"
{ pocket("when-clauses");
yyval = list(val_peek(5), val_peek(2), val_peek(0)); }
break;
case 239:
-//#line 891 "e.y"
+//#line 892 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 240:
-//#line 892 "e.y"
+//#line 893 "e.y"
{ yyval = with(val_peek(2), val_peek(0)); }
break;
case 241:
-//#line 896 "e.y"
+//#line 897 "e.y"
{ list(val_peek(2), val_peek(0)); }
break;
case 246:
-//#line 914 "e.y"
+//#line 915 "e.y"
{ yyval = list(); }
break;
case 247:
-//#line 918 "e.y"
+//#line 919 "e.y"
{ yyval = list(); }
break;
case 248:
-//#line 923 "e.y"
+//#line 924 "e.y"
{ yyval = val_peek(1); }
break;
case 249:
-//#line 928 "e.y"
+//#line 929 "e.y"
{ pocket("lambda-args");
yyval = with(val_peek(1), val_peek(0)); }
break;
case 252:
-//#line 938 "e.y"
+//#line 939 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 253:
-//#line 939 "e.y"
+//#line 940 "e.y"
{ yyval = with(val_peek(2), val_peek(0)); }
break;
case 254:
-//#line 944 "e.y"
+//#line 945 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 255:
-//#line 945 "e.y"
+//#line 946 "e.y"
{ yyval = with(val_peek(2), val_peek(0)); }
break;
case 256:
-//#line 949 "e.y"
+//#line 950 "e.y"
{ yyval = new Assoc(val_peek(2), val_peek(0)); }
break;
case 257:
-//#line 950 "e.y"
+//#line 951 "e.y"
{ reserved("export binding"); }
break;
case 259:
-//#line 965 "e.y"
+//#line 966 "e.y"
{ yyval = hilbert(val_peek(0)); }
break;
case 260:
-//#line 972 "e.y"
+//#line 973 "e.y"
{ yyval = ((AstroToken)val_peek(0)).getText(); }
break;
case 261:
-//#line 973 "e.y"
+//#line 974 "e.y"
{ reserved("keyword \"" +
((AstroToken)val_peek(0)).getText() +
"\""); }
break;
case 262:
-//#line 989 "e.y"
+//#line 990 "e.y"
{ yyval = "add"; }
break;
case 263:
-//#line 990 "e.y"
+//#line 991 "e.y"
{ yyval = "and"; }
break;
case 264:
-//#line 991 "e.y"
+//#line 992 "e.y"
{ yyval = "approxDivide"; }
break;
case 265:
-//#line 992 "e.y"
+//#line 993 "e.y"
{ yyval = "floorDivide"; }
break;
case 266:
-//#line 993 "e.y"
+//#line 994 "e.y"
{ yyval = "shiftLeft"; }
break;
case 267:
-//#line 994 "e.y"
+//#line 995 "e.y"
{ yyval = "remainder"; }
break;
case 268:
-//#line 995 "e.y"
+//#line 996 "e.y"
{ yyval = "mod"; }
break;
case 269:
-//#line 996 "e.y"
+//#line 997 "e.y"
{ yyval = "multiply"; }
break;
case 270:
-//#line 997 "e.y"
+//#line 998 "e.y"
{ yyval = "or"; }
break;
case 271:
-//#line 998 "e.y"
+//#line 999 "e.y"
{ yyval = "pow"; }
break;
case 272:
-//#line 999 "e.y"
+//#line 1000 "e.y"
{ yyval = "subtract"; }
break;
case 273:
-//#line 1000 "e.y"
+//#line 1001 "e.y"
{ yyval = "xor"; }
break;
case 274:
-//#line 1009 "e.y"
+//#line 1010 "e.y"
{ yyval = NULL; }
break;
case 275:
-//#line 1010 "e.y"
+//#line 1011 "e.y"
{ yyval = val_peek(3); }
break;
case 276:
-//#line 1014 "e.y"
+//#line 1015 "e.y"
{ yyval = val_peek(1); }
break;
case 277:
-//#line 1019 "e.y"
+//#line 1020 "e.y"
{ yyval = eScript(val_peek(2), optMatcher(val_peek(1))); }
break;
case 278:
-//#line 1021 "e.y"
+//#line 1022 "e.y"
{ pocket("plumbing");
yyval = eScript(null, val_peek(0)); }
break;
case 279:
-//#line 1023 "e.y"
+//#line 1024 "e.y"
{ pocket("plumbing");
yyval = eScript(null, val_peek(0)); }
break;
case 281:
-//#line 1033 "e.y"
+//#line 1034 "e.y"
{ yyval = with(val_peek(2), val_peek(1)); }
break;
case 283:
-//#line 1038 "e.y"
+//#line 1039 "e.y"
{ yyval = with(val_peek(2), val_peek(1)); }
break;
case 285:
-//#line 1043 "e.y"
+//#line 1044 "e.y"
{ yyval = with(val_peek(2), val_peek(1)); }
break;
case 288:
-//#line 1060 "e.y"
+//#line 1061 "e.y"
{ yyval = with(val_peek(1), val_peek(0)); }
break;
case 289:
-//#line 1064 "e.y"
+//#line 1065 "e.y"
{ yyval = matcher(val_peek(1), val_peek(0)); }
break;
case 290:
-//#line 1071 "e.y"
+//#line 1072 "e.y"
{ yyval = null; }
break;
case 291:
-//#line 1072 "e.y"
+//#line 1073 "e.y"
{ yyval = val_peek(0); }
break;
case 292:
-//#line 1083 "e.y"
+//#line 1084 "e.y"
{ yyval = oType(val_peek(4), val_peek(1)); }
break;
case 293:
-//#line 1084 "e.y"
+//#line 1085 "e.y"
{ yyval = oType(val_peek(2), list(val_peek(1))); }
break;
case 297:
-//#line 1091 "e.y"
+//#line 1092 "e.y"
{ yyval = with(val_peek(3),val_peek(1)); }
break;
case 298:
-//#line 1095 "e.y"
+//#line 1096 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 299:
-//#line 1096 "e.y"
+//#line 1097 "e.y"
{ yyval = with(val_peek(3),val_peek(0)); }
break;
case 300:
-//#line 1098 "e.y"
+//#line 1099 "e.y"
{ reserved("on event"); }
break;
case 301:
-//#line 1099 "e.y"
+//#line 1100 "e.y"
{ reserved("on event"); }
break;
case 302:
-//#line 1106 "e.y"
+//#line 1107 "e.y"
{ yyval = mType(val_peek(1),list(),val_peek(0)); }
break;
case 303:
-//#line 1107 "e.y"
+//#line 1108 "e.y"
{ yyval = mType(val_peek(4),val_peek(2),val_peek(0)); }
break;
case 304:
-//#line 1108 "e.y"
+//#line 1109 "e.y"
{ yyval = mType("run",val_peek(2),val_peek(0)); }
break;
case 305:
-//#line 1112 "e.y"
+//#line 1113 "e.y"
{ yyval = val_peek(0); }
break;
case 306:
-//#line 1113 "e.y"
+//#line 1114 "e.y"
{ yyval = val_peek(1); }
break;
case 307:
-//#line 1117 "e.y"
+//#line 1118 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 308:
-//#line 1118 "e.y"
+//#line 1119 "e.y"
{ yyval = with(val_peek(3),val_peek(0)); }
break;
case 309:
-//#line 1125 "e.y"
+//#line 1126 "e.y"
{ yyval = pType(val_peek(1),val_peek(0)); }
break;
case 310:
-//#line 1126 "e.y"
+//#line 1127 "e.y"
{ yyval = pType(null,val_peek(0)); }
break;
case 311:
-//#line 1130 "e.y"
+//#line 1131 "e.y"
{ yyval = null; }
break;
case 312:
-//#line 1131 "e.y"
+//#line 1132 "e.y"
{ yyval = val_peek(0); }
break;
case 315:
-//#line 1147 "e.y"
+//#line 1148 "e.y"
{ begin(); }
break;
case 316:
-//#line 1154 "e.y"
+//#line 1155 "e.y"
{ end(); }
break;
-//#line 6783 "EParser.java"
+//#line 6791 "EParser.java"
//########## END OF USER-SUPPLIED ACTIONS ##########
}//switch
//#### Now let's reduce... ####
1.90 +15 -7 e/src/jsrc/org/erights/e/elang/syntax/e.y
Index: e.y
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/e.y,v
retrieving revision 1.89
retrieving revision 1.90
diff -u -r1.89 -r1.90
--- e.y 2001/11/01 17:42:30 1.89
+++ e.y 2001/11/04 00:38:11 1.90
@@ -40,11 +40,12 @@
import org.erights.e.elang.interp.Interp;
import org.erights.e.elib.base.Ejector;
import org.erights.e.elib.prim.StaticMaker;
+import org.erights.e.elib.tables.ConstList;
import org.erights.e.elib.tables.ConstMap;
import org.erights.e.elib.tables.IdentityCacheTable;
import org.erights.e.elib.tables.IntTable;
import org.erights.e.elib.tables.Twine;
- import org.quasiliteral.astro.MilkToken;
+import org.quasiliteral.astro.AstroToken;
%}
/* Categorical terminals */
@@ -969,9 +970,9 @@
* A non-reserved Identifier (as a String)
*/
ident:
- Identifier { $$ = ((MilkToken)$1).getText(); }
+ Identifier { $$ = ((AstroToken)$1).getText(); }
| reserved { reserved("keyword \"" +
- ((MilkToken)$1).getText() +
+ ((AstroToken)$1).getText() +
"\""); }
;
@@ -1348,7 +1349,7 @@
*
*/
private int yylex() {
- MilkToken token = null;
+ AstroToken token = null;
try {
token = myLexer.nextToken();
} catch (IOException ex) {
@@ -1363,7 +1364,7 @@
*
*/
private void yyerror(String s) throws SyntaxException {
- int ttype = ((MilkToken)yylval).getType();
+ int ttype = ((AstroToken)yylval).getType();
if (EParser.EOFTOK == ttype && "syntax error".equals(s)) {
myLexer.needMore("Unexpected EOF");
@@ -1398,10 +1399,10 @@
*
*/
private boolean isTokenKind(Object tok, int[] members) {
- if (! (tok instanceof MilkToken)) {
+ if (! (tok instanceof AstroToken)) {
return false;
}
- int ttype = ((MilkToken)tok).getType();
+ int ttype = ((AstroToken)tok).getType();
for (int i = 0; i < members.length; i++) {
if (ttype == members[i]) {
return true;
@@ -1633,6 +1634,13 @@
TheTokens[MatchBind] = "=~";
TheTokens[MisMatch] = "!~";
TheTokens[Audit] = "::";
+}
+
+/**
+ *
+ */
+static /*package*/ ConstList getTokenNames() {
+ return ConstList.fromArray(TheTokens);
}
/**
1.14 +13 -0 e/src/jsrc/org/erights/e/elib/base/SourceSpan.java
Index: SourceSpan.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/base/SourceSpan.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- SourceSpan.java 2001/09/06 09:55:47 1.13
+++ SourceSpan.java 2001/11/04 00:38:11 1.14
@@ -192,6 +192,19 @@
}
/**
+ * Return a non-oneToOne form of this SourceSpan
+ */
+ public SourceSpan notOneToOne() {
+ if (myIsOneToOne) {
+ return new SourceSpan(myUrl, false,
+ myStartLine, myStartCol,
+ myEndLine, myEndCol);
+ } else {
+ return this;
+ }
+ }
+
+ /**
*
*/
public String toString() {
1.6 +7 -0 e/src/jsrc/org/erights/e/elib/tables/AtomicTwine.java
Index: AtomicTwine.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/tables/AtomicTwine.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- AtomicTwine.java 2001/09/06 09:55:51 1.5
+++ AtomicTwine.java 2001/11/04 00:38:12 1.6
@@ -74,5 +74,12 @@
/**
*
*/
+ /*package*/ Twine infectOneToOne(String str) {
+ return Twine.fromString(str, optSourceSpan());
+ }
+
+ /**
+ *
+ */
/*package*/ abstract ConstList mergedParts(AtomicTwine other);
}
1.11 +16 -0 e/src/jsrc/org/erights/e/elib/tables/CompositeTwine.java
Index: CompositeTwine.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/tables/CompositeTwine.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- CompositeTwine.java 2001/09/07 05:49:23 1.10
+++ CompositeTwine.java 2001/11/04 00:38:12 1.11
@@ -168,4 +168,20 @@
}
return optResult;
}
+
+ /**
+ *
+ */
+ /*package*/ Twine infectOneToOne(String str) {
+ Twine result = Twine.fromString("");
+ int pos = 0;
+ for (int i = 0; i < myParts.size(); i++) {
+ Twine part = (Twine)myParts.get(i);
+ int len = part.size();
+ String segment = str.substring(pos, pos+len);
+ result = (Twine)result.add(part.infectOneToOne(segment));
+ pos += len;
+ }
+ return result;
+ }
}
1.5 +7 -0 e/src/jsrc/org/erights/e/elib/tables/EmptyTwine.java
Index: EmptyTwine.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/tables/EmptyTwine.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- EmptyTwine.java 2001/10/02 23:38:32 1.4
+++ EmptyTwine.java 2001/11/04 00:38:12 1.5
@@ -116,6 +116,13 @@
/**
*
*/
+ /*package*/ Twine infectOneToOne(String str) {
+ return Twine.fromString(str, null);
+ }
+
+ /**
+ *
+ */
public void printOn(TextWriter out) throws IOException {
//XXX is this the same as printing nothing?
out.print("");
1.9 +2 -1 e/src/jsrc/org/erights/e/elib/tables/LocatedTwine.java
Index: LocatedTwine.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/tables/LocatedTwine.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- LocatedTwine.java 2001/09/07 05:49:23 1.8
+++ LocatedTwine.java 2001/11/04 00:38:12 1.9
@@ -26,7 +26,8 @@
import java.io.IOException;
/**
- * A Twine containing only a String. <p>
+ * A Twine containing only a non-empty String and corresponding source-span
+ * info.
*
* @author <a href="mailto:markm@erights.org">Mark S. Miller</a>
*/
1.20 +37 -11 e/src/jsrc/org/erights/e/elib/tables/Twine.java
Index: Twine.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elib/tables/Twine.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- Twine.java 2001/09/06 09:55:51 1.19
+++ Twine.java 2001/11/04 00:38:12 1.20
@@ -236,12 +236,37 @@
public abstract SourceSpan optSourceSpan();
/**
- * Returns a Twine with str as the string part, and the source info from
- * this Twine. The default implementation here drops all source info.
- * XXX make abstract and implement overrides
+ *
*/
- public Twine infect(String str) {
- return Twine.fromString(str);
+ /*package*/ abstract Twine infectOneToOne(String str);
+
+ /**
+ * Returns a Twine with str as the string part, and the source info from
+ * this Twine.
+ * <p>
+ * @param str The string to annotate with source-span info from this
+ * Twine.
+ * @param oneToOne If true, the two strings must be the same size, in
+ * which case the new string gets this Twine's
+ * optSourceSpan(). If false, then the new string will
+ * only get a non-oneToOne form of this source-span
+ */
+ public Twine infect(String str, boolean oneToOne) {
+ if (oneToOne) {
+ if (str.length() == size()) {
+ return infectOneToOne(str);
+ } else {
+ throw new RuntimeException(E.toQuote(str) + " and " +
+ quote() + " must be the " +
+ "same size");
+ }
+ } else {
+ SourceSpan optSpan = optSourceSpan();
+ if (null != optSpan) {
+ optSpan = optSpan.notOneToOne();
+ }
+ return Twine.fromString(str, optSpan);
+ }
}
/**
@@ -345,7 +370,7 @@
if (null != newStr) {
result = (Twine)result.add(run(p1, p2));
Twine oldStr = (Twine)run(p2, p2+1);
- result = (Twine)result.add(oldStr.infect(newStr));
+ result = (Twine)result.add(oldStr.infect(newStr, false));
p1 = p2+1;
}
}
@@ -494,7 +519,8 @@
for (int p2 = indexOf(oldStr); p2 != -1; p2 = indexOf(oldStr,p1)) {
Twine left = (Twine)run(p1, p2);
Twine oldTwine = (Twine)run(p2, p2 + oldLen);
- result = (Twine)result.add(left).add(oldTwine.infect(newStr));
+ result = (Twine)result.add(left)
+ .add(oldTwine.infect(newStr, false));
p1 = p2 + oldLen;
}
result = (Twine)result.add(run(p1, size()));
@@ -556,15 +582,15 @@
/**
*
*/
- public String toLowerCase() {
- return bare().toLowerCase();
+ public Twine toLowerCase() {
+ return infect(bare().toLowerCase(), true);
}
/**
*
*/
- public String toUpperCase() {
- return bare().toUpperCase();
+ public Twine toUpperCase() {
+ return infect(bare().toUpperCase(), true);
}
/**
1.2 +12 -9 e/src/jsrc/org/quasiliteral/astro/AstroToken.java
Index: AstroToken.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/AstroToken.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AstroToken.java 2001/11/03 13:32:51 1.1
+++ AstroToken.java 2001/11/04 00:38:12 1.2
@@ -6,8 +6,9 @@
import org.erights.e.elib.tables.ConstList;
import org.erights.e.elib.base.SourceSpan;
import org.quasiliteral.term.Functor;
-import org.quasiliteral.term.Literal;
+import java.math.BigInteger;
+
/**
* A Kind of Antlr {@link Token} that preserves all the information in a
* {@link Functor}, except that it uses an int rather that a string for the
@@ -24,8 +25,8 @@
private Twine mySource;
/**
- * If present, then this should be a literal character, string, twine
- * integer, or float64 whose value can be recovered from mySource
+ * If present, this must be a {@link Character},
+ * {@link BigInteger}, {@link Double}, {@link String}, or {@link Twine}.
*/
private Object myOptValue;
@@ -54,7 +55,13 @@
}
/**
- *
+ * @param ttype Identifies a token type in a particular grammar or set
+ * of related grammars.
+ * @param source The source text this token was extracted from.
+ * @param optValue An optional {@link Character},
+ * {@link BigInteger}, {@link Double},
+ * {@link String}, or {@link Twine} calculated from
+ * lexing this token
*/
public AstroToken(int ttype, Twine source, Object optValue) {
super(ttype, source.bare());
@@ -67,11 +74,7 @@
*/
public Functor asFunctor(ConstList typeNames) {
String tokenType = (String)typeNames.get(getType());
- if (null == myOptValue) {
- return new Functor(tokenType, mySource);
- } else {
- return new Literal(tokenType, mySource, myOptValue);
- }
+ return new Functor(tokenType, mySource, myOptValue);
}
/**
1.1 e/src/jsrc/org/quasiliteral/quasiterm/term.y
Index: term.y
===================================================================
/**
* XXX To be replaced by a term.g to be processed by Antlr
*/
%{
package org.quasiliteral.quasiterm;
import org.erights.e.elang.syntax.SyntaxException;
import org.erights.e.elib.tables.ConstList;
%}
%token Identifier //Like E: [0-9a-zA-Z_][a-zA-Z_]*
%token LiteralChar //like Java & E: unicode
%token LiteralInteger //like Java & E: precision unlimited
%token LiteralFloat64 //like Java & E: IEEE double precision
%token LiteralString //like Java & E: double quoted
%token LiteralTwine //like E: quasi-quoted without holes
%%
term:
functor { $$ = b.term($1, b.list()); }
| functor '(' argList ')' { $$ = b.term($1, $3); }
| '[' argList ']' { $$ = b.term("list", $2); }
;
argList:
/* empty */ { $$ = b.list(); }
| args
;
args:
term { $$ = b.list($1); }
| hole repr { $$ = b.repr($1, $2); }
| args ',' term { $$ = b.with($1, $3); }
;
functor:
Identifier { $$ = b.functor($1, $1, null); }
| Identifier ':' LiteralString { $$ = b.functor($1, $3, null); }
| Identifier '=' literal { $$ = b.functor($1, $1, $3); }
| Identifier ':' LiteralString '=' literal
{ $$ = b.functor($1, $2, $3); }
| literal
| hole
;
hole:
'$' '{' LiteralInteger '}' { $$ = b.dollarHole($3); }
| '@' '{' LiteralInteger '}' { $$ = b.atHole($3); }
;
repr:
'?'
| '+'
| '*'
;
literal:
LiteralChar
| LiteralInteger
| LiteralFloat64
| LiteralString
| LiteralTwine
;
%%
/**
*
*/
private TermBuilder b;
/**
*
*/
private int yylex() {
throw new RuntimeException("XXX not yet implemented");
}
/**
*
*/
private void yyerror(String s) throws SyntaxException {
throw new RuntimeException("XXX not yet implemented");
}
/**
*
*/
static /*package*/ boolean isContinuer(int ttype) {
return false; //for now
}
/*********************************/
/**
*
*/
static private String[] TheTokens = new String[yyname.length];
/** Not provided for us */
static /*package*/ final short EOFTOK = 0;
static {
System.arraycopy(yyname, 0, TheTokens, 0, yyname.length);
/* Since this language has no keywords, it's not a conflict
* for the names to be identifiers
*/
TheTokens[EOFTOK] = "EndOfFile";
}
/**
*
*/
static /*package*/ ConstList getTokenNames() {
return ConstList.fromArray(TheTokens);
}
1.2 +59 -16 e/src/jsrc/org/quasiliteral/term/Functor.java
Index: Functor.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/Functor.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Functor.java 2001/11/03 13:32:51 1.1
+++ Functor.java 2001/11/04 00:38:12 1.2
@@ -10,11 +10,14 @@
import org.erights.e.elib.eio.TextWriter;
import org.erights.e.elib.prim.StaticMaker;
import org.erights.e.elib.prim.E;
+import org.erights.e.develop.format.StringHelper;
import org.quasiliteral.astro.AstroToken;
import antlr.Token;
import antlr.Grammar;
import antlr.CommonToken;
+import java.math.BigInteger;
+
/**
* Like an Antlr {@link Token}, but with differences that make it suitable
* for quasiliteral processing.
@@ -55,6 +58,13 @@
private final Twine mySource;
/**
+ * @serial an optional {@link Character},
+ * {@link BigInteger}, {@link Double},
+ * {@link String}, or {@link Twine} calculated from lexing the token
+ */
+ private Object myOptValue;
+
+ /**
* @param tokenType The name of an Antlr token type int in a particular
* grammar.
* @param source The source text corresponding to the original source of
@@ -63,12 +73,26 @@
* information says what positions in the original source
* it corresponds to. The source position info is not part
* of the normal printed form.
- * @param optValue An optional value calculated from the source text.
- * Not part of the normal printed form.
+ * @param optValue An optional {@link Character},
+ * {@link BigInteger}, {@link Double},
+ * {@link String}, or {@link Twine} calculated from the
+ * source text.
*/
- public Functor(String tokenType, Twine source) {
+ public Functor(String tokenType, Twine source, Object optValue) {
myTokenType = tokenType;
mySource = source;
+ if (null == optValue ||
+ optValue instanceof Character ||
+ optValue instanceof BigInteger ||
+ optValue instanceof Double ||
+ optValue instanceof String ||
+ optValue instanceof Twine)
+ {
+ myOptValue = optValue;
+ } else {
+ throw new RuntimeException(optValue.getClass().getName() +
+ " not a literal type");
+ }
}
/**
@@ -89,7 +113,8 @@
token.getLine(),
token.getColumn());
return new Functor(tokenType,
- Twine.fromString(token.getText(), span));
+ Twine.fromString(token.getText(), span),
+ null);
}
}
@@ -98,16 +123,16 @@
*/
public AstroToken asToken(ConstMap typeNums) {
int tokenTypeInt = E.asInt(typeNums.get(myTokenType));
- return new AstroToken(tokenTypeInt, mySource);
+ return new AstroToken(tokenTypeInt, mySource, myOptValue);
}
/**
- * 'FunctorMaker new(myTokenType, mySource)'
+ * 'FunctorMaker new(myTokenType, mySource, myOptValue)'
*/
public Object[] getCanonicalState() {
Object[] result = {
FunctorMaker, "new",
- myTokenType, mySource
+ myTokenType, mySource, myOptValue
};
return result;
}
@@ -129,6 +154,13 @@
/**
*
*/
+ public Object getValue() {
+ return myOptValue;
+ }
+
+ /**
+ * quasiFlag defaults to false
+ */
public String toString() {
return toString(false);
}
@@ -137,16 +169,27 @@
*
*/
public String toString(boolean quasiFlag) {
+ //XXX If the token type and source are implied by the printed
+ //form of the value, then only the value should be printed.
String result = myTokenType;
- if (! myTokenType.equals(mySource.bare())) {
- result += ":";
- Twine quoted = mySource.quote();
- if (quasiFlag) {
- quoted = quoted.replaceAll("$", "$$");
- quoted = quoted.replaceAll("@", "@@");
- quoted = quoted.replaceAll("`", "``");
- }
- result += quoted.bare();
+ String bareSource = mySource.bare();
+ if (! myTokenType.equals(bareSource)) {
+ result += ":" + StringHelper.quote(bareSource);
+ }
+ if (null != myOptValue) {
+ //XXX If the value is a String or a Twine, then
+ // if the token type is LiteralTwine, then
+ // the token should be printed as a literal twine
+ // else
+ // the token should be printed as a literal string
+ // else
+ // the token should be printed according to its type
+ result += "=" + E.toQuote(myOptValue).bare();
+ }
+ if (quasiFlag) {
+ result = StringHelper.replaceAll(result, "$", "$$");
+ result = StringHelper.replaceAll(result, "@", "@@");
+ result = StringHelper.replaceAll(result, "`", "``");
}
return result;
}