[e-cvs] cvs commit: e/src/jsrc/org/quasiliteral/astro Functor.java
markm@eros.cs.jhu.edu
markm@eros.cs.jhu.edu
Thu, 1 Nov 2001 01:32:25 -0500
markm 01/11/01 01:32:25
Modified: src/bin/resources/org/erights/e/elang/syntax
ParserTables.data
src/jsrc/org/erights/e/elang/syntax EBuilder.java
ELexer.java EParser.java HilbertHotel.java
Indenter.java Token.java URI.java e.y
src/jsrc/org/quasiliteral/astro Functor.java
Log:
Towards antlr & quasis: Better lexing, token handling
Revision Changes Path
1.24 +14 -28 e/src/bin/resources/org/erights/e/elang/syntax/ParserTables.data
Index: ParserTables.data
===================================================================
RCS file: /cvs/e/src/bin/resources/org/erights/e/elang/syntax/ParserTables.data,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
Binary files /tmp/cvsREUfZO and /tmp/cvs0Zaa9s differ
1.78 +67 -35 e/src/jsrc/org/erights/e/elang/syntax/EBuilder.java
Index: EBuilder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/EBuilder.java,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -r1.77 -r1.78
--- EBuilder.java 2001/10/27 17:27:42 1.77
+++ EBuilder.java 2001/11/01 06:32:24 1.78
@@ -233,7 +233,7 @@
String verbName;
if (verb instanceof Token) {
- verbName = ((Token)verb).token();
+ verbName = ((Token)verb).getText();
} else {
verbName = (String)verb;
}
@@ -305,6 +305,13 @@
/**
*
*/
+ /*package*/ EExpr not(Object x) {
+ return call(x, "not", list());
+ }
+
+ /**
+ *
+ */
/*package*/ EExpr call(Object recipientExpr,
Object verb,
Object args) {
@@ -317,7 +324,7 @@
*
*/
/*package*/ EExpr doMeta(Object keyword, Object verb, Object args) {
- String kword = ((Token)keyword).token().intern();
+ String kword = ((Token)keyword).getText().intern();
String vrb = ((String)verb).intern();
EExpr[] exprs = exprs(args);
if ("meta" == kword) {
@@ -386,7 +393,7 @@
*
*/
/*package*/ EExpr doMetaSend(Object keyword, Object verb, Object args) {
- String kword = ((Token)keyword).token().intern();
+ String kword = ((Token)keyword).getText().intern();
String vrb = ((String)verb).intern();
EExpr[] exprs = exprs(args);
if ("meta" == kword) {
@@ -590,10 +597,28 @@
}
/**
+ * When an at-hole is '@<ident>' or '@_'
+ */
+ /*package*/ Pattern atNoun(Object token) {
+ String str = ((Token)token).getText();
+ if (str.charAt(0) != '@') {
+ throw new RuntimeException("internal: \"" + str +
+ "\" needs initial @");
+ }
+ str = str.substring(1);
+ str = hilbert(str);
+ if ("_".equals(str)) {
+ return ignore();
+ } else {
+ return finalPattern(str);
+ }
+ }
+
+ /**
*
*/
- /*package*/ Pattern finalPattern(Object name) {
- return finalPattern(name, ANY);
+ /*package*/ Pattern finalPattern(Object str) {
+ return finalPattern((String)str, ANY);
}
/**
@@ -629,8 +654,45 @@
}
/**
+ * When a dollar-hole is '$<ident>'
+ */
+ /*package*/ EExpr dollarNoun(Object token) {
+ String str = ((Token)token).getText();
+ if (str.charAt(0) != '$') {
+ throw new RuntimeException("internal: \"" + str +
+ "\" needs initial $");
+ }
+ str = str.substring(1);
+ str = hilbert(str);
+ return noun(str);
+ }
+
+ /**
+ * generate 'unique' temporary variable names for transformations.
+ * Suffix must be odd to make room for the new guests at the Hilbert
+ * Hotel. See hilbert().
+ */
+ /*package*/ String newTemp(String baseName) {
+ return myHilbert.newTemp(baseName);
+ }
+
+ /**
+ * Make vacancies for new temporary variable names
+ */
+ /*package*/ String hilbert(Object name) {
+ return myHilbert.rename((String)name);
+ }
+
+ /**
*
*/
+ static /*package*/ NounExpr noun(Object name) {
+ return new NounExpr((String)name);
+ }
+
+ /**
+ *
+ */
static /*package*/ SlotExpr slotExpr(Object name) {
return new SlotExpr(noun((String)name));
}
@@ -1004,36 +1066,6 @@
nameExprs[i] = slotExpr(names[i]);
}
return tuple(nameExprs);
- }
-
- /**
- * generate 'unique' temporary variable names for transformations.
- * Suffix must be odd to make room for the new guests at the Hilbert
- * Hotel. See hilbert().
- */
- /*package*/ String newTemp(String baseName) {
- return myHilbert.newTemp(baseName);
- }
-
- /**
- *
- */
- /*package*/ String hilbert(Object ident) {
- return myHilbert.rename(((Identifier)ident).token());
- }
-
- /**
- *
- */
- /*package*/ EExpr not(Object x) {
- return call(x, "not", list());
- }
-
- /**
- *
- */
- static /*package*/ NounExpr noun(Object name) {
- return new NounExpr((String)name);
}
/**
1.56 +83 -38 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.55
retrieving revision 1.56
diff -u -r1.55 -r1.56
--- ELexer.java 2001/10/03 04:41:02 1.55
+++ ELexer.java 2001/11/01 06:32:24 1.56
@@ -82,11 +82,6 @@
private boolean myDelayedNextChar = false;
/**
- * Should we return to eating literal quasi-string characters?
- */
- private boolean myQuasiAgainFlag = false;
-
- /**
*
*/
private boolean myPartialFlag;
@@ -163,7 +158,6 @@
myOptStartPos = -1;
myOptStartText = null;
myDelayedNextChar = true; //rather than doing nextChar() ourselves
- myQuasiAgainFlag = false;
myIndenter = new Indenter();
myContinueFlag = false;
}
@@ -180,7 +174,6 @@
myOptStartPos = -1;
myOptStartText = null;
myDelayedNextChar = true;
- myQuasiAgainFlag = false;
myIndenter = new Indenter();
myContinueFlag = false;
}
@@ -398,8 +391,7 @@
myDelayedNextChar = false;
}
- if (myQuasiAgainFlag) {
- myQuasiAgainFlag = false;
+ if ('`' == myIndenter.getCloser()) {
//start token without skipping whitespace
startToken();
return quasiPart();
@@ -408,7 +400,14 @@
startToken();
switch(myChar) {
- case EOFCHAR: {
+ case ';':
+ case ',':
+ case '~':
+ case '?': {
+ char c = (char)myChar;
+ nextChar();
+ return new Token(endToken(), c);
+ } case EOFCHAR: {
return new Token(Twine.fromString(""), EParser.EOFTOK);
} case '\n': {
myDelayedNextChar = true;
@@ -425,16 +424,63 @@
return openBracket(']');
} case ']': {
return closeBracket();
- }
- case ';':
- case ',':
- case '~':
- case '?':
- case '$':
- case '@': {
- char c = (char)myChar;
+ } case '$': {
nextChar();
- return new Token(endToken(), c);
+ if (myChar == '{') {
+ //A '${' both closes a '$' and opens a '}'
+ nextChar();
+ Twine openner = endToken();
+ myIndenter.pop('$', openner);
+ return openBracket(EParser.DollarOpen, openner, '}');
+ } else if (myChar != EOFCHAR &&
+ isIdentifierStart((char)myChar)) {
+ //A '$<ident>' closes a '$'
+ do {
+ nextChar();
+ } while (myChar != EOFCHAR &&
+ isIdentifierPart((char)myChar));
+ Twine name = endToken();
+ String key = name.toLowerCase().substring(1);
+ int tt = EParser.tokenType(key);
+ if (tt != -1) {
+ syntaxError(key + " is a keyword");
+ }
+ myIndenter.pop('$', name);
+ return new Token(name, EParser.DollarIdent);
+ }
+ return new Token(endToken(), '$');
+ } case '@': {
+ nextChar();
+ if (myChar == '{') {
+ //A '@{' both closes a '@' and opens a '}'
+ nextChar();
+ Twine openner = endToken();
+ myIndenter.pop('@', openner);
+ return openBracket(EParser.AtOpen, openner, '}');
+ } else if (myChar == '_' &&
+ ! isIdentifierPart(peekChar())) {
+ //A '@_' closes a '@'
+ nextChar();
+ Twine name = endToken();
+ myIndenter.pop('@', name);
+ return new Token(name, EParser.AtIdent);
+ } else if (myChar != EOFCHAR &&
+ isIdentifierStart((char)myChar)) {
+ //A '@<ident>' closes a '@'
+ do {
+ nextChar();
+ } while (myChar != EOFCHAR &&
+ isIdentifierPart((char)myChar));
+ Twine name = endToken();
+ String key = name.toLowerCase().substring(1);
+ int tt = EParser.tokenType(key);
+ if (tt != -1) {
+ syntaxError(key + " is a keyword");
+ }
+ myIndenter.pop('@', name);
+ return new Token(name, EParser.AtIdent);
+ }
+ return new Token(endToken(), '@');
} case '.': {
nextChar();
if (myChar == '.') {
@@ -672,8 +718,8 @@
return stringLiteral();
} case '`': {
//eat the backquote here so quasiPart can also
- //be called when we're quasiAgain'ing (in which case
- //there is no leading backquote).
+ //be called when we're continuing after a hole, in which case
+ //there is no leading backquote.
nextChar();
Twine openner = (Twine)myLTwine.run(myOptStartPos, myPos);
myIndenter.push(openner, '`', 0);
@@ -722,16 +768,24 @@
*
*/
private Token openBracket(char closer) throws IOException {
- char opennerChar = (char)myChar;
+ int tokenType = myChar;
nextChar();
Twine openner = endToken();
+ return openBracket(tokenType, openner, closer);
+ }
+
+ /**
+ *
+ */
+ private Token openBracket(int tokenType, Twine openner, char closer)
+ throws IOException {
if (isWhite(myPos, myLData.length)) {
myIndenter.nest(openner, closer);
} else {
//Indent the next line to right after the open.
myIndenter.push(openner, closer, myPos);
}
- return new Token(openner, opennerChar);
+ return new Token(openner, tokenType);
}
/**
@@ -965,20 +1019,6 @@
}
/**
- * Has an expression or pattern inside a curly-bracketted hole inside a
- * quasiliteral just ended?
- * <p>
- * If so, we should go back to treating text as part of the quasiliteral
- * string. Currently, this method is the means for the
- * evil parser-to-lexer feedback which yacc supports, but isn't supported
- * in general. Instead, this method should go away, and we should ask
- * myIndenter.
- */
- /*package*/ void quasiAgain() {
- myQuasiAgainFlag = true;
- }
-
- /**
*
*/
private Token quasiPart() throws IOException, SyntaxException {
@@ -1032,9 +1072,11 @@
nextChar();
} else {
+ Twine openner = endToken();
+ myIndenter.nest(openner, (char)myChar);
//interpolated '$' or '@' is neither eaten nor added to the
//value of the resulting QuasiOpen token.
- return new QuasiPart(endToken(),
+ return new QuasiPart(openner,
EParser.QuasiOpen,
buf.toString());
}
@@ -1190,6 +1232,9 @@
do {
t = lex.nextToken();
stdout.println(t);
+ if (t.tokenType() == '\n') {
+ stdout.println(lex.myIndenter.toString());
+ }
} while (t.tokenType() != EParser.EOFTOK);
return;
} catch (SyntaxException sex) {
1.93 +817 -811 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.92
retrieving revision 1.93
diff -u -r1.92 -r1.93
--- EParser.java 2001/10/27 17:27:42 1.92
+++ EParser.java 2001/11/01 06:32:24 1.93
@@ -167,157 +167,161 @@
public final static short VerbAss=263;
public final static short QuasiOpen=264;
public final static short QuasiClose=265;
-public final static short URI=266;
-public final static short URIStart=267;
-public final static short BodyStartWord=268;
-public final static short BodyNextWord=269;
-public final static short VTableStartWord=270;
-public final static short VTableNextWord=271;
-public final static short BIND=272;
-public final static short CATCH=273;
-public final static short CLASS=274;
-public final static short DEF=275;
-public final static short DELEGATE=276;
-public final static short ELSE=277;
-public final static short ESCAPE=278;
-public final static short FINALLY=279;
-public final static short FOR=280;
-public final static short IF=281;
-public final static short IN=282;
-public final static short MATCH=283;
-public final static short META=284;
-public final static short PRAGMA=285;
-public final static short SWITCH=286;
-public final static short THUNK=287;
-public final static short TO=288;
-public final static short TRY=289;
-public final static short VAR=290;
-public final static short WHEN=291;
-public final static short WHILE=292;
-public final static short DEFINE=293;
-public final static short ON=294;
-public final static short SELECT=295;
-public final static short TYPEDEF=296;
-public final static short ABSTRACT=297;
-public final static short AN=298;
-public final static short AS=299;
-public final static short ATTRIBUTE=300;
-public final static short BE=301;
-public final static short BEGIN=302;
-public final static short BEHALF=303;
-public final static short BELIEF=304;
-public final static short BELIEVE=305;
-public final static short BELIEVES=306;
-public final static short CASE=307;
-public final static short CONST=308;
-public final static short CONSTRUCTOR=309;
-public final static short CONTEXT=310;
-public final static short DECLARE=311;
-public final static short DEFAULT=312;
-public final static short DEFMACRO=313;
-public final static short DEPRECATED=314;
-public final static short DISPATCH=315;
-public final static short DO=316;
-public final static short ENCAPSULATE=317;
-public final static short ENCAPSULATED=318;
-public final static short ENCAPSULATES=319;
-public final static short END=320;
-public final static short ENSURE=321;
-public final static short ENUM=322;
-public final static short EVENTUAL=323;
-public final static short EVENTUALLY=324;
-public final static short EXPORT=325;
-public final static short EXTENDS=326;
-public final static short FACET=327;
-public final static short FORALL=328;
-public final static short FUNCTION=329;
-public final static short GIVEN=330;
-public final static short HIDDEN=331;
-public final static short HIDES=332;
-public final static short IMPLEMENTS=333;
-public final static short INTERFACE=334;
-public final static short IS=335;
-public final static short KNOW=336;
-public final static short KNOWS=337;
-public final static short LAMBDA=338;
-public final static short LET=339;
-public final static short METHOD=340;
-public final static short METHODS=341;
-public final static short MODULE=342;
-public final static short NAMESPACE=343;
-public final static short NATIVE=344;
-public final static short OBEYS=345;
-public final static short OCTET=346;
-public final static short ONEWAY=347;
-public final static short PACKAGE=348;
-public final static short PRIVATE=349;
-public final static short PROTECTED=350;
-public final static short PUBLIC=351;
-public final static short RAISES=352;
-public final static short RELIANCE=353;
-public final static short RELIANT=354;
-public final static short RELIES=355;
-public final static short RELY=356;
-public final static short REVEAL=357;
-public final static short SAKE=358;
-public final static short SIGNED=359;
-public final static short STATIC=360;
-public final static short STRUCT=361;
-public final static short SUCHTHAT=362;
-public final static short SUPPORTS=363;
-public final static short SUSPECT=364;
-public final static short SUSPECTS=365;
-public final static short SYNCHRONIZED=366;
-public final static short THIS=367;
-public final static short THROWS=368;
-public final static short TRANSIENT=369;
-public final static short TRUNCATABLE=370;
-public final static short UNSIGNED=371;
-public final static short UNUM=372;
-public final static short USES=373;
-public final static short USING=374;
-public final static short UTF8=375;
-public final static short UTF16=376;
-public final static short VALUETYPE=377;
-public final static short VIRTUAL=378;
-public final static short VOLATILE=379;
-public final static short WSTRING=380;
-public final static short EOL=381;
-public final static short OpLAnd=382;
-public final static short OpLOr=383;
-public final static short OpSame=384;
-public final static short OpNSame=385;
-public final static short OpButNot=386;
-public final static short OpLeq=387;
-public final static short OpABA=388;
-public final static short OpGeq=389;
-public final static short OpThru=390;
-public final static short OpTill=391;
-public final static short OpAsl=392;
-public final static short OpAsr=393;
-public final static short OpFlrDiv=394;
-public final static short OpMod=395;
-public final static short OpPow=396;
-public final static short OpAss=397;
-public final static short OpAssAdd=398;
-public final static short OpAssAnd=399;
-public final static short OpAssAprxDiv=400;
-public final static short OpAssFlrDiv=401;
-public final static short OpAssAsl=402;
-public final static short OpAssAsr=403;
-public final static short OpAssRemdr=404;
-public final static short OpAssMod=405;
-public final static short OpAssMul=406;
-public final static short OpAssOr=407;
-public final static short OpAssPow=408;
-public final static short OpAssSub=409;
-public final static short OpAssXor=410;
-public final static short Send=411;
-public final static short OpWhen=412;
-public final static short MapsTo=413;
-public final static short MatchBind=414;
-public final static short MisMatch=415;
-public final static short Audit=416;
+public final static short DollarIdent=266;
+public final static short AtIdent=267;
+public final static short DollarOpen=268;
+public final static short AtOpen=269;
+public final static short URI=270;
+public final static short URIStart=271;
+public final static short BodyStartWord=272;
+public final static short BodyNextWord=273;
+public final static short VTableStartWord=274;
+public final static short VTableNextWord=275;
+public final static short BIND=276;
+public final static short CATCH=277;
+public final static short CLASS=278;
+public final static short DEF=279;
+public final static short DELEGATE=280;
+public final static short ELSE=281;
+public final static short ESCAPE=282;
+public final static short FINALLY=283;
+public final static short FOR=284;
+public final static short IF=285;
+public final static short IN=286;
+public final static short MATCH=287;
+public final static short META=288;
+public final static short PRAGMA=289;
+public final static short SWITCH=290;
+public final static short THUNK=291;
+public final static short TO=292;
+public final static short TRY=293;
+public final static short VAR=294;
+public final static short WHEN=295;
+public final static short WHILE=296;
+public final static short DEFINE=297;
+public final static short ON=298;
+public final static short SELECT=299;
+public final static short TYPEDEF=300;
+public final static short ABSTRACT=301;
+public final static short AN=302;
+public final static short AS=303;
+public final static short ATTRIBUTE=304;
+public final static short BE=305;
+public final static short BEGIN=306;
+public final static short BEHALF=307;
+public final static short BELIEF=308;
+public final static short BELIEVE=309;
+public final static short BELIEVES=310;
+public final static short CASE=311;
+public final static short CONST=312;
+public final static short CONSTRUCTOR=313;
+public final static short CONTEXT=314;
+public final static short DECLARE=315;
+public final static short DEFAULT=316;
+public final static short DEFMACRO=317;
+public final static short DEPRECATED=318;
+public final static short DISPATCH=319;
+public final static short DO=320;
+public final static short ENCAPSULATE=321;
+public final static short ENCAPSULATED=322;
+public final static short ENCAPSULATES=323;
+public final static short END=324;
+public final static short ENSURE=325;
+public final static short ENUM=326;
+public final static short EVENTUAL=327;
+public final static short EVENTUALLY=328;
+public final static short EXPORT=329;
+public final static short EXTENDS=330;
+public final static short FACET=331;
+public final static short FORALL=332;
+public final static short FUNCTION=333;
+public final static short GIVEN=334;
+public final static short HIDDEN=335;
+public final static short HIDES=336;
+public final static short IMPLEMENTS=337;
+public final static short INTERFACE=338;
+public final static short IS=339;
+public final static short KNOW=340;
+public final static short KNOWS=341;
+public final static short LAMBDA=342;
+public final static short LET=343;
+public final static short METHOD=344;
+public final static short METHODS=345;
+public final static short MODULE=346;
+public final static short NAMESPACE=347;
+public final static short NATIVE=348;
+public final static short OBEYS=349;
+public final static short OCTET=350;
+public final static short ONEWAY=351;
+public final static short PACKAGE=352;
+public final static short PRIVATE=353;
+public final static short PROTECTED=354;
+public final static short PUBLIC=355;
+public final static short RAISES=356;
+public final static short RELIANCE=357;
+public final static short RELIANT=358;
+public final static short RELIES=359;
+public final static short RELY=360;
+public final static short REVEAL=361;
+public final static short SAKE=362;
+public final static short SIGNED=363;
+public final static short STATIC=364;
+public final static short STRUCT=365;
+public final static short SUCHTHAT=366;
+public final static short SUPPORTS=367;
+public final static short SUSPECT=368;
+public final static short SUSPECTS=369;
+public final static short SYNCHRONIZED=370;
+public final static short THIS=371;
+public final static short THROWS=372;
+public final static short TRANSIENT=373;
+public final static short TRUNCATABLE=374;
+public final static short UNSIGNED=375;
+public final static short UNUM=376;
+public final static short USES=377;
+public final static short USING=378;
+public final static short UTF8=379;
+public final static short UTF16=380;
+public final static short VALUETYPE=381;
+public final static short VIRTUAL=382;
+public final static short VOLATILE=383;
+public final static short WSTRING=384;
+public final static short EOL=385;
+public final static short OpLAnd=386;
+public final static short OpLOr=387;
+public final static short OpSame=388;
+public final static short OpNSame=389;
+public final static short OpButNot=390;
+public final static short OpLeq=391;
+public final static short OpABA=392;
+public final static short OpGeq=393;
+public final static short OpThru=394;
+public final static short OpTill=395;
+public final static short OpAsl=396;
+public final static short OpAsr=397;
+public final static short OpFlrDiv=398;
+public final static short OpMod=399;
+public final static short OpPow=400;
+public final static short OpAss=401;
+public final static short OpAssAdd=402;
+public final static short OpAssAnd=403;
+public final static short OpAssAprxDiv=404;
+public final static short OpAssFlrDiv=405;
+public final static short OpAssAsl=406;
+public final static short OpAssAsr=407;
+public final static short OpAssRemdr=408;
+public final static short OpAssMod=409;
+public final static short OpAssMul=410;
+public final static short OpAssOr=411;
+public final static short OpAssPow=412;
+public final static short OpAssSub=413;
+public final static short OpAssXor=414;
+public final static short Send=415;
+public final static short OpWhen=416;
+public final static short MapsTo=417;
+public final static short MatchBind=418;
+public final static short MisMatch=419;
+public final static short Audit=420;
public final static short YYERRCODE=256;
final static short yylhs[] = { -1,
0, 0, 0, 4, 4, 2, 6, 5, 5, 7,
@@ -332,26 +336,26 @@
38, 38, 38, 37, 37, 37, 36, 36, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
- 36, 36, 36, 36, 36, 58, 58, 58, 58, 58,
- 58, 42, 45, 55, 55, 55, 53, 54, 56, 56,
- 68, 67, 67, 66, 66, 66, 43, 43, 43, 44,
- 44, 69, 69, 70, 70, 71, 72, 72, 74, 74,
- 75, 76, 76, 63, 63, 77, 77, 3, 3, 3,
- 79, 79, 79, 79, 79, 80, 80, 81, 81, 82,
- 82, 83, 83, 84, 84, 85, 85, 85, 78, 78,
- 78, 78, 78, 78, 78, 78, 19, 19, 20, 20,
- 86, 86, 86, 86, 86, 86, 86, 88, 88, 88,
- 89, 89, 59, 59, 90, 90, 15, 15, 87, 87,
- 92, 92, 92, 92, 92, 93, 93, 93, 61, 61,
- 61, 62, 95, 96, 94, 94, 97, 64, 64, 98,
- 98, 99, 1, 1, 9, 9, 100, 73, 18, 18,
- 39, 39, 91, 91, 46, 46, 101, 101, 40, 13,
- 13, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 48, 48, 49, 60, 60, 60, 104,
- 104, 105, 105, 103, 103, 51, 51, 65, 106, 52,
- 52, 57, 57, 107, 107, 107, 107, 109, 109, 109,
+ 36, 36, 36, 36, 36, 59, 59, 59, 59, 59,
+ 59, 43, 46, 56, 56, 56, 54, 55, 57, 57,
+ 69, 68, 68, 67, 67, 67, 44, 44, 44, 45,
+ 45, 70, 70, 71, 71, 72, 72, 74, 74, 75,
+ 76, 76, 64, 64, 77, 77, 3, 3, 3, 79,
+ 79, 79, 79, 79, 80, 80, 81, 81, 82, 82,
+ 83, 83, 84, 84, 85, 85, 78, 78, 78, 78,
+ 78, 78, 78, 78, 78, 19, 19, 20, 20, 86,
+ 86, 86, 86, 86, 86, 86, 88, 88, 88, 89,
+ 89, 60, 60, 90, 90, 15, 15, 87, 87, 92,
+ 92, 92, 92, 92, 93, 93, 93, 62, 62, 62,
+ 63, 95, 96, 94, 94, 97, 65, 65, 98, 98,
+ 99, 1, 1, 9, 9, 100, 73, 18, 18, 39,
+ 39, 91, 91, 47, 47, 101, 101, 40, 13, 41,
+ 41, 17, 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 17, 49, 49, 50, 61, 61, 61, 104,
+ 104, 105, 105, 103, 103, 52, 52, 66, 106, 53,
+ 53, 58, 58, 107, 107, 107, 107, 109, 109, 109,
109, 108, 108, 108, 111, 111, 112, 112, 113, 113,
- 110, 110, 41, 41, 47, 50, 102, 102, 102, 102,
+ 110, 110, 42, 42, 48, 51, 102, 102, 102, 102,
102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
@@ -373,21 +377,21 @@
4, 4, 3, 3, 2, 3, 4, 2, 3, 3,
4, 2, 3, 1, 2, 3, 1, 1, 1, 1,
1, 1, 1, 3, 2, 1, 3, 3, 2, 4,
- 4, 5, 5, 1, 1, 1, 1, 4, 2, 2,
- 4, 2, 3, 2, 1, 2, 4, 3, 3, 4,
+ 4, 5, 5, 1, 1, 1, 1, 3, 2, 2,
+ 3, 2, 3, 2, 1, 2, 4, 3, 3, 4,
3, 1, 3, 4, 6, 7, 8, 5, 5, 6,
0, 6, 6, 0, 1, 1, 0, 1, 3, 1,
- 2, 2, 3, 3, 5, 0, 1, 2, 1, 4,
- 2, 1, 4, 1, 1, 3, 2, 1, 3, 4,
- 1, 3, 5, 3, 5, 1, 2, 1, 2, 1,
- 2, 2, 3, 1, 1, 3, 3, 5, 3, 1,
- 2, 1, 1, 1, 4, 4, 4, 2, 4, 2,
- 1, 1, 2, 2, 4, 4, 1, 2, 2, 2,
- 1, 3, 1, 3, 1, 4, 2, 5, 1, 1,
- 4, 6, 4, 6, 4, 4, 5, 2, 4, 5,
- 2, 6, 4, 3, 0, 2, 3, 8, 6, 1,
- 3, 3, 0, 1, 1, 2, 0, 1, 3, 2,
- 1, 1, 1, 3, 1, 3, 3, 2, 1, 1,
+ 2, 2, 3, 1, 3, 1, 2, 1, 4, 2,
+ 1, 4, 1, 1, 3, 2, 1, 3, 4, 1,
+ 3, 5, 3, 5, 1, 2, 1, 2, 1, 2,
+ 2, 3, 1, 1, 1, 3, 3, 1, 2, 1,
+ 3, 1, 1, 3, 3, 4, 2, 4, 2, 1,
+ 1, 2, 2, 3, 3, 1, 2, 2, 2, 1,
+ 3, 1, 3, 1, 4, 2, 5, 1, 1, 4,
+ 6, 4, 6, 4, 4, 5, 2, 4, 5, 2,
+ 6, 4, 3, 0, 2, 3, 8, 6, 1, 3,
+ 3, 0, 1, 1, 2, 0, 1, 3, 2, 1,
+ 1, 1, 3, 1, 3, 3, 2, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 4, 6, 4, 5, 1, 1, 1,
3, 1, 3, 1, 3, 1, 1, 2, 4, 0,
@@ -404,96 +408,95 @@
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
};
final static short yydefred[] = { 0,
- 245, 0, 0, 0, 2, 0, 260, 0, 313, 314,
- 0, 317, 318, 319, 320, 321, 322, 323, 324, 325,
- 326, 327, 328, 329, 330, 331, 332, 333, 334, 335,
- 336, 337, 338, 339, 340, 341, 342, 343, 344, 345,
- 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
- 356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
- 366, 367, 368, 369, 370, 371, 372, 373, 374, 375,
- 376, 377, 378, 379, 380, 381, 382, 383, 384, 385,
- 386, 387, 388, 389, 390, 391, 392, 393, 394, 395,
- 396, 397, 398, 399, 400, 0, 0, 0, 0, 0,
- 192, 0, 3, 0, 193, 194, 0, 0, 178, 0,
- 171, 176, 261, 97, 98, 99, 100, 101, 103, 0,
- 315, 315, 0, 0, 4, 0, 0, 5, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 12, 0, 15, 0, 0, 0, 0, 0, 30,
- 0, 0, 0, 0, 0, 62, 0, 0, 94, 0,
- 80, 0, 102, 0, 106, 0, 114, 115, 116, 117,
- 125, 0, 0, 246, 0, 0, 0, 0, 0, 177,
- 191, 0, 248, 0, 0, 157, 0, 0, 0, 162,
- 0, 0, 0, 0, 0, 0, 0, 0, 180, 179,
- 0, 0, 0, 0, 0, 0, 219, 220, 0, 0,
- 0, 0, 202, 201, 0, 0, 207, 315, 0, 0,
- 0, 315, 0, 0, 124, 0, 78, 77, 75, 76,
- 0, 0, 0, 0, 0, 251, 0, 255, 119, 120,
- 0, 122, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 208, 6, 0, 0, 0, 0, 0, 262, 263,
- 264, 265, 266, 0, 267, 268, 269, 270, 271, 272,
- 273, 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, 259, 0, 0, 0, 0, 0, 0,
- 0, 150, 105, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 109, 0, 0, 126, 278, 279, 0,
- 0, 0, 209, 210, 0, 167, 0, 0, 0, 158,
- 0, 0, 161, 0, 0, 0, 10, 149, 189, 0,
- 0, 0, 0, 184, 182, 185, 0, 181, 169, 104,
- 146, 145, 0, 0, 203, 204, 0, 0, 129, 0,
- 0, 253, 0, 247, 0, 0, 0, 123, 0, 0,
- 0, 0, 132, 258, 0, 107, 108, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 9, 0, 16,
- 0, 0, 21, 23, 0, 18, 22, 19, 26, 27,
- 31, 33, 34, 42, 41, 38, 39, 40, 35, 36,
- 37, 45, 46, 47, 44, 48, 0, 0, 56, 0,
- 53, 0, 61, 0, 58, 59, 69, 68, 65, 67,
- 63, 64, 66, 73, 72, 71, 0, 0, 0, 0,
- 0, 0, 0, 250, 0, 0, 0, 152, 0, 151,
- 0, 0, 0, 165, 0, 0, 128, 247, 0, 0,
- 0, 0, 131, 0, 247, 0, 0, 0, 215, 0,
- 197, 199, 166, 0, 0, 0, 0, 195, 196, 7,
- 0, 133, 170, 0, 0, 0, 0, 183, 0, 0,
- 316, 0, 0, 0, 0, 237, 315, 0, 286, 0,
- 315, 247, 0, 0, 0, 0, 0, 302, 293, 257,
- 0, 256, 254, 118, 121, 0, 0, 25, 0, 217,
- 0, 0, 81, 0, 249, 0, 153, 110, 0, 0,
- 316, 0, 287, 111, 316, 0, 159, 0, 0, 0,
- 231, 130, 280, 0, 234, 0, 127, 0, 173, 160,
- 175, 0, 163, 11, 156, 154, 156, 187, 186, 315,
- 139, 0, 0, 205, 206, 0, 0, 288, 0, 138,
- 0, 0, 240, 0, 284, 0, 0, 0, 0, 294,
- 0, 0, 0, 0, 305, 0, 307, 0, 0, 312,
- 0, 0, 0, 315, 315, 112, 0, 113, 274, 0,
- 0, 0, 236, 0, 0, 0, 0, 233, 0, 0,
- 0, 0, 315, 140, 0, 0, 0, 0, 0, 0,
- 0, 276, 0, 0, 295, 298, 300, 292, 296, 0,
- 310, 309, 0, 306, 304, 0, 0, 0, 0, 135,
- 316, 229, 0, 0, 0, 0, 281, 0, 277, 216,
- 155, 188, 0, 0, 232, 0, 291, 242, 239, 241,
- 0, 285, 0, 0, 0, 0, 303, 218, 316, 136,
- 275, 230, 0, 0, 0, 0, 0, 0, 283, 316,
- 0, 289, 0, 297, 299, 301, 308, 137, 0, 225,
- 0, 0, 0, 228, 221, 223, 0, 0, 238, 316,
- 0, 316, 0, 143, 142, 224, 226, 222, 0, 227,
+ 244, 0, 0, 0, 2, 0, 260, 0, 0, 0,
+ 313, 314, 0, 317, 318, 319, 320, 321, 322, 323,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
+ 334, 335, 336, 337, 338, 339, 340, 341, 342, 343,
+ 344, 345, 346, 347, 348, 349, 350, 351, 352, 353,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
+ 364, 365, 366, 367, 368, 369, 370, 371, 372, 373,
+ 374, 375, 376, 377, 378, 379, 380, 381, 382, 383,
+ 384, 385, 386, 387, 388, 389, 390, 391, 392, 393,
+ 394, 395, 396, 397, 398, 399, 400, 0, 0, 0,
+ 0, 0, 3, 0, 192, 193, 0, 0, 0, 177,
+ 0, 170, 175, 261, 97, 98, 99, 100, 101, 0,
+ 0, 103, 0, 315, 315, 0, 0, 4, 0, 0,
+ 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 8, 12, 0, 15, 132, 0, 0,
+ 0, 0, 30, 0, 0, 0, 0, 0, 62, 0,
+ 0, 94, 0, 80, 0, 102, 0, 106, 0, 114,
+ 115, 116, 117, 125, 0, 0, 245, 0, 0, 0,
+ 259, 0, 0, 0, 0, 176, 189, 0, 247, 0,
+ 0, 156, 0, 0, 0, 161, 0, 0, 0, 0,
+ 0, 0, 0, 179, 178, 0, 0, 0, 0, 0,
+ 0, 0, 0, 218, 219, 0, 0, 0, 0, 201,
+ 200, 0, 0, 206, 315, 0, 0, 0, 315, 0,
+ 0, 124, 0, 78, 77, 75, 76, 0, 0, 0,
+ 0, 0, 250, 0, 254, 119, 120, 122, 0, 0,
+ 0, 0, 0, 0, 0, 0, 207, 6, 0, 0,
+ 0, 0, 0, 262, 263, 264, 265, 266, 0, 267,
+ 268, 269, 270, 271, 272, 273, 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, 258,
+ 0, 0, 0, 0, 0, 0, 150, 105, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 109, 0,
+ 0, 126, 278, 279, 0, 194, 195, 0, 0, 208,
+ 209, 166, 0, 0, 0, 157, 0, 0, 160, 191,
+ 0, 10, 149, 187, 0, 0, 154, 185, 0, 0,
+ 183, 181, 184, 0, 180, 168, 118, 121, 104, 146,
+ 145, 0, 0, 0, 0, 202, 203, 129, 0, 0,
+ 252, 0, 246, 0, 0, 0, 123, 0, 0, 0,
+ 0, 257, 0, 107, 108, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 0, 16, 0, 0, 21, 23,
+ 0, 18, 22, 19, 26, 27, 31, 33, 34, 42,
+ 41, 38, 39, 40, 35, 36, 37, 45, 46, 47,
+ 44, 48, 0, 0, 56, 0, 53, 0, 61, 0,
+ 58, 59, 69, 68, 65, 67, 63, 64, 66, 73,
+ 72, 71, 0, 0, 0, 0, 0, 0, 0, 249,
+ 0, 0, 0, 152, 0, 151, 0, 0, 0, 164,
+ 0, 0, 128, 246, 0, 0, 0, 131, 0, 0,
+ 246, 0, 0, 0, 214, 0, 196, 198, 165, 0,
+ 0, 0, 0, 7, 0, 133, 169, 0, 0, 182,
+ 0, 0, 316, 204, 205, 0, 0, 236, 315, 0,
+ 286, 0, 315, 246, 0, 0, 0, 0, 0, 302,
+ 293, 256, 0, 255, 253, 0, 0, 25, 0, 216,
+ 0, 0, 81, 0, 248, 0, 153, 110, 0, 0,
+ 316, 0, 287, 111, 158, 0, 0, 0, 230, 130,
+ 316, 0, 280, 0, 233, 0, 127, 0, 172, 159,
+ 174, 0, 162, 11, 155, 186, 315, 139, 0, 0,
+ 0, 0, 288, 0, 138, 0, 0, 239, 0, 284,
+ 0, 0, 0, 305, 0, 307, 0, 0, 0, 0,
+ 294, 0, 0, 0, 312, 0, 315, 315, 112, 0,
+ 113, 0, 0, 235, 274, 0, 0, 0, 0, 0,
+ 232, 0, 0, 315, 140, 0, 0, 0, 0, 0,
+ 0, 0, 276, 0, 0, 310, 309, 0, 306, 304,
+ 295, 298, 300, 292, 296, 0, 0, 0, 0, 0,
+ 135, 228, 0, 316, 0, 0, 0, 281, 0, 277,
+ 215, 0, 0, 231, 0, 291, 241, 238, 240, 0,
+ 285, 0, 0, 0, 0, 303, 217, 316, 136, 229,
+ 275, 0, 0, 0, 0, 0, 0, 283, 316, 0,
+ 289, 0, 308, 297, 299, 301, 137, 0, 224, 0,
+ 0, 0, 227, 220, 222, 0, 0, 237, 316, 0,
+ 316, 0, 143, 142, 223, 225, 221, 0, 226,
};
final static short yydgoto[] = { 3,
- 193, 5, 547, 179, 140, 372, 346, 141, 6, 347,
- 143, 144, 145, 407, 437, 146, 272, 307, 105, 106,
- 149, 150, 151, 416, 152, 153, 154, 431, 155, 435,
- 156, 439, 157, 446, 158, 159, 160, 161, 234, 381,
- 162, 163, 164, 313, 165, 235, 166, 324, 378, 573,
- 507, 580, 167, 168, 169, 170, 225, 171, 172, 327,
- 474, 215, 463, 221, 508, 363, 571, 572, 314, 354,
- 495, 185, 186, 187, 188, 189, 190, 109, 110, 111,
- 112, 200, 201, 355, 356, 216, 217, 173, 218, 480,
- 237, 615, 686, 704, 328, 329, 223, 582, 583, 509,
- 238, 113, 586, 554, 617, 578, 591, 382, 592, 518,
- 515, 596, 597,
+ 198, 5, 545, 185, 143, 381, 351, 144, 6, 352,
+ 146, 147, 148, 413, 443, 149, 277, 312, 105, 106,
+ 152, 153, 154, 422, 155, 156, 157, 437, 158, 441,
+ 159, 445, 160, 452, 161, 162, 163, 164, 241, 390,
+ 107, 165, 166, 167, 318, 168, 242, 169, 329, 387,
+ 570, 509, 575, 170, 171, 172, 173, 232, 174, 175,
+ 332, 479, 222, 469, 228, 510, 372, 568, 569, 319,
+ 361, 191, 192, 193, 194, 195, 196, 110, 111, 112,
+ 113, 205, 206, 362, 363, 223, 224, 176, 225, 486,
+ 244, 608, 675, 693, 333, 334, 230, 577, 578, 511,
+ 245, 114, 581, 554, 610, 573, 592, 391, 593, 520,
+ 516, 585, 586,
};
-final static short yysindex[] = { -302,
- 0,13340, 0,15221, 0, -301, 0,17299, 0, 0,
-17299, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+final static short yysindex[] = { -318,
+ 0,15796, 0,14020, 0, -306, 0, -166, -162,19647,
+ 0, 0,19647, 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,
@@ -501,72 +504,71 @@
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,16165,17299, 9865, -30, -7,
- 0, -260, 0, 77, 0, 0, 87, -71, 0, 83,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,15569,
- 0, 0,17299,16631, 0,17299,16510, 0, 87,16631,
-17299,16165,16165,16165, -289, 2, -68, -260,12754, -260,
- 0, 0, 81, 0, 0, 1136, -235, -210, -172, 0,
- 14, 24, 133, 261, -19, 0, -178,12284, 0, 223,
- 0,11949, 0, -18, 0, 785, 0, 0, 0, 0,
- 0, 172, -133, 0, 253, 257,17299,17299,16631, 0,
- 0,16976, 0, -96, 226, 0, -11, 228, 3, 0,
- 71, 79,15221, 284,15569, -260, -79, 37, 0, 0,
- 12,15569, 152,13685,13685, 253, 0, 0,17299,17299,
- 232, 240, 0, 0, 242, -44, 0, 0, 257, -260,
- 242, 0, -24, 259, 0,18015, 0, 0, 0, 0,
-17299,15221, -34, 297, 27, 0, 353, 0, 0, 0,
- 144, 0, 157, 362,17299,17299, 286, 296, 0, 30,
- 77, 0, 0,12408,15221, 223,15569,15221, 0, 0,
- 0, 0, 0,15221, 0, 0, 0, 0, 0, 0,
- 0,15693,15221,15221,15569,15569,15569,16041,13340,13340,
-16041,16041,16041,15569,15569,15569,15569,15569,15569,15569,
-16041,15569,16041,16041,16041,16041,16041,16041,16041,16041,
-18713, -260,17299, 0, 223, -260, -127,18713, -127, 223,
- 388, 0, 0, 66,13340, 9985, 87, 87, 242, 242,
- 87, -260,18134, 0, -260,17555, 0, 0, 0,17299,
-15569,15569, 0, 0, 77, 0,13340, 383, -260, 0,
- 308, -260, 0, 330, 338, -260, 0, 0, 0, 423,
-13340, 343, 347, 0, 0, 0, 37, 0, 0, 0,
- 0, 0, 242, 172, 0, 0, 214, 217, 0,17299,
- 436, 0, 53, 0, 437,16631, -260, 0, -260, -260,
- 143, 97, 0, 0, -260, 0, 0, -289, -260, 357,
- 358, 0, 253, 257, 229, 230,15221, 0,12754, 0,
- -127, -172, 0, 0, -29, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -84, -84, 0, 261,
- 0, 261, 0, -19, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -127, 223, 399, 223,
- -127, 452, -54, 0, -127, 223, -127, 0, 388, 0,
- 242, -96, 227, 0, 242, 259, 0, 0, 242,15097,
-13220, 146, 0, 242, 0, 242,13340, 242, 0, 470,
- 0, 0, 0,13804,13340,13804, 9985, 0, 0, 0,
-12408, 0, 0, -260,17299,13340,19119, 0, 244, -150,
- 0, 415, 416, 470,13220, 0, 0, 0, 0, -260,
- 0, 0, 68,19410, 501, -260,17299, 0, 0, 0,
- -34, 0, 0, 0, 0, 419, 420, 0, 77, 0,
- 138, -127, 0, -127, 0, -127, 0, 0,15221, 269,
- 0, 0, 0, 0, 0, -260, 0, 508,13220,15569,
- 0, 0, 0, 0, 0, 242, 0, -260, 0, 0,
- 0, -96, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 287, 244, 0, 0, 516, 288, 0, 281, 0,
- 150, 207, 0, 527, 0, 444, -260,18832,18832, 0,
- 447, -260, 517, 517, 0, 15, 0, 517, 533, 0,
- 0, 0, -260, 0, 0, 0, -197, 0, 0, 451,
- 519, 540, 0, -10, -260, 0, 457, 0,17299, 461,
- 462,13685, 0, 0, 519,13340, 242,13340, 519, -260,
-13340, 0, 307, -260, 0, 0, 0, 0, 0, -213,
- 0, 0, -260, 0, 0, 517, 241, 242, -62, 0,
- 0, 0, 519, 87,18951,18951, 0, -260, 0, 0,
- 0, 0, 172,13685, 0, 242, 0, 0, 0, 0,
- 246, 0, -260,18832,18832,19410, 0, 0, 0, 0,
- 0, 0, -103,13220, -36, 242, 159, 242, 0, 0,
- 242, 0, 519, 0, 0, 0, 0, 0, 87, 0,
- 550,15221,13220, 0, 0, 0, 244, 244, 0, 0,
- 519, 0, 553, 0, 0, 0, 0, 0, 519, 0,
+ 0, 0, 0, 0, 0, 0, 0,16398,19647,11865,
+ 52, -267, 0, 64, 0, 0, 0, 90, 21, 0,
+ 72, 0, 0, 0, 0, 0, 0, 0, 0, -116,
+ -112, 0,14372, 0, 0,19647,19057, 0,19647,16870,
+ 0, 90,19057,19647,16398,16398,16398, -325, 6, -99,
+ -267,14977, -267, 0, 0, 116, 0, 0, 782, -222,
+ -216, -197, 0, 74, 3, -154, 248, -22, 0, -188,
+12451, 0, 153, 0,12112, 0, 63, 0, -12, 0,
+ 0, 0, 0, 0, 100, -158, 0, 121, 129, 208,
+ 0, 232,19647,19647,19057, 0, 0,16745, 0, -123,
+ 209, 0, -30, 217, -26, 0,14372,14020, 276,14372,
+ -267, -87, 390, 0, 0, 70,14372, 195, 212, 104,
+15919,15919, 208, 0, 0, 88, 93,19647,19647, 0,
+ 0, 224, -64, 0, 0, 232, -267, 224, 0, -63,
+ 238, 0,17929, 0, 0, 0, 0,19647,14020, -54,
+ 273, 28, 0, 326, 0, 0, 0, 0, 337, 125,
+ 131,19647,19647, 52, -4, 64, 0, 0,12579,14020,
+ 153,14372,14020, 0, 0, 0, 0, 0,14020, 0,
+ 0, 0, 0, 0, 0, 0,14500,14020,14020,14372,
+14372,14372,14852,15796,15796,14852,14852,14852,14372,14372,
+14372,14372,14372,14372,14372,14852,14372,14852,14852,14852,
+14852,14852,14852,14852,14852,18643, -267,19647, 153, 0,
+ -267, -174,18643, -174, 153, 39, 0, 0, 78,15796,
+11989, 90, 90, 224, 224, 90,18052, -267, 0, -267,
+17461, 0, 0, 0,19647, 0, 0,14372,14372, 0,
+ 0, 0,15796, 356, -267, 0, 278, -267, 0, 0,
+ -267, 0, 0, 0, 366,15796, 0, 0, -267,15796,
+ 0, 0, 0, 390, 0, 0, 0, 0, 0, 0,
+ 0, 224, 100, 301, 306, 0, 0, 0,19647, 395,
+ 0, 158, 0, 402,19057, -267, 0, -267, -267, 56,
+ 58, 0, -267, 0, 0, -325, -267, 0, 320, 324,
+ 208, 232,14020, 0,14977, 0, -174, -197, 0, 0,
+ -25, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -16, -16, 0, 248, 0, 248, 0, -22,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -174, 153, 357, 153, -174, 411, -44, 0,
+ -174, 153, -174, 0, 39, 0, 224, -123, 168, 0,
+ 224, 238, 0, 0, 224,15447, 59, 0, 224,13892,
+ 0, 224,15796, 224, 0, 414, 0, 0, 0,16266,
+15796,16266,11989, 0,12579, 0, 0, 330, 334, 0,
+ 198, -125, 0, 0, 0, 414,15447, 0, 0, 0,
+ 0, -267, 0, 0,19356, 434, -142, -267,19647, 0,
+ 0, 0, -54, 0, 0, 0, 0, 0, 64, 0,
+ 211, -174, 0, -174, 0, -174, 0, 0,14020, 197,
+ 0, 0, 0, 0, 0, 435,15447,14372, 0, 0,
+ 0, -267, 0, 0, 0, 224, 0, -267, 0, 0,
+ 0, -123, 0, 0, 0, 0, 0, 0, 206, 198,
+ 439, 210, 0, 213, 0, 81, 223, 0, 463, 0,
+ 379, 456, 456, 0, -20, 0, 456, -267,18766,18766,
+ 0, 391, -267, 474, 0, -267, 0, 0, 0, -107,
+ 0, 464, 484, 0, 0, 408, -114, -267, 0, 409,
+ 0,19647,15919, 0, 0, 464,15796, 224,15796, 464,
+ -267,15796, 0, 240, -267, 0, 0, -267, 0, 0,
+ 0, 0, 0, 0, 0, -214, 456, 230, 224, -52,
+ 0, 0, 464, 0, 90,18889,18889, 0, -267, 0,
+ 0, 100,15919, 0, 224, 0, 0, 0, 0, 236,
+ 0,19356, -267,18766,18766, 0, 0, 0, 0, 0,
+ 0, -106,15447, -9, 224, 102, 224, 0, 0, 224,
+ 0, 464, 0, 0, 0, 0, 0, 90, 0, 495,
+14020,15447, 0, 0, 0, 198, 198, 0, 0, 464,
+ 0, 496, 0, 0, 0, 0, 0, 464, 0,
};
-final static short yyrindex[] = { 9400,
- 0, 74, 0, 484, 0, 8366, 0, 0, 0, 0,
+final static short yyrindex[] = { 9523,
+ 0, 145, 0, 501, 0, 8628, 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,
@@ -575,85 +577,84 @@
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, 1339, 0, -37, 0, 0,
- 0,14749, 0, 8186, 0, 0, 0, 0, 0, 8967,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1339,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1339, 1339, 1339,14153, 0, 0,14749, 74, 595,
- 0, 0, 44, 0, 982, 670, 0, 0, 9167, 0,
- 9013, 8138, 7722, 7306, 7108, 0, 7069, 6690, 0, 4980,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,17674,17095, 0, 8514, 8747, 0, 0, 0, 0,
- 0, 0, 0, -15, 0, 0, 29, 0, 503, 0,
- 0, 0, 1339, 0, 1339,14749, 0, 0, 0, 0,
- 0, 1339, 0, -56, 182,11709, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,18475, 0, 0,11829,14749,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 719, 46, 0, 0, 0, 36, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,10446, 0,
- 862, 0, 0, 538, 580, 0, 1339, 1339, 0, 0,
- 0, 0, 0, 1339, 0, 0, 0, 0, 0, 0,
- 0, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 74, 74,
- 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339,
- 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339, 1339,
- 0,14153, 0, 0, 5396,14277, 1398, 0, 2700, 5550,
- 0, 0, 0, 0, 74, 74, 0, 0, 0, 0,
- 0,14625, 0, 0, 197, 0, 0, 0, 0, 0,
- 1339, 1339, 0, 0, -33, 0, 74, 8780,12875, 0,
- 8815, 9520, 0, 0, 0, 9, 0, 0, 0, 0,
- 74,19816,19578, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -109, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, -63, 0, -21,19291,
- -112, 0, 0, 0,14749, 0, 0,14749,14749, 0,
- 0, 1552,10787,10907, 0, 0, 1339, 0, 74, 0,
- 5, 9200, 0, 0,14749, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 7940, 7976, 0, 7524,
- 0, 7560, 0, 7144, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 3116, 5966, 0, 6120,
- 1968, 0, 0, 0, 3270, 6536, 3686, 0, 0, 0,
- 0, 318, 0, 0, 0, 0, 0, 0, 0, 1339,
- -41, 478, 0, 0, 0, 0, 74, 0, 0,17436,
- 0, 0, 0, 74, 74, 74, 74, 0, 0, 0,
- 855, 0, 0,14749, 0, 74, 0, 0, 334, 0,
- 0, 0, 0,18594, -41, 0, 0, 2122, 0,14749,
- 0, 0, 480, 570, 0,19291, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,10326, 0,
- 0, 3840, 0, 4256, 0, 4410, 0, 0, 1339, 4826,
- 0, 2538, 0, 0, 0, 487, 0, 0, -41, 1339,
- 0, 0, 0, 440, 0, 0, 0,19935, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 334, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 331, 487, 0, 0, 0,
- 0, 487, -14, -14, 0, 576, 0, -112, 0, 0,
-11248,11368,14749, 0, 0, 0, 0, 0, 0, 0,
- 478, 0, 0, 0, 197, -42, 0, 0, 0, 0,
- 0, 182, 0, 0, 478, 74, 0, 74, 478,14749,
- 74, 0, 0, -22, 0, 0, 0, 0, 0, 500,
- 0, 0,19697, 0, 0, -112, 0, 0, 0, 0,
- 0, 0, 478, 0, 0, 0, 0, 487, 0, 0,
- 0, 0, -109, -56, 0, 0, 0, 0, 0, 0,
- 0, 0, 487, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -41, 478, 0, 478, 0, 0, 0,
- 0, 0, 478, 0, 0, 0, 0, 0, 0, 0,
- 0, 1339, -41, 0, 0, 0, 334, 334, 0, 0,
- 478, 0, 0, 0, 0, 0, 0, 0, 478, 0,
+ 0, 0, 0, 0, 0, 0, 0, 661, 0, -38,
+ 8750,13540, 0, 8786, 0, 0, 950, 0, 0, 0,
+ 719, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 661, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 661, 661, 661,12932, 0, 0,
+13540, 145, 540, 0, 0, 44, 0, 0, 113, 0,
+ 0, 9287, 0, 7381, 8292, 7852, 7640, 7200, 0, 7164,
+ 7128, 0, 5394, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0,17584,17215, 0, 0, 0, 9017,
+ 0, 9053, 0, 0, 0, 0, 0, 0, 0, -37,
+ 0, 0, 23, 0, 451, 0, 661, 661, 0, 661,
+13540, 0, 0, 0, 0, 0, 661, 0, 0, 0,
+ -61, 152,11050, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0,18397, 0, 0,11395,13540, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1334, 36,
+ 0, 0, 0, 33, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9646, 0, 1371, 0, 0, 881, 1108,
+ 0, 661, 661, 0, 0, 0, 0, 0, 661, 0,
+ 0, 0, 0, 0, 0, 0, 661, 661, 661, 661,
+ 661, 661, 661, 145, 145, 661, 661, 661, 661, 661,
+ 661, 661, 661, 661, 661, 661, 661, 661, 661, 661,
+ 661, 661, 661, 661, 661, 0,12932, 0, 5552, 0,
+13060, 1498, 0, 3082, 5972, 0, 0, 0, 0, 145,
+ 145, 0, 0, 0, 0, 0, 0,13412, 0, 305,
+ 0, 0, 0, 0, 0, 0, 0, 661, 661, 0,
+ 0, 0, 145, 9086,15324, 0, 9254,11518, 0, 0,
+ -32, 0, 0, 0, 0, 145, 0, 0,13540, 145,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, -31, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -50, 0,19233, -73, -93,
+ 0, 0,13540, 0, 0,13540,13540, 1918, 0, 0,
+ 9991,10114, 661, 0, 145, 0, 679, 9323, 0, 0,
+13540, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 8157, 8234, 0, 7717, 0, 7775, 0, 7335,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3240, 6130, 0, 6550, 2076, 0, 0, 0,
+ 3660, 6708, 3818, 0, 0, 0, 0, 260, 0, 0,
+ 0, 0, 0, 0, 0, 4, 424, 0, 0, 661,
+ 0, 0, 145, 0, 0,17338, 0, 0, 0, 145,
+ 145, 145, 145, 0, 1347, 0, 0, 0, 0, 0,
+ 279, 0, 0, 0, 0,18520, 4, 0, 0, 2496,
+ 0,13540, 0, 0, 508, 0, 426,19233, 0, 0,
+ 0, 0, 0, 0, 0,10459,10582, 0,10927, 0,
+ 0, 4238, 0, 4396, 0, 4816, 0, 0, 661, 4974,
+ 0, 2662, 0, 0, 0, 0, 4, 661, 0, 0,
+ 0, 429, 0, 438, 0, 0, 0,19770, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 279,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 269, -18, -18, 0, 516, 0, -93, 429, 0, 0,
+ 0, 0, 429, 0, 0,13540, 0, 0, 0, 0,
+ 0, 424, 0, 0, 0, 0, 0, 305, -72, 0,
+ 0, 0, 152, 0, 0, 424, 145, 0, 145, 424,
+13540, 145, 0, 0, -67, 0, 0,19524, 0, 0,
+ 0, 0, 0, 0, 0, 433, -93, 0, 0, 0,
+ 0, 0, 424, 0, 0, 0, 0, 0, 429, 0,
+ 0, -31, -61, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 429, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 4, 424, 0, 424, 0, 0, 0, 0,
+ 0, 424, 0, 0, 0, 0, 0, 0, 0, 0,
+ 661, 4, 0, 0, 0, 279, 279, 0, 0, 424,
+ 0, 0, 0, 0, 0, 0, 0, 424, 0,
};
final static short yygindex[] = { 0,
- 1, 0, 255, -2, 0, -87, 162, 373, -131, 4,
- 0, -248, 34, 0, 337, 0, 0, 19, 119, 176,
- 372, 359, -106, 160, 151, 69, -55, 0, 112, 342,
- 201, 256, 340, 0, 0, 18, 0, 0, -211, -123,
- 248, -217, 17, 0, -86, 0, 386, 465, 175, -200,
- 170, 100, 0, 0, 45, 0, 0, 522, 0, -347,
- 323, 0, 0, 0, 183, -202, -501, 0, 0, -254,
- -299, -439, -104, 21, 0, 0, -258, 473, -244, 0,
- 0, 0, 0, 300, 0, -105, 0, 0, -90, 293,
- -214, 0, 8, -27, -499, 52, 0, 0, 39, -370,
- 283, 0, 118, 0, 0, 0, 0, -520, 0, -487,
- 161, 0, 6,
+ 1, 0, 222, 37, 0, -98, 80, 302, -137, -1,
+ 0, -250, -2, 0, 616, 0, 0, -118, 159, 188,
+ 307, 290, 532, 86, 179, 118, -75, 0, 122, 272,
+ 182, 374, 268, 0, 0, 189, 0, 0, -217, -126,
+ 570, 48, -168, 19, 0, -78, 0, 375, 385, 105,
+ -13, 107, 42, 0, 0, -19, 0, 0, 111, 0,
+ -351, 256, 0, 0, 0, 114, -207, -532, 0, 0,
+ -247, -439, -79, -24, 0, 0, -264, 413, -169, 0,
+ 0, 0, 0, 226, 0, -96, 0, 0, -97, 220,
+ -225, 0, -45, -443, -494, -3, 0, 0, -7, -408,
+ 216, 0, 51, 0, 0, 0, 0, -513, 0, -501,
+ 98, 0, -43,
};
-final static int YYTABLESIZE=20315;
+final static int YYTABLESIZE=20154;
//These two tables are not statically initialized, but rather
//initialized on first use, so that a failure to initialize them
@@ -675,7 +676,7 @@
yytable = (short[])obInp.readObject();
yycheck = (short[])obInp.readObject();
long hash = EYaccFixer.checkhash(yytable, yycheck);
- if (hash != -1945603369588693761L) {
+ if (hash != 878073795554571773L) {
throw new RuntimeException(rName + " bad checkhash: " +
hash);
}
@@ -685,7 +686,7 @@
}
final static short YYFINAL=3;
-final static short YYMAXTOKEN=416;
+final static short YYMAXTOKEN=420;
final static String yyname[] = {
"end-of-file",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,
@@ -705,25 +706,26 @@
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,"LiteralInteger","LiteralFloat64",
"LiteralChar","LiteralString","LiteralTwine","Identifier","VerbAss","QuasiOpen",
-"QuasiClose","URI","URIStart","BodyStartWord","BodyNextWord","VTableStartWord",
-"VTableNextWord","BIND","CATCH","CLASS","DEF","DELEGATE","ELSE","ESCAPE",
-"FINALLY","FOR","IF","IN","MATCH","META","PRAGMA","SWITCH","THUNK","TO","TRY",
-"VAR","WHEN","WHILE","DEFINE","ON","SELECT","TYPEDEF","ABSTRACT","AN","AS",
-"ATTRIBUTE","BE","BEGIN","BEHALF","BELIEF","BELIEVE","BELIEVES","CASE","CONST",
-"CONSTRUCTOR","CONTEXT","DECLARE","DEFAULT","DEFMACRO","DEPRECATED","DISPATCH",
-"DO","ENCAPSULATE","ENCAPSULATED","ENCAPSULATES","END","ENSURE","ENUM",
-"EVENTUAL","EVENTUALLY","EXPORT","EXTENDS","FACET","FORALL","FUNCTION","GIVEN",
-"HIDDEN","HIDES","IMPLEMENTS","INTERFACE","IS","KNOW","KNOWS","LAMBDA","LET",
-"METHOD","METHODS","MODULE","NAMESPACE","NATIVE","OBEYS","OCTET","ONEWAY",
-"PACKAGE","PRIVATE","PROTECTED","PUBLIC","RAISES","RELIANCE","RELIANT","RELIES",
-"RELY","REVEAL","SAKE","SIGNED","STATIC","STRUCT","SUCHTHAT","SUPPORTS",
-"SUSPECT","SUSPECTS","SYNCHRONIZED","THIS","THROWS","TRANSIENT","TRUNCATABLE",
-"UNSIGNED","UNUM","USES","USING","UTF8","UTF16","VALUETYPE","VIRTUAL",
-"VOLATILE","WSTRING","EOL","OpLAnd","OpLOr","OpSame","OpNSame","OpButNot",
-"OpLeq","OpABA","OpGeq","OpThru","OpTill","OpAsl","OpAsr","OpFlrDiv","OpMod",
-"OpPow","OpAss","OpAssAdd","OpAssAnd","OpAssAprxDiv","OpAssFlrDiv","OpAssAsl",
-"OpAssAsr","OpAssRemdr","OpAssMod","OpAssMul","OpAssOr","OpAssPow","OpAssSub",
-"OpAssXor","Send","OpWhen","MapsTo","MatchBind","MisMatch","Audit",
+"QuasiClose","DollarIdent","AtIdent","DollarOpen","AtOpen","URI","URIStart",
+"BodyStartWord","BodyNextWord","VTableStartWord","VTableNextWord","BIND",
+"CATCH","CLASS","DEF","DELEGATE","ELSE","ESCAPE","FINALLY","FOR","IF","IN",
+"MATCH","META","PRAGMA","SWITCH","THUNK","TO","TRY","VAR","WHEN","WHILE",
+"DEFINE","ON","SELECT","TYPEDEF","ABSTRACT","AN","AS","ATTRIBUTE","BE","BEGIN",
+"BEHALF","BELIEF","BELIEVE","BELIEVES","CASE","CONST","CONSTRUCTOR","CONTEXT",
+"DECLARE","DEFAULT","DEFMACRO","DEPRECATED","DISPATCH","DO","ENCAPSULATE",
+"ENCAPSULATED","ENCAPSULATES","END","ENSURE","ENUM","EVENTUAL","EVENTUALLY",
+"EXPORT","EXTENDS","FACET","FORALL","FUNCTION","GIVEN","HIDDEN","HIDES",
+"IMPLEMENTS","INTERFACE","IS","KNOW","KNOWS","LAMBDA","LET","METHOD","METHODS",
+"MODULE","NAMESPACE","NATIVE","OBEYS","OCTET","ONEWAY","PACKAGE","PRIVATE",
+"PROTECTED","PUBLIC","RAISES","RELIANCE","RELIANT","RELIES","RELY","REVEAL",
+"SAKE","SIGNED","STATIC","STRUCT","SUCHTHAT","SUPPORTS","SUSPECT","SUSPECTS",
+"SYNCHRONIZED","THIS","THROWS","TRANSIENT","TRUNCATABLE","UNSIGNED","UNUM",
+"USES","USING","UTF8","UTF16","VALUETYPE","VIRTUAL","VOLATILE","WSTRING","EOL",
+"OpLAnd","OpLOr","OpSame","OpNSame","OpButNot","OpLeq","OpABA","OpGeq","OpThru",
+"OpTill","OpAsl","OpAsr","OpFlrDiv","OpMod","OpPow","OpAss","OpAssAdd",
+"OpAssAnd","OpAssAprxDiv","OpAssFlrDiv","OpAssAsl","OpAssAsr","OpAssRemdr",
+"OpAssMod","OpAssMul","OpAssOr","OpAssPow","OpAssSub","OpAssXor","Send",
+"OpWhen","MapsTo","MatchBind","MisMatch","Audit",
};
final static String yyrule[] = {
"$accept : start",
@@ -743,7 +745,7 @@
"seq : assigns ';'",
"assigns : assign",
"assigns : assigns ';' assign",
-"assigns : define ident",
+"assigns : define noun",
"nAssign : assign",
"nAssign : plural",
"assign : cond",
@@ -804,7 +806,7 @@
"prefix : '!' prim",
"prefix : '~' prim",
"prefix : '-' prim",
-"prefix : '&' ident",
+"prefix : '&' noun",
"postfix : call",
"postfix : metaExpr",
"postfix : postfix '[' argList ']'",
@@ -828,7 +830,7 @@
"prim : LiteralChar",
"prim : LiteralString",
"prim : LiteralTwine",
-"prim : noun",
+"prim : nounExpr",
"prim : URI",
"prim : URIStart add '>'",
"prim : quasiParser quasiExpr",
@@ -844,10 +846,10 @@
"prim : whenExpr",
"prim : ifExpr",
"prim : macro",
-"prim : '$' '{' LiteralInteger '}'",
+"prim : DollarOpen LiteralInteger '}'",
"prim : '$' LiteralInteger",
"prim : '$' '$'",
-"prim : '@' '{' LiteralInteger '}'",
+"prim : AtOpen LiteralInteger '}'",
"prim : '@' LiteralInteger",
"prim : SELECT parenExpr caseList",
"prim : TYPEDEF oType",
@@ -858,7 +860,7 @@
"object : CLASS classHead body",
"object : begin '_' funcHead body",
"object : begin '_' body",
-"noun : ident",
+"nounExpr : noun",
"parenExpr : '(' eExpr ')'",
"ifExpr : begin IF parenExpr body",
"ifExpr : begin IF parenExpr body ELSE ifExpr",
@@ -880,9 +882,8 @@
"quasiExpr : innerExprs QuasiClose",
"innerExprs : QuasiOpen innerExpr",
"innerExprs : innerExprs QuasiOpen innerExpr",
-"innerExpr : '$' quasiAgain ident",
-"innerExpr : '$' '{' eExpr quasiAgain '}'",
-"quasiAgain :",
+"innerExpr : DollarIdent",
+"innerExpr : DollarOpen eExpr '}'",
"patternList : emptyBr",
"patternList : patterns br",
"patterns : pattern",
@@ -912,37 +913,37 @@
"innerThings : innerThings QuasiOpen innerThing",
"innerThing : innerExpr",
"innerThing : innerPattern",
-"innerPattern : '@' quasiAgain ident",
-"innerPattern : '@' quasiAgain '_'",
-"innerPattern : '@' '{' pattern quasiAgain '}'",
-"namer : ident ':' order",
-"namer : ident",
-"namer : '&' ident",
+"innerPattern : AtIdent",
+"innerPattern : AtOpen pattern '}'",
+"namer : noun ':' order",
+"namer : noun",
+"namer : '&' noun",
"namer : '_'",
+"namer : '_' ':' order",
"namer : binder",
"namer : varNamer",
-"namer : '$' '{' LiteralInteger '}'",
-"namer : '@' '{' LiteralInteger '}'",
-"binder : BIND ident ':' order",
-"binder : BIND ident",
-"varNamer : VAR ident ':' order",
-"varNamer : VAR ident",
-"oName : ident",
+"namer : DollarOpen LiteralInteger '}'",
+"namer : AtOpen LiteralInteger '}'",
+"binder : BIND noun ':' order",
+"binder : BIND noun",
+"varNamer : VAR noun ':' order",
+"varNamer : VAR noun",
+"oName : noun",
"oName : '_'",
-"oName : BIND ident",
-"oName : VAR ident",
-"oName : '$' '{' LiteralInteger '}'",
-"oName : '@' '{' LiteralInteger '}'",
+"oName : BIND noun",
+"oName : VAR noun",
+"oName : DollarOpen LiteralInteger '}'",
+"oName : AtOpen LiteralInteger '}'",
"oName : litString",
"defName : define oName",
-"defName : BIND ident",
-"defName : VAR ident",
+"defName : BIND noun",
+"defName : VAR noun",
"audits : oName",
-"audits : oName Audit nouns",
+"audits : oName Audit nounExprs",
"defAudits : defName",
-"defAudits : defName Audit nouns",
-"nouns : noun",
-"nouns : nouns ',' br noun",
+"defAudits : defName Audit nounExprs",
+"nounExprs : nounExpr",
+"nounExprs : nounExprs ',' br nounExpr",
"plural : '(' ')'",
"plural : '(' eExpr ',' args ')'",
"litString : LiteralString",
@@ -984,8 +985,9 @@
"maps : map",
"maps : maps ',' map",
"map : eExpr MapsTo eExpr",
-"map : MapsTo noun",
+"map : MapsTo nounExpr",
"verb : ident",
+"noun : ident",
"ident : Identifier",
"ident : reserved",
"assignop : OpAssAdd",
@@ -1035,10 +1037,10 @@
"pTypeList : br pTypes br",
"pTypes : pType",
"pTypes : pTypes ',' br pType",
-"pType : ident optType",
+"pType : noun optType",
"pType : '_' optType",
"optType :",
-"optType : ':' noun",
+"optType : ':' nounExpr",
"metaoid : META",
"metaoid : PRAGMA",
"begin :",
@@ -1129,7 +1131,7 @@
"reserved : WSTRING",
};
-//#line 1171 "e.y"
+//#line 1181 "e.y"
/**
*
@@ -1305,7 +1307,7 @@
} catch (IOException ex) {
yyerror("io: " + ex);
}
- yytext = token.token();
+ yytext = token.getText();
yylval = token;
return token.tokenType();
}
@@ -1375,6 +1377,10 @@
TheTokens[VerbAss] = "verb-assign";
TheTokens[QuasiOpen] = "quasi-open";
TheTokens[QuasiClose] = "quasi-close";
+ TheTokens[DollarIdent] = "dollar-identifier-hole";
+ TheTokens[AtIdent] = "at-identifier-hole";
+ TheTokens[DollarOpen] = "dollar-open-hole";
+ TheTokens[AtOpen] = "at-open-hole";
TheTokens[URI] = "uniform-resource-identifier";
TheTokens[URIStart] = "uri-protocol-with-colon";
TheTokens[BodyStartWord] = "body-start-word";
@@ -1647,7 +1653,7 @@
static public boolean isContinuer(int tokenType) {
return TheContinuers[tokenType];
}
-//#line 5636 "EParser.java"
+//#line 5610 "EParser.java"
//###############################################################
// method: yylexdebug : check lexer state
//###############################################################
@@ -1794,1027 +1800,1027 @@
{
//########## USER-SUPPLIED ACTIONS ##########
case 1:
-//#line 149 "e.y"
+//#line 153 "e.y"
{ myEscape.run(null); }
break;
case 2:
-//#line 150 "e.y"
+//#line 154 "e.y"
{ myEscape.run(val_peek(0)); }
break;
case 3:
-//#line 152 "e.y"
+//#line 156 "e.y"
{ myEscape.run(val_peek(0)); }
break;
case 5:
-//#line 160 "e.y"
+//#line 164 "e.y"
{ pocket("define"); }
break;
case 6:
-//#line 169 "e.y"
+//#line 173 "e.y"
{ yyval = val_peek(1); }
break;
case 7:
-//#line 173 "e.y"
+//#line 177 "e.y"
{ yyval = val_peek(1); }
break;
case 9:
-//#line 184 "e.y"
+//#line 188 "e.y"
{ yyval = sequence(val_peek(2), val_peek(0)); }
break;
case 11:
-//#line 189 "e.y"
+//#line 193 "e.y"
{ yyval = sequence(val_peek(2), val_peek(0)); }
break;
case 12:
-//#line 197 "e.y"
+//#line 201 "e.y"
{ yyval = oneExpr(val_peek(0)); }
break;
case 16:
-//#line 212 "e.y"
+//#line 216 "e.y"
{ yyval = sequence(val_peek(2), val_peek(0)); }
break;
case 17:
-//#line 213 "e.y"
+//#line 217 "e.y"
{ yyval = forward(val_peek(0)); }
break;
case 18:
-//#line 228 "e.y"
+//#line 232 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 21:
-//#line 233 "e.y"
+//#line 237 "e.y"
{ yyval = assign(val_peek(2), val_peek(0)); }
break;
case 22:
-//#line 234 "e.y"
+//#line 238 "e.y"
{ yyval = update(val_peek(2), val_peek(1), val_peek(0)); }
break;
case 23:
-//#line 235 "e.y"
+//#line 239 "e.y"
{ yyval = assAsr(val_peek(2), val_peek(0)); }
break;
case 24:
-//#line 236 "e.y"
+//#line 240 "e.y"
{ yyval = update(val_peek(2), val_peek(1), val_peek(0)); }
break;
case 25:
-//#line 238 "e.y"
+//#line 242 "e.y"
{ yyval = define(val_peek(2), val_peek(0)); }
break;
case 26:
-//#line 239 "e.y"
+//#line 243 "e.y"
{ yyval = define(val_peek(2), val_peek(0)); }
break;
case 27:
-//#line 240 "e.y"
+//#line 244 "e.y"
{ yyval = define(val_peek(2), val_peek(0)); }
break;
case 29:
-//#line 249 "e.y"
+//#line 253 "e.y"
{ yyval = condOr(val_peek(2), val_peek(0)); }
break;
case 31:
-//#line 258 "e.y"
+//#line 262 "e.y"
{ yyval = condAnd(val_peek(2), val_peek(0)); }
break;
case 33:
-//#line 267 "e.y"
+//#line 271 "e.y"
{ yyval = same(val_peek(2), val_peek(0)); }
break;
case 34:
-//#line 268 "e.y"
+//#line 272 "e.y"
{ yyval = not(same(val_peek(2), val_peek(0))); }
break;
case 35:
-//#line 269 "e.y"
+//#line 273 "e.y"
{ yyval = call(val_peek(2), "and", val_peek(0)); }
break;
case 36:
-//#line 270 "e.y"
+//#line 274 "e.y"
{ yyval = call(val_peek(2), "or", val_peek(0)); }
break;
case 37:
-//#line 271 "e.y"
+//#line 275 "e.y"
{ yyval = call(val_peek(2), "xor", val_peek(0)); }
break;
case 38:
-//#line 272 "e.y"
+//#line 276 "e.y"
{ yyval = call(val_peek(2), "butNot", val_peek(0)); }
break;
case 39:
-//#line 274 "e.y"
+//#line 278 "e.y"
{ yyval = matchBind(val_peek(2), val_peek(0)); }
break;
case 40:
-//#line 275 "e.y"
+//#line 279 "e.y"
{ yyval = not(matchBind(val_peek(2), val_peek(0))); }
break;
case 41:
-//#line 287 "e.y"
+//#line 291 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 44:
-//#line 292 "e.y"
+//#line 296 "e.y"
{ yyval = lessThan(val_peek(2), val_peek(0)); }
break;
case 45:
-//#line 293 "e.y"
+//#line 297 "e.y"
{ yyval = leq(val_peek(2), val_peek(0)); }
break;
case 46:
-//#line 294 "e.y"
+//#line 298 "e.y"
{ yyval = asBigAs(val_peek(2), val_peek(0)); }
break;
case 47:
-//#line 295 "e.y"
+//#line 299 "e.y"
{ yyval = geq(val_peek(2), val_peek(0)); }
break;
case 48:
-//#line 296 "e.y"
+//#line 300 "e.y"
{ yyval = greaterThan(val_peek(2), val_peek(0)); }
break;
case 50:
-//#line 305 "e.y"
+//#line 309 "e.y"
{ yyval = thru(val_peek(2), val_peek(0)); }
break;
case 51:
-//#line 306 "e.y"
+//#line 310 "e.y"
{ yyval = till(val_peek(2), val_peek(0)); }
break;
case 53:
-//#line 315 "e.y"
+//#line 319 "e.y"
{ yyval = call(val_peek(2), "shiftLeft", val_peek(0)); }
break;
case 54:
-//#line 316 "e.y"
+//#line 320 "e.y"
{ yyval = call(val_peek(2), "shiftLeft",
list(call(val_peek(0), "negate", list())));
}
break;
case 55:
-//#line 326 "e.y"
+//#line 330 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 58:
-//#line 331 "e.y"
+//#line 335 "e.y"
{ yyval = call(val_peek(2), "add", val_peek(0)); }
break;
case 59:
-//#line 332 "e.y"
+//#line 336 "e.y"
{ yyval = call(val_peek(2), "subtract", val_peek(0)); }
break;
case 60:
-//#line 340 "e.y"
+//#line 344 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 63:
-//#line 345 "e.y"
+//#line 349 "e.y"
{ yyval = call(val_peek(2), "multiply", val_peek(0)); }
break;
case 64:
-//#line 346 "e.y"
+//#line 350 "e.y"
{ yyval = call(val_peek(2), "approxDivide", val_peek(0)); }
break;
case 65:
-//#line 347 "e.y"
+//#line 351 "e.y"
{ yyval = call(val_peek(2), "floorDivide", val_peek(0)); }
break;
case 66:
-//#line 348 "e.y"
+//#line 352 "e.y"
{ yyval = call(val_peek(2), "remainder", val_peek(0)); }
break;
case 67:
-//#line 349 "e.y"
+//#line 353 "e.y"
{ yyval = mod(val_peek(2), val_peek(0)); }
break;
case 68:
-//#line 357 "e.y"
+//#line 361 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 71:
-//#line 362 "e.y"
+//#line 366 "e.y"
{ yyval = call(val_peek(2), "pow", val_peek(0)); }
break;
case 72:
-//#line 371 "e.y"
+//#line 375 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 75:
-//#line 376 "e.y"
+//#line 380 "e.y"
{ yyval = call(val_peek(0), "not", list()); }
break;
case 76:
-//#line 377 "e.y"
+//#line 381 "e.y"
{ yyval = call(val_peek(0), "complement", list());}
break;
case 77:
-//#line 378 "e.y"
+//#line 382 "e.y"
{ yyval = call(val_peek(0), "negate", list()); }
break;
case 78:
-//#line 379 "e.y"
+//#line 383 "e.y"
{ yyval = slotExpr(val_peek(0)); }
break;
case 81:
-//#line 391 "e.y"
+//#line 395 "e.y"
{ yyval = call(val_peek(3), "get", val_peek(1)); }
break;
case 82:
-//#line 392 "e.y"
+//#line 396 "e.y"
{ yyval = send(val_peek(3), val_peek(1), val_peek(0)); }
break;
case 83:
-//#line 393 "e.y"
+//#line 397 "e.y"
{ yyval = send(val_peek(2), "run", val_peek(0)); }
break;
case 84:
-//#line 395 "e.y"
+//#line 399 "e.y"
{ pocket("no-paren-call");
yyval = send(val_peek(2), val_peek(0), list()); }
break;
case 85:
-//#line 397 "e.y"
+//#line 401 "e.y"
{ pocket("no-paren-call");
yyval = call(val_peek(1), val_peek(0), list()); }
break;
case 86:
-//#line 399 "e.y"
+//#line 403 "e.y"
{ pocket("dot-props");
yyval = property(val_peek(2), val_peek(0), list()); }
break;
case 87:
-//#line 401 "e.y"
+//#line 405 "e.y"
{ pocket("dot-props");
yyval = property(val_peek(3), val_peek(1), val_peek(0)); }
break;
case 88:
-//#line 409 "e.y"
+//#line 413 "e.y"
{ yyval = doMeta(val_peek(1), "run", val_peek(0)); }
break;
case 89:
-//#line 410 "e.y"
+//#line 414 "e.y"
{ yyval = doMeta(val_peek(2), val_peek(1), val_peek(0)); }
break;
case 90:
-//#line 411 "e.y"
+//#line 415 "e.y"
{ yyval = doMetaSend(val_peek(2), "run", val_peek(0)); }
break;
case 91:
-//#line 412 "e.y"
+//#line 416 "e.y"
{ yyval = doMetaSend(val_peek(3), val_peek(1), val_peek(0)); }
break;
case 92:
-//#line 414 "e.y"
+//#line 418 "e.y"
{ pocket("no-paren-call");
yyval = doMeta(val_peek(1), val_peek(0), list()); }
break;
case 93:
-//#line 416 "e.y"
+//#line 420 "e.y"
{ pocket("no-paren-call");
yyval = doMetaSend(val_peek(2), val_peek(0), list()); }
break;
case 95:
-//#line 430 "e.y"
+//#line 434 "e.y"
{ yyval = call(val_peek(1), "run", val_peek(0)); }
break;
case 96:
-//#line 431 "e.y"
+//#line 435 "e.y"
{ yyval = call(val_peek(2), val_peek(1), val_peek(0)); }
break;
case 97:
-//#line 439 "e.y"
+//#line 443 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 98:
-//#line 440 "e.y"
+//#line 444 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 99:
-//#line 441 "e.y"
+//#line 445 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 100:
-//#line 442 "e.y"
+//#line 446 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 101:
-//#line 443 "e.y"
+//#line 447 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 103:
-//#line 447 "e.y"
+//#line 451 "e.y"
{ yyval = uriExpr(val_peek(0)); }
break;
case 104:
-//#line 448 "e.y"
+//#line 452 "e.y"
{ yyval = uriExpr(val_peek(2),val_peek(1)); }
break;
case 105:
-//#line 450 "e.y"
+//#line 454 "e.y"
{ yyval = quasiExpr(val_peek(1),val_peek(0)); }
break;
case 107:
-//#line 453 "e.y"
+//#line 457 "e.y"
{ yyval = tuple(val_peek(1)); }
break;
case 108:
-//#line 454 "e.y"
+//#line 458 "e.y"
{ yyval = map(val_peek(1)); }
break;
case 109:
-//#line 456 "e.y"
+//#line 460 "e.y"
{ yyval = hide(val_peek(0)); }
break;
case 110:
-//#line 458 "e.y"
+//#line 462 "e.y"
{ yyval = escape(val_peek(1),val_peek(0)); }
break;
case 111:
-//#line 460 "e.y"
+//#line 464 "e.y"
{ yyval = whilex(val_peek(1),val_peek(0)); }
break;
case 112:
-//#line 462 "e.y"
+//#line 466 "e.y"
{ yyval = switchx(val_peek(2),val_peek(1)); }
break;
case 113:
-//#line 464 "e.y"
+//#line 468 "e.y"
{ yyval = tryx(val_peek(2),val_peek(1),val_peek(0)); }
break;
case 118:
-//#line 472 "e.y"
+//#line 476 "e.y"
{ yyval = quasiLiteralExpr(val_peek(1)); }
break;
case 119:
-//#line 473 "e.y"
+//#line 477 "e.y"
{ yyval = quasiLiteralExpr(val_peek(0)); }
break;
case 120:
-//#line 474 "e.y"
+//#line 478 "e.y"
{ yyval = quasiLiteralExpr(); }
break;
case 121:
-//#line 475 "e.y"
+//#line 479 "e.y"
{ yyval = quasiPatternExpr(val_peek(1)); }
break;
case 122:
-//#line 476 "e.y"
+//#line 480 "e.y"
{ yyval = quasiPatternExpr(val_peek(0)); }
break;
case 123:
-//#line 479 "e.y"
+//#line 483 "e.y"
{ reserved("select"); }
break;
case 124:
-//#line 480 "e.y"
+//#line 484 "e.y"
{ pocket("typedef");
yyval = val_peek(0); }
break;
case 126:
-//#line 489 "e.y"
+//#line 493 "e.y"
{ yyval = object(val_peek(1), val_peek(0)); }
break;
case 127:
-//#line 490 "e.y"
+//#line 494 "e.y"
{ yyval = methObject(val_peek(3),val_peek(1),val_peek(0)); }
break;
case 128:
-//#line 491 "e.y"
+//#line 495 "e.y"
{ yyval = thunk(val_peek(0)); }
break;
case 129:
-//#line 493 "e.y"
+//#line 497 "e.y"
{ yyval = classExpr(val_peek(1),val_peek(0)); }
break;
case 130:
-//#line 495 "e.y"
+//#line 499 "e.y"
{ pocket("anon-lambda");
- yyval = methObject(audits(ignore(),
- list()),
- val_peek(1),
- val_peek(0)); }
+ yyval = methObject(audits(ignore(),
+ list()),
+ val_peek(1),
+ val_peek(0)); }
break;
case 131:
-//#line 500 "e.y"
+//#line 504 "e.y"
{ pocket("anon-lambda");
- yyval = thunk(val_peek(0)); }
+ yyval = thunk(val_peek(0)); }
break;
case 132:
-//#line 508 "e.y"
+//#line 512 "e.y"
{ yyval = noun(val_peek(0)); }
break;
case 133:
-//#line 517 "e.y"
+//#line 521 "e.y"
{ yyval = val_peek(1); }
break;
case 134:
-//#line 526 "e.y"
+//#line 530 "e.y"
{ yyval = ifx(val_peek(1), val_peek(0)); }
break;
case 135:
-//#line 527 "e.y"
+//#line 531 "e.y"
{ yyval = ifx(val_peek(3), val_peek(2), val_peek(0)); }
break;
case 136:
-//#line 528 "e.y"
+//#line 532 "e.y"
{ yyval = ifx(val_peek(4), val_peek(3), val_peek(0)); }
break;
case 137:
-//#line 536 "e.y"
+//#line 540 "e.y"
{ yyval = forx(val_peek(5),val_peek(3),val_peek(1)); }
break;
case 138:
-//#line 544 "e.y"
+//#line 548 "e.y"
{ yyval = when(val_peek(3),val_peek(2),val_peek(1),val_peek(0)); }
break;
case 139:
-//#line 554 "e.y"
+//#line 558 "e.y"
{ yyval = macro(val_peek(4), val_peek(2), val_peek(1), val_peek(0)); }
break;
case 140:
-//#line 556 "e.y"
+//#line 560 "e.y"
{ yyval = macro(val_peek(5), val_peek(3), val_peek(2), val_peek(0)); }
break;
case 141:
-//#line 560 "e.y"
+//#line 564 "e.y"
{ yyval = null; }
break;
case 142:
-//#line 562 "e.y"
+//#line 566 "e.y"
{ yyval = macro(val_peek(5), val_peek(3), val_peek(2), val_peek(1)); }
break;
case 143:
-//#line 564 "e.y"
+//#line 568 "e.y"
{ yyval = macro(val_peek(5), val_peek(3), val_peek(2), val_peek(0)); }
break;
case 144:
-//#line 572 "e.y"
+//#line 576 "e.y"
{ yyval = null; }
break;
case 147:
-//#line 579 "e.y"
+//#line 583 "e.y"
{ yyval = noun("simple__quasiParser"); }
break;
case 148:
-//#line 580 "e.y"
+//#line 584 "e.y"
{ yyval = noun(val_peek(0) + "__quasiParser"); }
break;
case 149:
-//#line 581 "e.y"
+//#line 585 "e.y"
{ yyval = val_peek(1); }
break;
case 150:
-//#line 585 "e.y"
+//#line 589 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 151:
-//#line 586 "e.y"
+//#line 590 "e.y"
{ yyval = with(val_peek(1), val_peek(0)); }
break;
case 152:
-//#line 590 "e.y"
+//#line 594 "e.y"
{ yyval = list(val_peek(1), val_peek(0)); }
break;
case 153:
-//#line 591 "e.y"
+//#line 595 "e.y"
{ yyval = with(with(val_peek(2), val_peek(1)), val_peek(0)); }
break;
case 154:
-//#line 595 "e.y"
-{ yyval = noun(val_peek(0)); }
+//#line 599 "e.y"
+{ yyval = dollarNoun(val_peek(0)); }
break;
case 155:
-//#line 596 "e.y"
-{ yyval = val_peek(2); }
-break;
-case 156:
//#line 600 "e.y"
-{ myLexer.quasiAgain(); }
+{ yyval = val_peek(1); }
break;
-case 159:
-//#line 617 "e.y"
+case 158:
+//#line 618 "e.y"
{ yyval = list(val_peek(0)); }
break;
-case 160:
-//#line 618 "e.y"
+case 159:
+//#line 619 "e.y"
{ yyval = with(val_peek(3), val_peek(0)); }
break;
-case 162:
-//#line 628 "e.y"
+case 161:
+//#line 629 "e.y"
{ yyval = list(val_peek(0)); }
break;
-case 163:
-//#line 629 "e.y"
+case 162:
+//#line 630 "e.y"
{ yyval = with(val_peek(3), val_peek(0)); }
break;
-case 164:
-//#line 636 "e.y"
+case 163:
+//#line 637 "e.y"
{ yyval = new Assoc(ignore(), val_peek(0)); }
break;
-case 166:
-//#line 641 "e.y"
+case 165:
+//#line 642 "e.y"
{ yyval = new Assoc(val_peek(2), val_peek(0)); }
break;
-case 167:
-//#line 642 "e.y"
+case 166:
+//#line 643 "e.y"
{ reserved("var-extract-pattern"); }
break;
-case 169:
-//#line 647 "e.y"
+case 168:
+//#line 648 "e.y"
{ yyval = suchThat(val_peek(2), val_peek(0)); }
break;
-case 170:
-//#line 649 "e.y"
+case 169:
+//#line 650 "e.y"
{ reserved("meta pattern"); }
break;
-case 172:
-//#line 654 "e.y"
+case 171:
+//#line 655 "e.y"
{ yyval = listPattern(val_peek(1)); }
break;
-case 173:
-//#line 655 "e.y"
+case 172:
+//#line 656 "e.y"
{ yyval = cdrPattern(val_peek(3), val_peek(0)); }
break;
-case 174:
-//#line 657 "e.y"
+case 173:
+//#line 658 "e.y"
{ reserved("map pattern"); }
break;
-case 175:
-//#line 658 "e.y"
+case 174:
+//#line 659 "e.y"
{ reserved("map pattern"); }
break;
-case 177:
-//#line 663 "e.y"
+case 176:
+//#line 664 "e.y"
{ yyval = patternEquals(val_peek(0)); }
break;
-case 179:
-//#line 668 "e.y"
+case 178:
+//#line 669 "e.y"
{ yyval = quasiPattern(val_peek(1), val_peek(0)); }
break;
-case 180:
-//#line 672 "e.y"
+case 179:
+//#line 673 "e.y"
{ yyval = list(val_peek(0)); }
break;
-case 181:
-//#line 673 "e.y"
+case 180:
+//#line 674 "e.y"
{ yyval = with(val_peek(1), val_peek(0)); }
break;
-case 182:
-//#line 677 "e.y"
-{ yyval = list(val_peek(1), val_peek(0)); }
-break;
-case 183:
+case 181:
//#line 678 "e.y"
-{ yyval = with(with(val_peek(2), val_peek(1)), val_peek(0)); }
+{ yyval = list(val_peek(1), val_peek(0)); }
break;
-case 186:
-//#line 687 "e.y"
-{ yyval = finalPattern(val_peek(0)); }
+case 182:
+//#line 679 "e.y"
+{ yyval = with(with(val_peek(2), val_peek(1)), val_peek(0));}
break;
-case 187:
+case 185:
//#line 688 "e.y"
-{ yyval = ignore(); }
+{ yyval = atNoun(val_peek(0)); }
break;
-case 188:
+case 186:
//#line 689 "e.y"
-{ yyval = val_peek(2); }
+{ yyval = val_peek(1); }
break;
-case 189:
+case 187:
//#line 702 "e.y"
{ yyval = finalPattern(val_peek(2), val_peek(0)); }
break;
-case 190:
+case 188:
//#line 703 "e.y"
{ yyval = finalPattern(val_peek(0)); }
break;
-case 191:
+case 189:
//#line 704 "e.y"
{ yyval = slotDefiner(val_peek(0)); }
break;
-case 192:
+case 190:
//#line 705 "e.y"
{ yyval = ignore(); }
break;
-case 195:
-//#line 709 "e.y"
-{ yyval = quasiLiteralPatt(val_peek(1)); }
+case 191:
+//#line 706 "e.y"
+{ reserved("anon guard"); }
break;
-case 196:
+case 194:
//#line 710 "e.y"
+{ yyval = quasiLiteralPatt(val_peek(1)); }
+break;
+case 195:
+//#line 711 "e.y"
{ yyval = quasiPatternPatt(val_peek(1)); }
break;
-case 197:
-//#line 714 "e.y"
+case 196:
+//#line 715 "e.y"
{ yyval = bindDefiner(val_peek(2), val_peek(0)); }
break;
-case 198:
-//#line 715 "e.y"
+case 197:
+//#line 716 "e.y"
{ yyval = bindDefiner(val_peek(0)); }
break;
-case 199:
-//#line 719 "e.y"
+case 198:
+//#line 720 "e.y"
{ yyval = varPattern(val_peek(2), val_peek(0)); }
break;
-case 200:
-//#line 720 "e.y"
+case 199:
+//#line 721 "e.y"
{ yyval = varPattern(val_peek(0)); }
break;
-case 201:
-//#line 729 "e.y"
+case 200:
+//#line 730 "e.y"
{ yyval = finalPattern(val_peek(0)); }
break;
-case 202:
-//#line 730 "e.y"
+case 201:
+//#line 731 "e.y"
{ yyval = ignore(); }
break;
-case 203:
-//#line 731 "e.y"
+case 202:
+//#line 732 "e.y"
{ yyval = bindDefiner(val_peek(0)); }
break;
-case 204:
-//#line 732 "e.y"
+case 203:
+//#line 733 "e.y"
{ yyval = varPattern(val_peek(0)); }
break;
-case 205:
-//#line 733 "e.y"
+case 204:
+//#line 734 "e.y"
{ yyval = quasiLiteralPatt(val_peek(1)); }
break;
-case 206:
-//#line 734 "e.y"
+case 205:
+//#line 735 "e.y"
{ yyval = quasiPatternPatt(val_peek(1)); }
break;
-case 208:
-//#line 751 "e.y"
+case 207:
+//#line 752 "e.y"
{ yyval = val_peek(0); }
break;
-case 209:
-//#line 752 "e.y"
+case 208:
+//#line 753 "e.y"
{ yyval = bindDefiner(val_peek(0)); }
break;
-case 210:
-//#line 753 "e.y"
+case 209:
+//#line 754 "e.y"
{ yyval = varPattern(val_peek(0)); }
break;
-case 211:
-//#line 760 "e.y"
+case 210:
+//#line 761 "e.y"
{ yyval = audits(val_peek(0), list()); }
break;
-case 212:
-//#line 761 "e.y"
+case 211:
+//#line 762 "e.y"
{ pocket("auditors");
yyval = audits(val_peek(2), val_peek(0)); }
break;
-case 213:
-//#line 769 "e.y"
+case 212:
+//#line 770 "e.y"
{ yyval = audits(val_peek(0), list()); }
break;
-case 214:
-//#line 770 "e.y"
+case 213:
+//#line 771 "e.y"
{ pocket("auditors");
yyval = audits(val_peek(2), val_peek(0)); }
break;
-case 215:
-//#line 775 "e.y"
+case 214:
+//#line 776 "e.y"
{ yyval = list(val_peek(0)); }
break;
-case 216:
-//#line 776 "e.y"
+case 215:
+//#line 777 "e.y"
{ yyval = with(val_peek(3), val_peek(0)); }
break;
-case 217:
-//#line 788 "e.y"
+case 216:
+//#line 789 "e.y"
{ yyval = list(); }
break;
-case 218:
-//#line 789 "e.y"
+case 217:
+//#line 790 "e.y"
{ yyval = append(list(val_peek(3)),val_peek(1)); }
break;
-case 221:
-//#line 803 "e.y"
+case 220:
+//#line 804 "e.y"
{ yyval = method(val_peek(1), val_peek(0)); }
break;
-case 222:
-//#line 805 "e.y"
+case 221:
+//#line 806 "e.y"
{ reserved("fields"); }
break;
-case 223:
-//#line 806 "e.y"
+case 222:
+//#line 807 "e.y"
{ reserved("on event"); }
break;
-case 224:
-//#line 807 "e.y"
+case 223:
+//#line 808 "e.y"
{ reserved("sealed meta"); }
break;
-case 225:
-//#line 808 "e.y"
+case 224:
+//#line 809 "e.y"
{ reserved("sealed meta"); }
break;
-case 226:
-//#line 816 "e.y"
+case 225:
+//#line 817 "e.y"
{ yyval = methHead("run", val_peek(2), val_peek(0)); }
break;
-case 227:
-//#line 817 "e.y"
+case 226:
+//#line 818 "e.y"
{ yyval = methHead(val_peek(4), val_peek(2), val_peek(0)); }
break;
-case 228:
-//#line 819 "e.y"
+case 227:
+//#line 820 "e.y"
{ pocket("no-paren-method");
yyval = methHead(val_peek(1), list(), val_peek(0)); }
break;
-case 229:
-//#line 828 "e.y"
+case 228:
+//#line 829 "e.y"
{ yyval = methHead("run", val_peek(2), val_peek(0)); }
break;
-case 230:
-//#line 830 "e.y"
+case 229:
+//#line 831 "e.y"
{ pocket("one-method-object");
yyval = methHead(val_peek(4), val_peek(2), val_peek(0)); }
break;
-case 231:
-//#line 832 "e.y"
+case 230:
+//#line 833 "e.y"
{ pocket("no-paren-method");
yyval = methHead(val_peek(1), list(), val_peek(0)); }
break;
-case 232:
-//#line 841 "e.y"
+case 231:
+//#line 842 "e.y"
{ yyval = list(val_peek(5), val_peek(2), val_peek(0)); }
break;
-case 233:
-//#line 851 "e.y"
+case 232:
+//#line 852 "e.y"
{ yyval = matcher(val_peek(1), val_peek(0)); }
break;
-case 234:
-//#line 860 "e.y"
+case 233:
+//#line 861 "e.y"
{ yyval = delegatex(val_peek(0)); }
break;
-case 235:
-//#line 867 "e.y"
+case 234:
+//#line 868 "e.y"
{ yyval = VOID; }
break;
-case 236:
-//#line 868 "e.y"
+case 235:
+//#line 869 "e.y"
{ yyval = val_peek(0); }
break;
-case 237:
-//#line 872 "e.y"
+case 236:
+//#line 873 "e.y"
{ yyval = val_peek(1); }
break;
-case 238:
-//#line 881 "e.y"
+case 237:
+//#line 882 "e.y"
{ yyval = list(val_peek(7), val_peek(5), val_peek(2), val_peek(0)); }
break;
-case 239:
-//#line 884 "e.y"
+case 238:
+//#line 885 "e.y"
{ pocket("when-clauses");
yyval = list(val_peek(5), val_peek(2), val_peek(0)); }
break;
-case 240:
-//#line 889 "e.y"
+case 239:
+//#line 890 "e.y"
{ yyval = list(val_peek(0)); }
break;
-case 241:
-//#line 890 "e.y"
+case 240:
+//#line 891 "e.y"
{ yyval = with(val_peek(2), val_peek(0)); }
break;
-case 242:
-//#line 894 "e.y"
+case 241:
+//#line 895 "e.y"
{ list(val_peek(2), val_peek(0)); }
break;
-case 247:
-//#line 912 "e.y"
+case 246:
+//#line 913 "e.y"
{ yyval = list(); }
break;
-case 248:
-//#line 916 "e.y"
+case 247:
+//#line 917 "e.y"
{ yyval = list(); }
break;
-case 249:
-//#line 921 "e.y"
+case 248:
+//#line 922 "e.y"
{ yyval = val_peek(1); }
break;
-case 250:
-//#line 926 "e.y"
+case 249:
+//#line 927 "e.y"
{ pocket("lambda-args");
yyval = with(val_peek(1), val_peek(0)); }
break;
-case 253:
-//#line 936 "e.y"
+case 252:
+//#line 937 "e.y"
{ yyval = list(val_peek(0)); }
break;
-case 254:
-//#line 937 "e.y"
+case 253:
+//#line 938 "e.y"
{ yyval = with(val_peek(2), val_peek(0)); }
break;
-case 255:
-//#line 942 "e.y"
+case 254:
+//#line 943 "e.y"
{ yyval = list(val_peek(0)); }
break;
-case 256:
-//#line 943 "e.y"
+case 255:
+//#line 944 "e.y"
{ yyval = with(val_peek(2), val_peek(0)); }
break;
-case 257:
-//#line 947 "e.y"
+case 256:
+//#line 948 "e.y"
{ yyval = new Assoc(val_peek(2), val_peek(0)); }
break;
-case 258:
-//#line 948 "e.y"
+case 257:
+//#line 949 "e.y"
{ reserved("export binding"); }
break;
-case 260:
-//#line 961 "e.y"
+case 259:
+//#line 964 "e.y"
{ yyval = hilbert(val_peek(0)); }
break;
+case 260:
+//#line 971 "e.y"
+{ yyval = ((Identifier)val_peek(0)).getText(); }
+break;
case 261:
-//#line 962 "e.y"
+//#line 972 "e.y"
{ reserved("keyword \"" +
- ((Token)val_peek(0)).token() +
+ ((Token)val_peek(0)).getText() +
"\""); }
break;
case 262:
-//#line 978 "e.y"
+//#line 988 "e.y"
{ yyval = "add"; }
break;
case 263:
-//#line 979 "e.y"
+//#line 989 "e.y"
{ yyval = "and"; }
break;
case 264:
-//#line 980 "e.y"
+//#line 990 "e.y"
{ yyval = "approxDivide"; }
break;
case 265:
-//#line 981 "e.y"
+//#line 991 "e.y"
{ yyval = "floorDivide"; }
break;
case 266:
-//#line 982 "e.y"
+//#line 992 "e.y"
{ yyval = "shiftLeft"; }
break;
case 267:
-//#line 983 "e.y"
+//#line 993 "e.y"
{ yyval = "remainder"; }
break;
case 268:
-//#line 984 "e.y"
+//#line 994 "e.y"
{ yyval = "mod"; }
break;
case 269:
-//#line 985 "e.y"
+//#line 995 "e.y"
{ yyval = "multiply"; }
break;
case 270:
-//#line 986 "e.y"
+//#line 996 "e.y"
{ yyval = "or"; }
break;
case 271:
-//#line 987 "e.y"
+//#line 997 "e.y"
{ yyval = "pow"; }
break;
case 272:
-//#line 988 "e.y"
+//#line 998 "e.y"
{ yyval = "subtract"; }
break;
case 273:
-//#line 989 "e.y"
+//#line 999 "e.y"
{ yyval = "xor"; }
break;
case 274:
-//#line 998 "e.y"
+//#line 1008 "e.y"
{ yyval = NULL; }
break;
case 275:
-//#line 999 "e.y"
+//#line 1009 "e.y"
{ yyval = val_peek(3); }
break;
case 276:
-//#line 1003 "e.y"
+//#line 1013 "e.y"
{ yyval = val_peek(1); }
break;
case 277:
-//#line 1008 "e.y"
+//#line 1018 "e.y"
{ yyval = eScript(val_peek(2), optMatcher(val_peek(1))); }
break;
case 278:
-//#line 1010 "e.y"
+//#line 1020 "e.y"
{ pocket("plumbing");
yyval = eScript(null, val_peek(0)); }
break;
case 279:
-//#line 1012 "e.y"
+//#line 1022 "e.y"
{ pocket("plumbing");
yyval = eScript(null, val_peek(0)); }
break;
case 281:
-//#line 1022 "e.y"
+//#line 1032 "e.y"
{ yyval = with(val_peek(2), val_peek(1)); }
break;
case 283:
-//#line 1027 "e.y"
+//#line 1037 "e.y"
{ yyval = with(val_peek(2), val_peek(1)); }
break;
case 285:
-//#line 1032 "e.y"
+//#line 1042 "e.y"
{ yyval = with(val_peek(2), val_peek(1)); }
break;
case 288:
-//#line 1049 "e.y"
+//#line 1059 "e.y"
{ yyval = with(val_peek(1), val_peek(0)); }
break;
case 289:
-//#line 1053 "e.y"
+//#line 1063 "e.y"
{ yyval = matcher(val_peek(1), val_peek(0)); }
break;
case 290:
-//#line 1060 "e.y"
+//#line 1070 "e.y"
{ yyval = null; }
break;
case 291:
-//#line 1061 "e.y"
+//#line 1071 "e.y"
{ yyval = val_peek(0); }
break;
case 292:
-//#line 1072 "e.y"
+//#line 1082 "e.y"
{ yyval = oType(val_peek(4), val_peek(1)); }
break;
case 293:
-//#line 1073 "e.y"
+//#line 1083 "e.y"
{ yyval = oType(val_peek(2), list(val_peek(1))); }
break;
case 297:
-//#line 1080 "e.y"
+//#line 1090 "e.y"
{ yyval = with(val_peek(3),val_peek(1)); }
break;
case 298:
-//#line 1084 "e.y"
+//#line 1094 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 299:
-//#line 1085 "e.y"
+//#line 1095 "e.y"
{ yyval = with(val_peek(3),val_peek(0)); }
break;
case 300:
-//#line 1087 "e.y"
+//#line 1097 "e.y"
{ reserved("on event"); }
break;
case 301:
-//#line 1088 "e.y"
+//#line 1098 "e.y"
{ reserved("on event"); }
break;
case 302:
-//#line 1095 "e.y"
+//#line 1105 "e.y"
{ yyval = mType(val_peek(1),list(),val_peek(0)); }
break;
case 303:
-//#line 1096 "e.y"
+//#line 1106 "e.y"
{ yyval = mType(val_peek(4),val_peek(2),val_peek(0)); }
break;
case 304:
-//#line 1097 "e.y"
+//#line 1107 "e.y"
{ yyval = mType("run",val_peek(2),val_peek(0)); }
break;
case 305:
-//#line 1101 "e.y"
+//#line 1111 "e.y"
{ yyval = val_peek(0); }
break;
case 306:
-//#line 1102 "e.y"
+//#line 1112 "e.y"
{ yyval = val_peek(1); }
break;
case 307:
-//#line 1106 "e.y"
+//#line 1116 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 308:
-//#line 1107 "e.y"
+//#line 1117 "e.y"
{ yyval = with(val_peek(3),val_peek(0)); }
break;
case 309:
-//#line 1114 "e.y"
+//#line 1124 "e.y"
{ yyval = pType(val_peek(1),val_peek(0)); }
break;
case 310:
-//#line 1115 "e.y"
+//#line 1125 "e.y"
{ yyval = pType(null,val_peek(0)); }
break;
case 311:
-//#line 1119 "e.y"
+//#line 1129 "e.y"
{ yyval = null; }
break;
case 312:
-//#line 1120 "e.y"
+//#line 1130 "e.y"
{ yyval = val_peek(0); }
break;
case 315:
-//#line 1136 "e.y"
+//#line 1146 "e.y"
{ begin(); }
break;
case 316:
-//#line 1143 "e.y"
+//#line 1153 "e.y"
{ end(); }
break;
-//#line 6800 "EParser.java"
+//#line 6774 "EParser.java"
//########## END OF USER-SUPPLIED ACTIONS ##########
}//switch
//#### Now let's reduce... ####
1.6 +5 -1 e/src/jsrc/org/erights/e/elang/syntax/HilbertHotel.java
Index: HilbertHotel.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/HilbertHotel.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- HilbertHotel.java 2001/09/06 09:55:46 1.5
+++ HilbertHotel.java 2001/11/01 06:32:25 1.6
@@ -63,7 +63,7 @@
}
/**
- * If 'name' ends in "-"<digits>, return the index of "-". Otherwise,
+ * If 'name' ends in "_"<digits>, return the index of "_". Otherwise,
* return -1. This is the format of a temp name.
*/
static private int tempSep(String name) {
@@ -72,6 +72,10 @@
return -1;
}
int len = name.length();
+ if (i == len -1) {
+ //ends with "_"
+ return -1;
+ }
for (int j = i+1; j < len; j++) {
if (! Character.isDigit(name.charAt(j))) {
return -1;
1.4 +9 -0 e/src/jsrc/org/erights/e/elang/syntax/Indenter.java
Index: Indenter.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/Indenter.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Indenter.java 2001/09/07 18:11:41 1.3
+++ Indenter.java 2001/11/01 06:32:25 1.4
@@ -152,6 +152,8 @@
* @param closerChar As an error check, 'closerChar' must be the closing
* bracket character needed to close the most recent
* unclosed bracket.
+ * @param closer Used by some syntax errors to report where the erronous
+ * closing text occurs.
*/
public void pop(char closerChar, Twine closer) {
if (myTOS <= 0) {
@@ -201,5 +203,12 @@
} else {
return myIndentStack[myTOS] -1;
}
+ }
+
+ /**
+ * Show closing stack
+ */
+ public String toString() {
+ return new String(myCloserStack, 1, myTOS);
}
}
1.10 +7 -7 e/src/jsrc/org/erights/e/elang/syntax/Token.java
Index: Token.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/Token.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Token.java 2001/09/04 10:52:18 1.9
+++ Token.java 2001/11/01 06:32:25 1.10
@@ -28,27 +28,27 @@
*/
public class Token {
- private Twine myTok;
+ private Twine mySource;
private int myTokenType;
- public Token(Twine tok, int tokenType) {
- if (tok == null) {
+ public Token(Twine source, int tokenType) {
+ if (source == null) {
//XXX debugging
throw new RuntimeException("what gives?");
}
- myTok = tok;
+ mySource = source;
myTokenType = tokenType;
}
/**
* Where is the source code this syntactic construct was parsed from?
*/
- public Twine tok() { return myTok; }
+ public Twine getSource() { return mySource; }
/**
*
*/
- public String token() { return myTok.bare(); }
+ public String getText() { return mySource.bare(); }
/**
*
@@ -60,6 +60,6 @@
*/
public String toString() {
return EParser.tokenName(myTokenType) + ": \"" +
- token() + "\"" + " @ " + myTok.optSourceSpan();
+ getText() + "\"" + " @ " + mySource.optSourceSpan();
}
}
1.14 +13 -13 e/src/jsrc/org/erights/e/elang/syntax/URI.java
Index: URI.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/URI.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- URI.java 2001/09/06 09:55:46 1.13
+++ URI.java 2001/11/01 06:32:25 1.14
@@ -60,37 +60,37 @@
/**
*
*/
- private URI(Twine tok, int tokenType) {
- super(tok, tokenType);
- String token = tok.bare();
- int i = token.indexOf(':');
- if (token.charAt(0) != '<') {
+ private URI(Twine source, int tokenType) {
+ super(source, tokenType);
+ String text = source.bare();
+ int i = text.indexOf(':');
+ if (text.charAt(0) != '<') {
throw new Error("internal: URI must begin with a '<'");
}
if (i == -1) {
throw new Error("internal: URI must have a ':'");
}
- myProtocol = token.substring(1, i);
- int lasti = token.length() -1;
+ myProtocol = text.substring(1, i);
+ int lasti = text.length() -1;
if (tokenType == EParser.URIStart) {
if (i != lasti) {
throw new Error("internal: URIStart must end with a ':'");
}
myOptBody = null;
} else {
- if (token.charAt(lasti) != '>') {
+ if (text.charAt(lasti) != '>') {
throw new Error("internal: URI must end with a '>'");
}
- myOptBody = token.substring(i + 1, lasti);
+ myOptBody = text.substring(i + 1, lasti);
}
}
/**
*
*/
- static public URI make(Twine tok, int tokenType) {
- tok = tok.replaceAll("\\","/").replaceAll("|",":");
- return new URI(tok, tokenType);
+ static public URI make(Twine source, int tokenType) {
+ source = source.replaceAll("\\","/").replaceAll("|",":");
+ return new URI(source, tokenType);
}
/**
@@ -143,7 +143,7 @@
* @see org.erights.e.elang.syntax.URI#protocol
* @see org.erights.e.elang.syntax.URI#body
*/
- public String token() {
+ public String getText() {
if (null == myOptBody) {
return "<" + myProtocol + ":";
} else {
1.87 +91 -77 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.86
retrieving revision 1.87
diff -u -r1.86 -r1.87
--- e.y 2001/10/27 17:27:43 1.86
+++ e.y 2001/11/01 06:32:25 1.87
@@ -47,22 +47,26 @@
%}
/* Categorical terminals */
-%token LiteralInteger /* precision unlimited */
-%token LiteralFloat64
-%token LiteralChar
-%token LiteralString
-%token LiteralTwine
-
-%token Identifier
-%token VerbAss
-%token QuasiOpen
-%token QuasiClose
-%token URI
-%token URIStart
-%token BodyStartWord
-%token BodyNextWord
-%token VTableStartWord
-%token VTableNextWord
+%token LiteralInteger /* precision unlimited */
+%token LiteralFloat64 /* IEEE double precision */
+%token LiteralChar /* Unicode */
+%token LiteralString /* Double quoted */
+%token LiteralTwine /* quasi-quoted without holes. Not yet used */
+
+%token Identifier /* like Java, but no "$"s, and not "_" or keyword */
+%token VerbAss /* Identifier "=" */
+%token QuasiOpen /* ("`" char*) | (char*), up to hole */
+%token QuasiClose /* QuasiOpen "`" */
+%token DollarIdent /* "$" Identifier */
+%token AtIdent /* ("@" Identifier) | "@_" */
+%token DollarOpen /* "${" */
+%token AtOpen /* "@{" */
+%token URI /* "<" protocol ":" body ">" */
+%token URIStart /* "<" protocol ":" */
+%token BodyStartWord /* defmacro'd keyword. Not yet used */
+%token BodyNextWord /* defmacro'd keyword. Not yet used */
+%token VTableStartWord /* defmacro'd keyword. Not yet used */
+%token VTableNextWord /* defmacro'd keyword. Not yet used */
/* Keywords */
%token BIND CATCH CLASS DEF DELEGATE
@@ -203,14 +207,14 @@
;
/**
- * "def <ident>" without a right hand side is a forward declaration.
+ * "def <noun>" without a right hand side is a forward declaration.
* It introduces the name into scope bound to a promise for what it
* will be.
*/
assigns:
assign
| assigns ';' assign { $$ = sequence($1, $3); }
- | define ident { $$ = forward($2); }
+ | define noun { $$ = forward($2); }
;
@@ -376,7 +380,7 @@
| '!' prim { $$ = call($2, "not", list()); }
| '~' prim { $$ = call($2, "complement", list());}
| '-' prim { $$ = call($2, "negate", list()); }
- | '&' ident { $$ = slotExpr($2); }
+ | '&' noun { $$ = slotExpr($2); }
;
@@ -442,7 +446,7 @@
| LiteralString { $$ = literal($1); }
| LiteralTwine { $$ = literal($1); }
- | noun
+ | nounExpr
| URI { $$ = uriExpr($1); }
| URIStart add '>' { $$ = uriExpr($1,$2); }
@@ -469,10 +473,10 @@
| macro
- | '$' '{' LiteralInteger '}' { $$ = quasiLiteralExpr($3); }
+ | DollarOpen LiteralInteger '}' { $$ = quasiLiteralExpr($2); }
| '$' LiteralInteger { $$ = quasiLiteralExpr($2); }
| '$' '$' { $$ = quasiLiteralExpr(); }
- | '@' '{' LiteralInteger '}' { $$ = quasiPatternExpr($3); }
+ | AtOpen LiteralInteger '}' { $$ = quasiPatternExpr($2); }
| '@' LiteralInteger { $$ = quasiPatternExpr($2); }
@@ -486,26 +490,26 @@
* Note that 'classHead' provides its own 'begin'
*/
object:
- defAudits vTable { $$ = object($1, $2); }
- | defAudits begin funcHead body { $$ = methObject($1,$3,$4); }
- | begin THUNK body { $$ = thunk($3); }
-
- | CLASS classHead body { $$ = classExpr($2,$3); }
-
- | begin '_' funcHead body { pocket("anon-lambda");
- $$ = methObject(audits(ignore(),
- list()),
- $3,
- $4); }
- | begin '_' body { pocket("anon-lambda");
- $$ = thunk($3); }
+ defAudits vTable { $$ = object($1, $2); }
+ | defAudits begin funcHead body { $$ = methObject($1,$3,$4); }
+ | begin THUNK body { $$ = thunk($3); }
+
+ | CLASS classHead body { $$ = classExpr($2,$3); }
+
+ | begin '_' funcHead body { pocket("anon-lambda");
+ $$ = methObject(audits(ignore(),
+ list()),
+ $3,
+ $4); }
+ | begin '_' body { pocket("anon-lambda");
+ $$ = thunk($3); }
;
/**
* Evaluates to the binding of this name in the current scope
*/
-noun:
- ident { $$ = noun($1); }
+nounExpr:
+ noun { $$ = noun($1); }
;
@@ -592,13 +596,10 @@
;
innerExpr:
- '$' quasiAgain ident { $$ = noun($3); }
- | '$' '{' eExpr quasiAgain '}' { $$ = $3; }
+ DollarIdent { $$ = dollarNoun($1); }
+ | DollarOpen eExpr '}' { $$ = $2; }
;
-quasiAgain:
- /* empty */ { myLexer.quasiAgain(); }
- ;
/**
********************************************
@@ -669,13 +670,13 @@
;
quasiPattern:
- QuasiClose { $$ = list($1); }
- | innerThings QuasiClose { $$ = with($1, $2); }
+ QuasiClose { $$ = list($1); }
+ | innerThings QuasiClose { $$ = with($1, $2); }
;
innerThings:
- QuasiOpen innerThing { $$ = list($1, $2); }
- | innerThings QuasiOpen innerThing { $$ = with(with($1, $2), $3); }
+ QuasiOpen innerThing { $$ = list($1, $2); }
+ | innerThings QuasiOpen innerThing { $$ = with(with($1, $2), $3);}
;
innerThing:
@@ -684,40 +685,40 @@
;
innerPattern:
- '@' quasiAgain ident { $$ = finalPattern($3); }
- | '@' quasiAgain '_' { $$ = ignore(); }
- | '@' '{' pattern quasiAgain '}' { $$ = $3; }
+ AtIdent { $$ = atNoun($1); }
+ | AtOpen pattern '}' { $$ = $2; }
;
/**
* Namers are patterns that bind at most one name.
- * The 'ident' forms are the only defining lambda occurance of a
+ * The 'noun' forms are the only defining lambda occurance of a
* variable name.
*
* Wherever a namer is needed, a "_" can be used to match anything
* and suppress binding a name.
*/
namer:
- ident ':' order { $$ = finalPattern($1, $3); }
- | ident { $$ = finalPattern($1); }
- | '&' ident { $$ = slotDefiner($2); }
+ noun ':' order { $$ = finalPattern($1, $3); }
+ | noun { $$ = finalPattern($1); }
+ | '&' noun { $$ = slotDefiner($2); }
| '_' { $$ = ignore(); }
+ | '_' ':' order { reserved("anon guard"); }
| binder
| varNamer
- | '$' '{' LiteralInteger '}' { $$ = quasiLiteralPatt($3); }
- | '@' '{' LiteralInteger '}' { $$ = quasiPatternPatt($3); }
+ | DollarOpen LiteralInteger '}' { $$ = quasiLiteralPatt($2); }
+ | AtOpen LiteralInteger '}' { $$ = quasiPatternPatt($2); }
;
binder:
- BIND ident ':' order { $$ = bindDefiner($2, $4); }
- | BIND ident { $$ = bindDefiner($2); }
+ BIND noun ':' order { $$ = bindDefiner($2, $4); }
+ | BIND noun { $$ = bindDefiner($2); }
;
varNamer:
- VAR ident ':' order { $$ = varPattern($2, $4); }
- | VAR ident { $$ = varPattern($2); }
+ VAR noun ':' order { $$ = varPattern($2, $4); }
+ | VAR noun { $$ = varPattern($2); }
;
@@ -726,12 +727,12 @@
* expression
*/
oName:
- ident { $$ = finalPattern($1); }
+ noun { $$ = finalPattern($1); }
| '_' { $$ = ignore(); }
- | BIND ident { $$ = bindDefiner($2); }
- | VAR ident { $$ = varPattern($2); }
- | '$' '{' LiteralInteger '}' { $$ = quasiLiteralPatt($3); }
- | '@' '{' LiteralInteger '}' { $$ = quasiPatternPatt($3); }
+ | BIND noun { $$ = bindDefiner($2); }
+ | VAR noun { $$ = varPattern($2); }
+ | DollarOpen LiteralInteger '}' { $$ = quasiLiteralPatt($2); }
+ | AtOpen LiteralInteger '}' { $$ = quasiPatternPatt($2); }
| litString
;
@@ -749,8 +750,8 @@
*/
defName:
define oName { $$ = $2; }
- | BIND ident { $$ = bindDefiner($2); }
- | VAR ident { $$ = varPattern($2); }
+ | BIND noun { $$ = bindDefiner($2); }
+ | VAR noun { $$ = varPattern($2); }
;
/**
@@ -758,7 +759,7 @@
*/
audits:
oName { $$ = audits($1, list()); }
- | oName Audit nouns { pocket("auditors");
+ | oName Audit nounExprs { pocket("auditors");
$$ = audits($1, $3); }
;
@@ -767,13 +768,13 @@
*/
defAudits:
defName { $$ = audits($1, list()); }
- | defName Audit nouns { pocket("auditors");
+ | defName Audit nounExprs { pocket("auditors");
$$ = audits($1, $3); }
;
-nouns:
- noun { $$ = list($1); }
- | nouns ',' br noun { $$ = with($1, $4); }
+nounExprs:
+ nounExpr { $$ = list($1); }
+ | nounExprs ',' br nounExpr { $$ = with($1, $4); }
;
@@ -945,7 +946,7 @@
map:
eExpr MapsTo eExpr { $$ = new Assoc($1, $3); }
- | MapsTo noun { reserved("export binding"); }
+ | MapsTo nounExpr { reserved("export binding"); }
;
@@ -956,11 +957,20 @@
ident
;
+/**
+ * A variable name
+ */
+noun:
+ ident { $$ = hilbert($1); }
+ ;
+/**
+ * A non-reserved Identifier (as a String)
+ */
ident:
- Identifier { $$ = hilbert($1); }
+ Identifier { $$ = ((Identifier)$1).getText(); }
| reserved { reserved("keyword \"" +
- ((Token)$1).token() +
+ ((Token)$1).getText() +
"\""); }
;
@@ -1111,13 +1121,13 @@
* Parameter type
*/
pType:
- ident optType { $$ = pType($1,$2); }
+ noun optType { $$ = pType($1,$2); }
| '_' optType { $$ = pType(null,$2); }
;
optType:
/*empty*/ { $$ = null; }
- | ':' noun { $$ = $2; }
+ | ':' nounExpr { $$ = $2; }
;
/**
@@ -1343,7 +1353,7 @@
} catch (IOException ex) {
yyerror("io: " + ex);
}
- yytext = token.token();
+ yytext = token.getText();
yylval = token;
return token.tokenType();
}
@@ -1413,6 +1423,10 @@
TheTokens[VerbAss] = "verb-assign";
TheTokens[QuasiOpen] = "quasi-open";
TheTokens[QuasiClose] = "quasi-close";
+ TheTokens[DollarIdent] = "dollar-identifier-hole";
+ TheTokens[AtIdent] = "at-identifier-hole";
+ TheTokens[DollarOpen] = "dollar-open-hole";
+ TheTokens[AtOpen] = "at-open-hole";
TheTokens[URI] = "uniform-resource-identifier";
TheTokens[URIStart] = "uri-protocol-with-colon";
TheTokens[BodyStartWord] = "body-start-word";
1.3 +45 -30 e/src/jsrc/org/quasiliteral/astro/Functor.java
Index: Functor.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/Functor.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Functor.java 2001/10/27 17:27:43 1.2
+++ Functor.java 2001/11/01 06:32:25 1.3
@@ -15,6 +15,21 @@
import antlr.CommonToken;
/**
+ * Like an Antlr {@link Token}, but with differences that make it suitable
+ * for quasiliteral processing.
+ * <p>
+ * The differences are
+ * <ul>
+ * <li>It knows how to convert to and from an Antlr Token, in a way that
+ * preserves the semantics of vanilla Tokens.
+ * <li>It's PassByCopy, necessitating it be Immutable.</li>
+ * <li>The token-type is identified by a string instead of a number,
+ * enabling it to make some sense without reference to a specific
+ * grammar.</li>
+ * <li>The token-text is a {@link Twine} instead of a string, and can
+ * therefore remember its source positions.</li>
+ * <li>It has a convenient printed form.</li>
+ * </ul>
*
* @author <a href="mailto:markm@caplet.com">Mark S Miller</a>
* @author Many ideas from Danfuzz Bornstein
@@ -36,7 +51,7 @@
* @serial The source text corresponding to the original source of the
* token.
*/
- private final Twine myText;
+ private final Twine mySource;
/**
* @serial An optional value calculated from the source text.
@@ -46,18 +61,18 @@
/**
* @param tokenType The name of an Antlr token type int in a particular
* grammar.
- * @param text The source text corresponding to the original source of
- * the token, although it isn't necessarily the same as the
- * original source text. In any case, its source span
- * information says what positions in the original source it
- * corresponds to. The source position info is not part of
- * the normal printed form.
+ * @param source The source text corresponding to the original source of
+ * the token, although it isn't necessarily the same as the
+ * original source text. In any case, its source span
+ * 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.
*/
- public Functor(String tokenType, Twine text, Object optValue) {
+ public Functor(String tokenType, Twine source, Object optValue) {
myTokenType = tokenType;
- myText = text;
+ mySource = source;
myOptValue = optValue;
}
@@ -69,15 +84,21 @@
ConstList typeNames)
{
String tokenType = (String)typeNames.get(token.getType());
- SourceSpan span = new SourceSpan(url,
- false,
- token.getLine(),
- token.getColumn(),
- token.getLine(),
- token.getColumn());
- return new Functor(tokenType,
- Twine.fromString(token.getText(), span),
- null);
+ if (token instanceof MilkToken) {
+ return new Functor(tokenType,
+ ((MilkToken)token).getSource(),
+ ((MilkToken)token).getOptValue());
+ } else {
+ SourceSpan span = new SourceSpan(url,
+ false,
+ token.getLine(),
+ token.getColumn(),
+ token.getLine(),
+ token.getColumn());
+ return new Functor(tokenType,
+ Twine.fromString(token.getText(), span),
+ null);
+ }
}
/**
@@ -85,13 +106,7 @@
*/
public Token asToken(ConstMap typeNums) {
int tokenTypeInt = E.asInt(typeNums.get(myTokenType));
- Token result = new CommonToken(tokenTypeInt, myText.bare());
- SourceSpan optSpan = myText.optSourceSpan();
- if (null != optSpan) {
- result.setLine(optSpan.getStartLine());
- result.setColumn(optSpan.getStartCol());
- }
- return result;
+ return new MilkToken(tokenTypeInt, mySource, myOptValue);
}
/**
@@ -100,7 +115,7 @@
public Object[] getCanonicalState() {
Object[] result = {
FunctorMaker, "new",
- myTokenType, myText, myOptValue
+ myTokenType, mySource, myOptValue
};
return result;
}
@@ -115,8 +130,8 @@
/**
*
*/
- public Twine getText() {
- return myText;
+ public Twine getSource() {
+ return mySource;
}
/**
@@ -138,9 +153,9 @@
*/
public String toString(boolean quasiFlag) {
String result = myTokenType;
- if (! myTokenType.equals(myText.bare())) {
+ if (! myTokenType.equals(mySource.bare())) {
result += ":";
- Twine quoted = myText.quote();
+ Twine quoted = mySource.quote();
if (quasiFlag) {
quoted = quoted.replaceAll("$", "$$");
quoted = quoted.replaceAll("@", "@@");