[e-cvs] cvs commit: e/src/jsrc/org/quasiliteral/text SimpleQuasiParser.java Substituter.java
markm@eros.cs.jhu.edu
markm@eros.cs.jhu.edu
Mon, 10 Dec 2001 15:30:10 -0500
markm 01/12/10 15:30:10
Modified: src/jsrc Makefile
src/jsrc/org/capml/dom Element.java Node.java Text.java
src/jsrc/org/capml/quasi QuasiContent.java
QuasiContentPattHole.java QuasiElement.java
src/jsrc/org/erights/e/elang/evm AssignExpr.java
CallExpr.java EMethodNode.java ENode.java
QuasiLiteralExpr.java QuasiLiteralPatt.java
QuasiPatternExpr.java QuasiPatternPatt.java
src/jsrc/org/erights/e/elang/interp InteractiveInterp.java
Interp.java ScopeSetup.java
src/jsrc/org/erights/e/elang/syntax EBuilder.java
EParser.java Makefile e.y
src/jsrc/org/erights/e/ui/elmer EInterpAdapter.java
src/jsrc/org/quasiliteral/astro ASTBuilder.java
AstroAST.java AstroTag.java AstroToken.java
BaseSchema.java
src/jsrc/org/quasiliteral/quasiterm QuasiBuilder.java
QuasiBuilderAdaptor.java
src/jsrc/org/quasiliteral/syntax BaseLexer.java
src/jsrc/org/quasiliteral/term Term.java TermBuilder.java
TermLexer.java
src/jsrc/org/quasiliteral/text SimpleQuasiParser.java
Substituter.java
Added: src/jsrc/org/erights/e/elang/evm ParseNode.java
src/jsrc/org/quasiliteral/syntax EYaccFixer.java
Removed: src/jsrc/org/erights/build EYaccFixer.java package.html
src/jsrc/org/erights/e/elib/base ParseNode.java
Log:
A start on qbuilding E
Revision Changes Path
1.63 +5 -4 e/src/jsrc/Makefile
Index: Makefile
===================================================================
RCS file: /cvs/e/src/jsrc/Makefile,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -r1.62 -r1.63
--- Makefile 2001/12/03 03:30:54 1.62
+++ Makefile 2001/12/10 20:30:08 1.63
@@ -35,21 +35,22 @@
stl_elib:
find $(ER)/elib -name '*.java' > files.tmp
find $(ER)/meta/java -name '*.java' >> files.tmp
- # find $(ER)/meta/javax -name '*.java' >> files.tmp
+ # find $(ER)/meta/javax -name '*.java' >> files.tmp
find $(ER)/meta/$(ER)/elib -name '*.java' >> files.tmp
$(JCOMPILE) @files.tmp
# tools needed to build elang
# depends on stl_elib
elang_builder:
- find org/erights/build -name '*.java' > files.tmp
- find org/apache/oro -name '*.java' >> files.tmp
- find antlr -name '*.java' >> files.tmp
+ find org/quasiliteral/base -name '*.java' > files.tmp
+ find org/quasiliteral/text -name '*.java' >> files.tmp
+ find antlr -name '*.java' >> files.tmp
$(JCOMPILE) @files.tmp
# optional: remake the parsers from yacc, or just use the generated
# ones, which are included.
elang_parser:
+ find org/apache/oro -name '*.java' >> files.tmp
find org/quasiliteral/astro -name '*.java' > files.tmp
find org/quasiliteral/syntax -name '*.java' >> files.tmp
$(JCOMPILE) @files.tmp
1.9 +1 -1 e/src/jsrc/org/capml/dom/Element.java
Index: Element.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/capml/dom/Element.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Element.java 2001/12/10 06:11:00 1.8
+++ Element.java 2001/12/10 20:30:08 1.9
@@ -21,9 +21,9 @@
import org.erights.e.elib.prim.StaticMaker;
import org.erights.e.elib.tables.ConstList;
import org.erights.e.elib.tables.EmptyTwine;
+import org.quasiliteral.astro.Astro;
import org.quasiliteral.astro.AstroBuilder;
import org.quasiliteral.astro.AstroTag;
-import org.quasiliteral.astro.Astro;
import java.io.IOException;
1.11 +1 -1 e/src/jsrc/org/capml/dom/Node.java
Index: Node.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/capml/dom/Node.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- Node.java 2001/12/10 06:11:00 1.10
+++ Node.java 2001/12/10 20:30:08 1.11
@@ -23,8 +23,8 @@
import org.erights.e.elib.tables.ConstList;
import org.erights.e.elib.tables.Iteratable;
import org.erights.e.elib.tables.Selfless;
-import org.quasiliteral.astro.AstroBuilder;
import org.quasiliteral.astro.Astro;
+import org.quasiliteral.astro.AstroBuilder;
import java.io.IOException;
1.9 +1 -1 e/src/jsrc/org/capml/dom/Text.java
Index: Text.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/capml/dom/Text.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Text.java 2001/12/10 06:11:00 1.8
+++ Text.java 2001/12/10 20:30:08 1.9
@@ -21,8 +21,8 @@
import org.erights.e.elib.prim.StaticMaker;
import org.erights.e.elib.tables.ConstList;
import org.erights.e.elib.tables.EmptyTwine;
-import org.quasiliteral.astro.AstroBuilder;
import org.quasiliteral.astro.Astro;
+import org.quasiliteral.astro.AstroBuilder;
import java.io.IOException;
1.10 +1 -1 e/src/jsrc/org/capml/quasi/QuasiContent.java
Index: QuasiContent.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/capml/quasi/QuasiContent.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- QuasiContent.java 2001/12/10 18:26:59 1.9
+++ QuasiContent.java 2001/12/10 20:30:08 1.10
@@ -24,13 +24,13 @@
import org.capml.dom.Node;
import org.capml.dom.Text;
import org.erights.e.elib.eio.TextWriter;
-import org.quasiliteral.base.MatchMaker;
import org.erights.e.elib.serial.PassByConstruction;
import org.erights.e.elib.serial.Persistent;
import org.erights.e.elib.tables.ConstList;
import org.erights.e.elib.tables.FlexList;
import org.erights.e.elib.tables.Selfless;
import org.erights.e.elib.util.AlreadyDefinedException;
+import org.quasiliteral.base.MatchMaker;
import java.io.IOException;
1.9 +1 -1 e/src/jsrc/org/capml/quasi/QuasiContentPattHole.java
Index: QuasiContentPattHole.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/capml/quasi/QuasiContentPattHole.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- QuasiContentPattHole.java 2001/12/10 18:26:59 1.8
+++ QuasiContentPattHole.java 2001/12/10 20:30:08 1.9
@@ -23,8 +23,8 @@
import org.erights.e.elib.eio.TextWriter;
import org.erights.e.elib.prim.StaticMaker;
-import org.quasiliteral.base.IncompleteQuasiException;
import org.erights.e.elib.tables.FlexList;
+import org.quasiliteral.base.IncompleteQuasiException;
import java.io.IOException;
import java.math.BigInteger;
1.10 +1 -1 e/src/jsrc/org/capml/quasi/QuasiElement.java
Index: QuasiElement.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/capml/quasi/QuasiElement.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- QuasiElement.java 2001/12/10 18:26:59 1.9
+++ QuasiElement.java 2001/12/10 20:30:08 1.10
@@ -25,9 +25,9 @@
import org.capml.dom.Node;
import org.erights.e.elib.eio.TextWriter;
import org.erights.e.elib.prim.StaticMaker;
-import org.quasiliteral.base.IncompleteQuasiException;
import org.erights.e.elib.tables.ConstList;
import org.erights.e.elib.tables.FlexList;
+import org.quasiliteral.base.IncompleteQuasiException;
import java.io.IOException;
1.32 +20 -0 e/src/jsrc/org/erights/e/elang/evm/AssignExpr.java
Index: AssignExpr.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/evm/AssignExpr.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- AssignExpr.java 2001/12/02 06:01:42 1.31
+++ AssignExpr.java 2001/12/10 20:30:08 1.32
@@ -22,10 +22,16 @@
import org.erights.e.develop.exception.NestedException;
import org.erights.e.elang.scope.EvalContext;
import org.erights.e.elang.visitors.ETreeVisitor;
+import org.erights.e.elang.syntax.EParser;
import org.erights.e.elib.eio.TextWriter;
import org.erights.e.elib.ref.Ref;
import org.erights.e.elib.tables.FlexList;
import org.erights.e.elib.tables.FlexMap;
+import org.erights.e.elib.tables.Twine;
+import org.quasiliteral.astro.Astro;
+import org.quasiliteral.astro.AstroArg;
+import org.quasiliteral.astro.AstroTag;
+import org.quasiliteral.quasiterm.QuasiBuilder;
import java.io.IOException;
@@ -67,6 +73,20 @@
*/
public Object welcome(ETreeVisitor visitor) {
return visitor.visitAssignExpr(myNoun, myRValue);
+ }
+
+ /**
+ *
+ */
+ public Astro qbuild(QuasiBuilder qbuilder) {
+ AstroTag tag = qbuilder.getSchema().getTagForCode(EParser.AssignExpr);
+ Astro functor = qbuilder.leafTag(tag,
+ Twine.fromString(":=", optSource()));
+ AstroArg noun = qbuilder.arg(myNoun.qbuild(qbuilder));
+ AstroArg rValue = qbuilder.arg(myRValue.qbuild(qbuilder));
+ return qbuilder.node(functor,
+ qbuilder.argList(qbuilder.argList(noun),
+ rValue));
}
/**
1.33 +3 -0 e/src/jsrc/org/erights/e/elang/evm/CallExpr.java
Index: CallExpr.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/evm/CallExpr.java,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- CallExpr.java 2001/12/02 06:01:42 1.32
+++ CallExpr.java 2001/12/10 20:30:08 1.33
@@ -27,6 +27,9 @@
import org.erights.e.elib.prim.E;
import org.erights.e.elib.ref.Ref;
import org.erights.e.elib.tables.FlexList;
+import org.quasiliteral.astro.Astro;
+import org.quasiliteral.astro.AstroArg;
+import org.quasiliteral.quasiterm.QuasiBuilder;
import java.io.IOException;
1.27 +0 -2 e/src/jsrc/org/erights/e/elang/evm/EMethodNode.java
Index: EMethodNode.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/evm/EMethodNode.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- EMethodNode.java 2001/12/10 18:27:00 1.26
+++ EMethodNode.java 2001/12/10 20:30:08 1.27
@@ -21,8 +21,6 @@
import org.erights.e.develop.exception.ExceptionMgr;
import org.erights.e.elib.base.MethodNode;
-import org.erights.e.elib.ref.Ref;
-import org.erights.e.elib.tables.FlexList;
import org.erights.e.elib.tables.FlexMap;
1.10 +11 -1 e/src/jsrc/org/erights/e/elang/evm/ENode.java
Index: ENode.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/evm/ENode.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ENode.java 2001/12/10 18:27:00 1.9
+++ ENode.java 2001/12/10 20:30:08 1.10
@@ -24,6 +24,8 @@
import org.erights.e.elang.scope.ScopeMap;
import org.erights.e.elang.visitors.ETreeVisitor;
import org.erights.e.elib.util.AlreadyDefinedException;
+import org.quasiliteral.astro.Astro;
+import org.quasiliteral.quasiterm.QuasiBuilder;
/**
* Those ParseNodes that--after expansion--define the kernel
@@ -50,6 +52,13 @@
public abstract Object welcome(ETreeVisitor visitor);
/**
+ *
+ */
+ public Astro qbuild(QuasiBuilder qbuilder) {
+ throw new RuntimeException("XXX qbuild not yet implemented: " + this);
+ }
+
+ /**
* Return a static scope analysis of a subtree that doesn't
* depend on the enclosing context.
*/
@@ -95,7 +104,8 @@
public final void setScopeMap(ScopeMap map) {
if (null != myOptScopeMap) {
- throw new AlreadyDefinedException("The scope map for a node may not be reassigned");
+ throw new AlreadyDefinedException
+ ("The scope map for a node may not be reassigned");
}
myOptScopeMap = map;
}
1.25 +1 -1 e/src/jsrc/org/erights/e/elang/evm/QuasiLiteralExpr.java
Index: QuasiLiteralExpr.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/evm/QuasiLiteralExpr.java,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- QuasiLiteralExpr.java 2001/12/10 18:27:00 1.24
+++ QuasiLiteralExpr.java 2001/12/10 20:30:08 1.25
@@ -22,8 +22,8 @@
import org.erights.e.elang.scope.EvalContext;
import org.erights.e.elang.visitors.ETreeVisitor;
import org.erights.e.elib.eio.TextWriter;
-import org.quasiliteral.base.IncompleteQuasiException;
import org.erights.e.elib.tables.FlexList;
+import org.quasiliteral.base.IncompleteQuasiException;
import java.io.IOException;
1.15 +1 -1 e/src/jsrc/org/erights/e/elang/evm/QuasiLiteralPatt.java
Index: QuasiLiteralPatt.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/evm/QuasiLiteralPatt.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- QuasiLiteralPatt.java 2001/12/10 18:27:00 1.14
+++ QuasiLiteralPatt.java 2001/12/10 20:30:08 1.15
@@ -22,9 +22,9 @@
import org.erights.e.elang.scope.EvalContext;
import org.erights.e.elang.visitors.ETreeVisitor;
import org.erights.e.elib.eio.TextWriter;
-import org.quasiliteral.base.IncompleteQuasiException;
import org.erights.e.elib.tables.FlexList;
import org.erights.e.elib.util.OneArgFunc;
+import org.quasiliteral.base.IncompleteQuasiException;
import java.io.IOException;
1.26 +1 -1 e/src/jsrc/org/erights/e/elang/evm/QuasiPatternExpr.java
Index: QuasiPatternExpr.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/evm/QuasiPatternExpr.java,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- QuasiPatternExpr.java 2001/12/10 18:27:00 1.25
+++ QuasiPatternExpr.java 2001/12/10 20:30:08 1.26
@@ -22,9 +22,9 @@
import org.erights.e.elang.scope.EvalContext;
import org.erights.e.elang.visitors.ETreeVisitor;
import org.erights.e.elib.eio.TextWriter;
-import org.quasiliteral.base.IncompleteQuasiException;
import org.erights.e.elib.tables.FlexList;
import org.erights.e.elib.util.AlreadyDefinedException;
+import org.quasiliteral.base.IncompleteQuasiException;
import java.io.IOException;
1.15 +1 -1 e/src/jsrc/org/erights/e/elang/evm/QuasiPatternPatt.java
Index: QuasiPatternPatt.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/evm/QuasiPatternPatt.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- QuasiPatternPatt.java 2001/12/10 18:27:00 1.14
+++ QuasiPatternPatt.java 2001/12/10 20:30:08 1.15
@@ -22,10 +22,10 @@
import org.erights.e.elang.scope.EvalContext;
import org.erights.e.elang.visitors.ETreeVisitor;
import org.erights.e.elib.eio.TextWriter;
-import org.quasiliteral.base.IncompleteQuasiException;
import org.erights.e.elib.tables.FlexList;
import org.erights.e.elib.util.AlreadyDefinedException;
import org.erights.e.elib.util.OneArgFunc;
+import org.quasiliteral.base.IncompleteQuasiException;
import java.io.IOException;
1.1 e/src/jsrc/org/erights/e/elang/evm/ParseNode.java
Index: ParseNode.java
===================================================================
package org.erights.e.elang.evm;
/*
The contents of this file are subject to the Electric Communities E Open
Source Code License Version 1.0 (the "License"); you may not use this file
except in compliance with the License. You may obtain a copy of the License
at http://www.communities.com/EL/.
Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
the specific language governing rights and limitations under the License.
The Original Code is the Distributed E Language Implementation, released
July 20, 1998.
The Initial Developer of the Original Code is Electric Communities.
Copyright (C) 1998 Electric Communities. All Rights Reserved.
Contributor(s): ______________________________________.
*/
import org.erights.e.develop.exception.ThrowableSugar;
import org.erights.e.elib.base.SourceSpan;
import org.erights.e.elib.eio.TextWriter;
import org.erights.e.elib.tables.ConstList;
import org.erights.e.elib.tables.FlexList;
import org.erights.e.elib.util.AlreadyDefinedException;
import org.quasiliteral.base.MatchMaker;
import java.io.IOException;
/**
* A ParseNode of a program written in "kernel E". A program written
* in E is immediately expanded to kernel E, hopefully passing
* source position through successfully.
*
* @author <a href="mailto:markm@erights.org">Mark S. Miller</a>
*/
public abstract class ParseNode implements MatchMaker {
/** lowest priority */
static public final int PR_START = 0;
/** lowest priority expression */
static public final int PR_EEXPR = 0;
static public final int PR_ASSIGN = 1;
static public final int PR_COMP = 2;
static public final int PR_ORDER = 3;
static public final int PR_CALL = 4;
/** highest priority expression */
static public final int PR_PRIM = 5;
/** lowest priority pattern */
static public final int PR_PATTERN = 0;
static public final int PR_LISTPATT = 1;
private SourceSpan myOptSource;
/**
* A bit of a kludge, but we initialize the source after
* construction to avoid propogating source-tracking logic through
* all subclasses.
*/
protected ParseNode() {
myOptSource = null;
}
/**
* A bit of a kludge, but we initialize the source after
* construction to avoid propogating source-tracking logic through
* all subclasses.
*/
public void defineSource(SourceSpan source)
throws AlreadyDefinedException {
if (myOptSource != null) {
throw new AlreadyDefinedException("source");
}
myOptSource = source;
}
/**
* Clear the
*/
protected void cleanCopy() {
myOptSource = null;
}
/**
* priority defaults to PR_START
*/
public void lnPrintOn(TextWriter out) throws IOException {
lnPrintOn(out, PR_START);
}
/**
* Onto out, first print a newline, then spaces to the designated indent
* level, then pretty print this parse node. "subPrintOn" vs "lnPrintOn"
* is much like the conventional disctinction between "print" and
* "println", except that the newlines come first (hence the weird
* spelling), and the newline is followed by indentation.
*/
public void lnPrintOn(TextWriter out, int priority) throws IOException {
out.println();
subPrintOn(out, priority);
}
/**
*
*/
public abstract boolean matchBind(Object[] args,
Object specimen,
FlexList bindings);
/**
*
*/
public ConstList matchBind(Object[] args, Object specimen) {
FlexList bindings = FlexList.make();
if (matchBind(args, specimen, bindings)) {
return bindings.snapshot();
} else {
return null;
}
}
/**
* Convenience method for matching corresponding arrays. null
* members must match exactly.
*/
static protected boolean matchBind(ParseNode[] templates,
Object[] args,
ParseNode[] specimens,
FlexList bindings) {
int len = templates.length;
if (len != specimens.length) {
return false;
}
for (int i = 0; i < len; i++) {
if (!matchBind(templates[i], args, specimens[i], bindings)) {
return false;
}
}
return true;
}
/**
* Convenience method for handling nulls. nulls must match exactly.
*/
static protected boolean matchBind(ParseNode optTemplate,
Object[] args,
ParseNode optSpecimen,
FlexList bindings) {
if (optTemplate == null) {
return optSpecimen == null;
} else if (optSpecimen == null) {
return false;
} else {
return optTemplate.matchBind(args, optSpecimen, bindings);
}
}
/**
* Where is the source code this syntactic construct was parsed from?
*/
public SourceSpan optSource() {
return myOptSource;
}
/**
* Print the left bracket, then the nodes separated by sep, and
* then the right bracket
*/
static public void printListOn(String left,
ParseNode[] nodes,
String sep,
String right,
TextWriter out,
int priority)
throws IOException {
out.print(left);
if (nodes.length >= 1) {
int last = nodes.length - 1;
for (int i = 0; i < last; i++) {
nodes[i].subPrintOn(out, priority);
out.print(sep);
}
nodes[last].subPrintOn(out, priority);
}
out.print(right);
}
/**
* Pretty print this syntactic construct assuming the specified
* ambient indent level. The convention is that any leading or trailing
* whitespace (newlines, indentation, etc...) is handled by my caller.
* I just print from my first printing character to my last one, indenting
* as appropriate for internal newlines.
*/
public abstract void subPrintOn(TextWriter out, int priority)
throws IOException;
/**
* Overridden in EExpr & Pattern
* @see #subPrintOn
*/
public void printOn(TextWriter out) throws IOException {
out.print("e??`");
subPrintOn(out, PR_START);
out.print("`");
}
/**
* For VisualAge
*/
public String toString() {
Object[] pair = TextWriter.makeBufferingPair();
TextWriter tw = (TextWriter)pair[0];
StringBuffer sb = (StringBuffer)pair[1];
try {
subPrintOn(tw, PR_START);
} catch (IOException iox) {
throw ThrowableSugar.backtrace(iox, "in ParseNode.toString()");
}
return sb.toString();
}
}
1.17 +3 -3 e/src/jsrc/org/erights/e/elang/interp/InteractiveInterp.java
Index: InteractiveInterp.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/interp/InteractiveInterp.java,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- InteractiveInterp.java 2001/12/02 18:42:01 1.16
+++ InteractiveInterp.java 2001/12/10 20:30:09 1.17
@@ -27,9 +27,6 @@
import org.erights.e.elang.scope.Scope;
import org.erights.e.elang.syntax.ELexer;
import org.erights.e.elang.syntax.EParser;
-import org.quasiliteral.syntax.FileFeeder;
-import org.quasiliteral.syntax.LineFeeder;
-import org.quasiliteral.syntax.NeedMoreException;
import org.erights.e.elib.eio.TextWriter;
import org.erights.e.elib.prim.E;
import org.erights.e.elib.prim.FERunner;
@@ -43,6 +40,9 @@
import org.erights.e.elib.util.AlreadyDefinedException;
import org.erights.e.meta.java.io.FileGetter;
import org.erights.e.meta.java.io.FileSugar;
+import org.quasiliteral.syntax.FileFeeder;
+import org.quasiliteral.syntax.LineFeeder;
+import org.quasiliteral.syntax.NeedMoreException;
import javax.swing.UnsupportedLookAndFeelException;
import java.io.BufferedReader;
1.80 +2 -2 e/src/jsrc/org/erights/e/elang/interp/Interp.java
Index: Interp.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/interp/Interp.java,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -r1.79 -r1.80
--- Interp.java 2001/12/02 18:42:01 1.79
+++ Interp.java 2001/12/10 20:30:09 1.80
@@ -28,8 +28,6 @@
import org.erights.e.elang.scope.Scope;
import org.erights.e.elang.syntax.ELexer;
import org.erights.e.elang.syntax.EParser;
-import org.quasiliteral.syntax.FileFeeder;
-import org.quasiliteral.syntax.LineFeeder;
import org.erights.e.elib.eio.TextWriter;
import org.erights.e.elib.prim.BERunner;
import org.erights.e.elib.prim.E;
@@ -45,6 +43,8 @@
import org.erights.e.elib.util.ClassCache;
import org.erights.e.meta.java.io.FileGetter;
import org.erights.e.meta.java.io.FileSugar;
+import org.quasiliteral.syntax.FileFeeder;
+import org.quasiliteral.syntax.LineFeeder;
import javax.swing.LookAndFeel;
import javax.swing.UIManager;
1.79 +1 -1 e/src/jsrc/org/erights/e/elang/interp/ScopeSetup.java
Index: ScopeSetup.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/interp/ScopeSetup.java,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -r1.78 -r1.79
--- ScopeSetup.java 2001/12/10 18:27:00 1.78
+++ ScopeSetup.java 2001/12/10 20:30:09 1.79
@@ -35,7 +35,6 @@
import org.erights.e.elib.prim.E;
import org.erights.e.elib.prim.StaticMaker;
import org.erights.e.elib.prim.Thrower;
-import org.quasiliteral.text.SimpleQuasiParser;
import org.erights.e.elib.ref.Ref;
import org.erights.e.elib.ref.Resolver;
import org.erights.e.elib.serial.PassByConstructionGuard;
@@ -55,6 +54,7 @@
import org.erights.e.elib.tables.Twine;
import org.erights.e.elib.util.ClassCache;
import org.erights.e.meta.java.io.FileGetter;
+import org.quasiliteral.text.SimpleQuasiParser;
/**
* The initial namespace as seen by the E language programmer.
1.91 +11 -11 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.90
retrieving revision 1.91
diff -u -r1.90 -r1.91
--- EBuilder.java 2001/12/10 06:11:00 1.90
+++ EBuilder.java 2001/12/10 20:30:09 1.91
@@ -262,7 +262,7 @@
String verbName;
if (verb instanceof Astro) {
- verbName = ((Astro)verb).getOptArgString(EParser.ID);
+ verbName = ((Astro)verb).getOptArgString(EParser.VerbAssign);
} else {
verbName = (String)verb;
}
@@ -353,10 +353,10 @@
*/
/*package*/
EExpr doMeta(Object keyword, Object verb, Object args) {
- String kword = ((Astro)keyword).getOptArgString(EParser.ID).intern();
+ short kword = ((Astro)keyword).getTag().getOptTagCode();
String vrb = ((String)verb).intern();
EExpr[] exprs = exprs(args);
- if ("meta" == kword) {
+ if (EParser.META == kword) {
if (0 == exprs.length) {
if ("scope" == vrb) {
pocket("meta-scope");
@@ -375,7 +375,7 @@
}
}
syntaxError("unrecognized meta " + vrb + "/" + exprs.length);
- } else if ("pragma" == kword) {
+ } else if (EParser.PRAGMA == kword) {
if (1 == exprs.length) {
if ("enable" == vrb) {
LiteralExpr lit = (LiteralExpr)exprs[0];
@@ -388,7 +388,7 @@
} else if (propVal == "false") {
syntaxError("The optional " + propName +
" feature in eprops.txt is currently" +
- "not 'allow'ed.");
+ " not 'allow'ed.");
} else if (propVal == "allow") {
myProps = myProps.with(propName, "true");
return NULL;
@@ -413,7 +413,7 @@
}
syntaxError("unrecognized pragma " + vrb + "/" + exprs.length);
} else {
- syntaxError("internal: unrecognized " + kword);
+ syntaxError("internal: unrecognized " + keyword);
}
return null; //keep compiler happy
}
@@ -423,10 +423,10 @@
*/
/*package*/
EExpr doMetaSend(Object keyword, Object verb, Object args) {
- String kword = ((Astro)keyword).getOptArgString(EParser.ID).intern();
+ short kword = ((Astro)keyword).getTag().getOptTagCode();
String vrb = ((String)verb).intern();
EExpr[] exprs = exprs(args);
- if ("meta" == kword) {
+ if (EParser.META == kword) {
if (2 == exprs.length) {
if ("eval" == vrb) {
reserved("remote evaluation");
@@ -434,11 +434,11 @@
}
syntaxError("unrecognized meta-send " +
vrb + "/" + exprs.length);
- } else if ("pragma" == kword) {
+ } else if (EParser.PRAGMA == kword) {
syntaxError("unrecognized pragma-send " +
vrb + "/" + exprs.length);
} else {
- syntaxError("internal: unrecognized " + kword);
+ syntaxError("internal: unrecognized " + keyword);
}
return null; //keep compiler happy
}
@@ -636,7 +636,7 @@
*/
/*package*/
Pattern atNoun(Object token) {
- String str = ((Astro)token).getOptArgString(EParser.ID);
+ String str = ((Astro)token).getOptArgString(EParser.AtIdent);
str = hilbert(str);
if ("_".equals(str)) {
return ignore();
1.112 +327 -255 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.111
retrieving revision 1.112
diff -u -r1.111 -r1.112
--- EParser.java 2001/12/10 16:55:32 1.111
+++ EParser.java 2001/12/10 20:30:09 1.112
@@ -12,7 +12,6 @@
//#line 30 "e.y"
package org.erights.e.elang.syntax;
-import org.erights.build.EYaccFixer;
import org.erights.e.develop.exception.ThrowableSugar;
import org.erights.e.elang.evm.ENode;
import org.erights.e.elang.interp.Interp;
@@ -26,6 +25,7 @@
import org.quasiliteral.astro.Astro;
import org.quasiliteral.astro.AstroSchema;
import org.quasiliteral.astro.BaseSchema;
+import org.quasiliteral.syntax.EYaccFixer;
import org.quasiliteral.syntax.SyntaxException;
import java.io.IOException;
@@ -328,6 +328,36 @@
public final static short MatchBind=419;
public final static short MisMatch=420;
public final static short Audit=421;
+public final static short AssignExpr=422;
+public final static short CallExpr=423;
+public final static short DefineExpr=424;
+public final static short EscapeExpr=425;
+public final static short HideExpr=426;
+public final static short IfExpr=427;
+public final static short LiteralExpr=428;
+public final static short MatchBindExpr=429;
+public final static short NounExpr=430;
+public final static short ObjectExpr=431;
+public final static short QuasiLiteralExpr=432;
+public final static short QuasiPatternExpr=433;
+public final static short ScopeExpr=434;
+public final static short SendExpr=435;
+public final static short SeqExpr=436;
+public final static short SlotExpr=437;
+public final static short MetaExpr=438;
+public final static short CatchExpr=439;
+public final static short FinallyExpr=440;
+public final static short FinalPattern=441;
+public final static short VarPattern=442;
+public final static short ListPattern=443;
+public final static short CdrPattern=444;
+public final static short IgnorePattern=445;
+public final static short SuchThatPattern=446;
+public final static short QuasiLiteralPatt=447;
+public final static short QuasiPatternPatt=448;
+public final static short EScript=449;
+public final static short EMethod=450;
+public final static short Matcher=451;
public final static short YYERRCODE=256;
final static short yylhs[] = { -1,
0, 0, 0, 4, 4, 2, 6, 5, 5, 7,
@@ -692,7 +722,7 @@
}
final static short YYFINAL=3;
-final static short YYMAXTOKEN=421;
+final static short YYMAXTOKEN=451;
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,
@@ -731,7 +761,13 @@
"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",
+"OpWhen","MapsTo","MatchBind","MisMatch","Audit","AssignExpr","CallExpr",
+"DefineExpr","EscapeExpr","HideExpr","IfExpr","LiteralExpr","MatchBindExpr",
+"NounExpr","ObjectExpr","QuasiLiteralExpr","QuasiPatternExpr","ScopeExpr",
+"SendExpr","SeqExpr","SlotExpr","MetaExpr","CatchExpr","FinallyExpr",
+"FinalPattern","VarPattern","ListPattern","CdrPattern","IgnorePattern",
+"SuchThatPattern","QuasiLiteralPatt","QuasiPatternPatt","EScript","EMethod",
+"Matcher",
};
final static String yyrule[] = {
"$accept : start",
@@ -1137,7 +1173,7 @@
"reserved : WSTRING",
};
-//#line 1188 "e.y"
+//#line 1223 "e.y"
/**
@@ -1623,6 +1659,42 @@
TheTokens[MatchBind] = "MatchBind";
TheTokens[MisMatch] = "MisMatch";
TheTokens[Audit] = "Audit";
+
+ /* Non-token Kernel-E Term-tree tag names (ie, functor names) */
+
+ TheTokens[AssignExpr] = "AssignExpr";
+ TheTokens[CallExpr] = "CallExpr";
+ TheTokens[DefineExpr] = "DefineExpr";
+ TheTokens[EscapeExpr] = "EscapeExpr";
+ TheTokens[HideExpr] = "HideExpr";
+ TheTokens[IfExpr] = "IfExpr";
+ TheTokens[LiteralExpr] = "LiteralExpr";
+ TheTokens[MatchBindExpr] = "MatchBindExpr";
+ TheTokens[NounExpr] = "NounExpr";
+ TheTokens[ObjectExpr] = "ObjectExpr";
+ TheTokens[QuasiLiteralExpr] = "QuasiLiteralExpr";
+ TheTokens[QuasiPatternExpr] = "QuasiPatternExpr";
+ TheTokens[ScopeExpr] = "ScopeExpr";
+ TheTokens[SendExpr] = "SendExpr";
+ TheTokens[SeqExpr] = "SeqExpr";
+ TheTokens[SlotExpr] = "SlotExpr";
+ TheTokens[MetaExpr] = "MetaExpr";
+ TheTokens[CatchExpr] = "CatchExpr";
+ TheTokens[FinallyExpr] = "FinallyExpr";
+
+ TheTokens[FinalPattern] = "FinalPattern";
+ TheTokens[VarPattern] = "VarPattern";
+ TheTokens[ListPattern] = "ListPattern";
+ TheTokens[CdrPattern] = "CdrPattern";
+ TheTokens[IgnorePattern] = "IgnorePattern";
+ TheTokens[SuchThatPattern] = "SuchThatPattern";
+ TheTokens[QuasiLiteralPatt] = "QuasiLiteralPatt";
+ TheTokens[QuasiPatternPatt] = "QuasiPatternPatt";
+
+ TheTokens[EScript] = "EScript";
+ TheTokens[EMethod] = "EMethod";
+ TheTokens[Matcher] = "Matcher";
+
}
/**
@@ -1712,7 +1784,7 @@
static public boolean isContinuer(int tagCode) {
return TheContinuers[tagCode];
}
-//#line 5631 "EParser.java"
+//#line 5703 "EParser.java"
//###############################################################
// method: yylexdebug : check lexer state
//###############################################################
@@ -1859,400 +1931,400 @@
{
//########## USER-SUPPLIED ACTIONS ##########
case 1:
-//#line 159 "e.y"
+//#line 194 "e.y"
{ myEscape.run(null); }
break;
case 2:
-//#line 160 "e.y"
+//#line 195 "e.y"
{ myEscape.run(val_peek(0)); }
break;
case 3:
-//#line 162 "e.y"
+//#line 197 "e.y"
{ myEscape.run(val_peek(0)); }
break;
case 5:
-//#line 170 "e.y"
+//#line 205 "e.y"
{ pocket("define"); }
break;
case 6:
-//#line 179 "e.y"
+//#line 214 "e.y"
{ yyval = val_peek(1); }
break;
case 7:
-//#line 183 "e.y"
+//#line 218 "e.y"
{ yyval = val_peek(1); }
break;
case 9:
-//#line 194 "e.y"
+//#line 229 "e.y"
{ yyval = sequence(val_peek(2), val_peek(0)); }
break;
case 11:
-//#line 199 "e.y"
+//#line 234 "e.y"
{ yyval = sequence(val_peek(2), val_peek(0)); }
break;
case 12:
-//#line 207 "e.y"
+//#line 242 "e.y"
{ yyval = oneExpr(val_peek(0)); }
break;
case 16:
-//#line 222 "e.y"
+//#line 257 "e.y"
{ yyval = sequence(val_peek(2), val_peek(0)); }
break;
case 17:
-//#line 223 "e.y"
+//#line 258 "e.y"
{ yyval = forward(val_peek(0)); }
break;
case 18:
-//#line 238 "e.y"
+//#line 273 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 21:
-//#line 243 "e.y"
+//#line 278 "e.y"
{ yyval = assign(val_peek(2), val_peek(0)); }
break;
case 22:
-//#line 244 "e.y"
+//#line 279 "e.y"
{ yyval = update(val_peek(2), val_peek(1), val_peek(0)); }
break;
case 23:
-//#line 245 "e.y"
+//#line 280 "e.y"
{ yyval = assAsr(val_peek(2), val_peek(0)); }
break;
case 24:
-//#line 246 "e.y"
+//#line 281 "e.y"
{ yyval = update(val_peek(2), val_peek(1), val_peek(0)); }
break;
case 25:
-//#line 248 "e.y"
+//#line 283 "e.y"
{ yyval = define(val_peek(2), val_peek(0)); }
break;
case 26:
-//#line 249 "e.y"
+//#line 284 "e.y"
{ yyval = define(val_peek(2), val_peek(0)); }
break;
case 27:
-//#line 250 "e.y"
+//#line 285 "e.y"
{ yyval = define(val_peek(2), val_peek(0)); }
break;
case 29:
-//#line 259 "e.y"
+//#line 294 "e.y"
{ yyval = condOr(val_peek(2), val_peek(0)); }
break;
case 31:
-//#line 268 "e.y"
+//#line 303 "e.y"
{ yyval = condAnd(val_peek(2), val_peek(0)); }
break;
case 33:
-//#line 277 "e.y"
+//#line 312 "e.y"
{ yyval = same(val_peek(2), val_peek(0)); }
break;
case 34:
-//#line 278 "e.y"
+//#line 313 "e.y"
{ yyval = not(same(val_peek(2), val_peek(0))); }
break;
case 35:
-//#line 279 "e.y"
+//#line 314 "e.y"
{ yyval = call(val_peek(2), "and", val_peek(0)); }
break;
case 36:
-//#line 280 "e.y"
+//#line 315 "e.y"
{ yyval = call(val_peek(2), "or", val_peek(0)); }
break;
case 37:
-//#line 281 "e.y"
+//#line 316 "e.y"
{ yyval = call(val_peek(2), "xor", val_peek(0)); }
break;
case 38:
-//#line 282 "e.y"
+//#line 317 "e.y"
{ yyval = call(val_peek(2), "butNot", val_peek(0)); }
break;
case 39:
-//#line 284 "e.y"
+//#line 319 "e.y"
{ yyval = matchBind(val_peek(2), val_peek(0)); }
break;
case 40:
-//#line 285 "e.y"
+//#line 320 "e.y"
{ yyval = not(matchBind(val_peek(2), val_peek(0))); }
break;
case 41:
-//#line 297 "e.y"
+//#line 332 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 44:
-//#line 302 "e.y"
+//#line 337 "e.y"
{ yyval = lessThan(val_peek(2), val_peek(0)); }
break;
case 45:
-//#line 303 "e.y"
+//#line 338 "e.y"
{ yyval = leq(val_peek(2), val_peek(0)); }
break;
case 46:
-//#line 304 "e.y"
+//#line 339 "e.y"
{ yyval = asBigAs(val_peek(2), val_peek(0)); }
break;
case 47:
-//#line 305 "e.y"
+//#line 340 "e.y"
{ yyval = geq(val_peek(2), val_peek(0)); }
break;
case 48:
-//#line 306 "e.y"
+//#line 341 "e.y"
{ yyval = greaterThan(val_peek(2), val_peek(0)); }
break;
case 50:
-//#line 315 "e.y"
+//#line 350 "e.y"
{ yyval = thru(val_peek(2), val_peek(0)); }
break;
case 51:
-//#line 316 "e.y"
+//#line 351 "e.y"
{ yyval = till(val_peek(2), val_peek(0)); }
break;
case 53:
-//#line 325 "e.y"
+//#line 360 "e.y"
{ yyval = call(val_peek(2), "shiftLeft", val_peek(0)); }
break;
case 54:
-//#line 326 "e.y"
+//#line 361 "e.y"
{ yyval = call(val_peek(2), "shiftLeft",
list(call(val_peek(0), "negate", list())));
}
break;
case 55:
-//#line 336 "e.y"
+//#line 371 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 58:
-//#line 341 "e.y"
+//#line 376 "e.y"
{ yyval = call(val_peek(2), "add", val_peek(0)); }
break;
case 59:
-//#line 342 "e.y"
+//#line 377 "e.y"
{ yyval = call(val_peek(2), "subtract", val_peek(0)); }
break;
case 60:
-//#line 350 "e.y"
+//#line 385 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 63:
-//#line 355 "e.y"
+//#line 390 "e.y"
{ yyval = call(val_peek(2), "multiply", val_peek(0)); }
break;
case 64:
-//#line 356 "e.y"
+//#line 391 "e.y"
{ yyval = call(val_peek(2), "approxDivide", val_peek(0)); }
break;
case 65:
-//#line 357 "e.y"
+//#line 392 "e.y"
{ yyval = call(val_peek(2), "floorDivide", val_peek(0)); }
break;
case 66:
-//#line 358 "e.y"
+//#line 393 "e.y"
{ yyval = call(val_peek(2), "remainder", val_peek(0)); }
break;
case 67:
-//#line 359 "e.y"
+//#line 394 "e.y"
{ yyval = mod(val_peek(2), val_peek(0)); }
break;
case 68:
-//#line 367 "e.y"
+//#line 402 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 71:
-//#line 372 "e.y"
+//#line 407 "e.y"
{ yyval = call(val_peek(2), "pow", val_peek(0)); }
break;
case 72:
-//#line 381 "e.y"
+//#line 416 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 75:
-//#line 386 "e.y"
+//#line 421 "e.y"
{ yyval = call(val_peek(0), "not", list()); }
break;
case 76:
-//#line 387 "e.y"
+//#line 422 "e.y"
{ yyval = call(val_peek(0), "complement", list());}
break;
case 77:
-//#line 388 "e.y"
+//#line 423 "e.y"
{ yyval = call(val_peek(0), "negate", list()); }
break;
case 78:
-//#line 389 "e.y"
+//#line 424 "e.y"
{ yyval = slotExpr(val_peek(0)); }
break;
case 81:
-//#line 401 "e.y"
+//#line 436 "e.y"
{ yyval = call(val_peek(3), "get", val_peek(1)); }
break;
case 82:
-//#line 402 "e.y"
+//#line 437 "e.y"
{ yyval = send(val_peek(3), val_peek(1), val_peek(0)); }
break;
case 83:
-//#line 403 "e.y"
+//#line 438 "e.y"
{ yyval = send(val_peek(2), "run", val_peek(0)); }
break;
case 84:
-//#line 405 "e.y"
+//#line 440 "e.y"
{ pocket("no-paren-call");
yyval = send(val_peek(2), val_peek(0), list()); }
break;
case 85:
-//#line 407 "e.y"
+//#line 442 "e.y"
{ pocket("no-paren-call");
yyval = call(val_peek(1), val_peek(0), list()); }
break;
case 86:
-//#line 409 "e.y"
+//#line 444 "e.y"
{ pocket("dot-props");
yyval = property(val_peek(2), val_peek(0), list()); }
break;
case 87:
-//#line 411 "e.y"
+//#line 446 "e.y"
{ pocket("dot-props");
yyval = property(val_peek(3), val_peek(1), val_peek(0)); }
break;
case 88:
-//#line 419 "e.y"
+//#line 454 "e.y"
{ yyval = doMeta(val_peek(1), "run", val_peek(0)); }
break;
case 89:
-//#line 420 "e.y"
+//#line 455 "e.y"
{ yyval = doMeta(val_peek(2), val_peek(1), val_peek(0)); }
break;
case 90:
-//#line 421 "e.y"
+//#line 456 "e.y"
{ yyval = doMetaSend(val_peek(2), "run", val_peek(0)); }
break;
case 91:
-//#line 422 "e.y"
+//#line 457 "e.y"
{ yyval = doMetaSend(val_peek(3), val_peek(1), val_peek(0)); }
break;
case 92:
-//#line 424 "e.y"
+//#line 459 "e.y"
{ pocket("no-paren-call");
yyval = doMeta(val_peek(1), val_peek(0), list()); }
break;
case 93:
-//#line 426 "e.y"
+//#line 461 "e.y"
{ pocket("no-paren-call");
yyval = doMetaSend(val_peek(2), val_peek(0), list()); }
break;
case 95:
-//#line 440 "e.y"
+//#line 475 "e.y"
{ yyval = call(val_peek(1), "run", val_peek(0)); }
break;
case 96:
-//#line 441 "e.y"
+//#line 476 "e.y"
{ yyval = call(val_peek(2), val_peek(1), val_peek(0)); }
break;
case 97:
-//#line 449 "e.y"
+//#line 484 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 98:
-//#line 450 "e.y"
+//#line 485 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 99:
-//#line 451 "e.y"
+//#line 486 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 100:
-//#line 452 "e.y"
+//#line 487 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 101:
-//#line 453 "e.y"
+//#line 488 "e.y"
{ yyval = literal(val_peek(0)); }
break;
case 103:
-//#line 457 "e.y"
+//#line 492 "e.y"
{ yyval = uriExpr(val_peek(0)); }
break;
case 104:
-//#line 458 "e.y"
+//#line 493 "e.y"
{ yyval = uriExpr(val_peek(2),val_peek(1)); }
break;
case 105:
-//#line 460 "e.y"
+//#line 495 "e.y"
{ yyval = quasiExpr(val_peek(1),val_peek(0)); }
break;
case 107:
-//#line 463 "e.y"
+//#line 498 "e.y"
{ yyval = tuple(val_peek(1)); }
break;
case 108:
-//#line 464 "e.y"
+//#line 499 "e.y"
{ yyval = map(val_peek(1)); }
break;
case 109:
-//#line 466 "e.y"
+//#line 501 "e.y"
{ yyval = hide(val_peek(0)); }
break;
case 110:
-//#line 468 "e.y"
+//#line 503 "e.y"
{ yyval = escape(val_peek(1),val_peek(0)); }
break;
case 111:
-//#line 470 "e.y"
+//#line 505 "e.y"
{ yyval = whilex(val_peek(1),val_peek(0)); }
break;
case 112:
-//#line 472 "e.y"
+//#line 507 "e.y"
{ yyval = switchx(val_peek(2),val_peek(1)); }
break;
case 113:
-//#line 474 "e.y"
+//#line 509 "e.y"
{ yyval = tryx(val_peek(2),val_peek(1),val_peek(0)); }
break;
case 118:
-//#line 482 "e.y"
+//#line 517 "e.y"
{ yyval = quasiLiteralExpr(val_peek(1)); }
break;
case 119:
-//#line 483 "e.y"
+//#line 518 "e.y"
{ yyval = quasiLiteralExpr(val_peek(0)); }
break;
case 120:
-//#line 484 "e.y"
+//#line 519 "e.y"
{ yyval = quasiLiteralExpr(); }
break;
case 121:
-//#line 485 "e.y"
+//#line 520 "e.y"
{ yyval = quasiPatternExpr(val_peek(1)); }
break;
case 122:
-//#line 486 "e.y"
+//#line 521 "e.y"
{ yyval = quasiPatternExpr(val_peek(0)); }
break;
case 123:
-//#line 489 "e.y"
+//#line 524 "e.y"
{ reserved("select"); }
break;
case 124:
-//#line 490 "e.y"
+//#line 525 "e.y"
{ pocket("typedef");
yyval = val_peek(0); }
break;
case 126:
-//#line 499 "e.y"
+//#line 534 "e.y"
{ yyval = object(val_peek(1), val_peek(0)); }
break;
case 127:
-//#line 500 "e.y"
+//#line 535 "e.y"
{ yyval = methObject(val_peek(3),val_peek(1),val_peek(0)); }
break;
case 128:
-//#line 501 "e.y"
+//#line 536 "e.y"
{ yyval = thunk(val_peek(0)); }
break;
case 129:
-//#line 503 "e.y"
+//#line 538 "e.y"
{ yyval = classExpr(val_peek(1),val_peek(0)); }
break;
case 130:
-//#line 505 "e.y"
+//#line 540 "e.y"
{ pocket("anon-lambda");
yyval = methObject(audits(ignore(),
list()),
@@ -2260,626 +2332,626 @@
val_peek(0)); }
break;
case 131:
-//#line 510 "e.y"
+//#line 545 "e.y"
{ pocket("anon-lambda");
yyval = thunk(val_peek(0)); }
break;
case 132:
-//#line 518 "e.y"
+//#line 553 "e.y"
{ yyval = noun(val_peek(0)); }
break;
case 133:
-//#line 527 "e.y"
+//#line 562 "e.y"
{ yyval = val_peek(1); }
break;
case 134:
-//#line 536 "e.y"
+//#line 571 "e.y"
{ yyval = ifx(val_peek(1), val_peek(0)); }
break;
case 135:
-//#line 537 "e.y"
+//#line 572 "e.y"
{ yyval = ifx(val_peek(3), val_peek(2), val_peek(0)); }
break;
case 136:
-//#line 538 "e.y"
+//#line 573 "e.y"
{ yyval = ifx(val_peek(4), val_peek(3), val_peek(0)); }
break;
case 137:
-//#line 546 "e.y"
+//#line 581 "e.y"
{ yyval = forx(val_peek(5),val_peek(3),val_peek(1)); }
break;
case 138:
-//#line 554 "e.y"
+//#line 589 "e.y"
{ yyval = when(val_peek(3),val_peek(2),val_peek(1),val_peek(0)); }
break;
case 139:
-//#line 564 "e.y"
+//#line 599 "e.y"
{ yyval = macro(val_peek(4), val_peek(2), val_peek(1), val_peek(0)); }
break;
case 140:
-//#line 566 "e.y"
+//#line 601 "e.y"
{ yyval = macro(val_peek(5), val_peek(3), val_peek(2), val_peek(0)); }
break;
case 141:
-//#line 570 "e.y"
+//#line 605 "e.y"
{ yyval = null; }
break;
case 142:
-//#line 572 "e.y"
+//#line 607 "e.y"
{ yyval = macro(val_peek(5), val_peek(3), val_peek(2), val_peek(1)); }
break;
case 143:
-//#line 574 "e.y"
+//#line 609 "e.y"
{ yyval = macro(val_peek(5), val_peek(3), val_peek(2), val_peek(0)); }
break;
case 144:
-//#line 582 "e.y"
+//#line 617 "e.y"
{ yyval = null; }
break;
case 147:
-//#line 589 "e.y"
+//#line 624 "e.y"
{ yyval = noun("simple__quasiParser"); }
break;
case 148:
-//#line 590 "e.y"
+//#line 625 "e.y"
{ yyval = noun(val_peek(0) + "__quasiParser"); }
break;
case 149:
-//#line 591 "e.y"
+//#line 626 "e.y"
{ yyval = val_peek(1); }
break;
case 150:
-//#line 595 "e.y"
+//#line 630 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 151:
-//#line 596 "e.y"
+//#line 631 "e.y"
{ yyval = with(val_peek(1), val_peek(0)); }
break;
case 152:
-//#line 600 "e.y"
+//#line 635 "e.y"
{ yyval = list(val_peek(1), val_peek(0)); }
break;
case 153:
-//#line 601 "e.y"
+//#line 636 "e.y"
{ yyval = with(with(val_peek(2), val_peek(1)), val_peek(0)); }
break;
case 154:
-//#line 605 "e.y"
+//#line 640 "e.y"
{ yyval = dollarNoun(val_peek(0)); }
break;
case 155:
-//#line 606 "e.y"
+//#line 641 "e.y"
{ yyval = val_peek(1); }
break;
case 158:
-//#line 624 "e.y"
+//#line 659 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 159:
-//#line 625 "e.y"
+//#line 660 "e.y"
{ yyval = with(val_peek(3), val_peek(0)); }
break;
case 161:
-//#line 635 "e.y"
+//#line 670 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 162:
-//#line 636 "e.y"
+//#line 671 "e.y"
{ yyval = with(val_peek(3), val_peek(0)); }
break;
case 163:
-//#line 643 "e.y"
+//#line 678 "e.y"
{ yyval = new Assoc(ignore(), val_peek(0)); }
break;
case 165:
-//#line 648 "e.y"
+//#line 683 "e.y"
{ yyval = new Assoc(val_peek(2), val_peek(0)); }
break;
case 166:
-//#line 649 "e.y"
+//#line 684 "e.y"
{ reserved("var-extract-pattern"); }
break;
case 168:
-//#line 654 "e.y"
+//#line 689 "e.y"
{ yyval = suchThat(val_peek(2), val_peek(0)); }
break;
case 169:
-//#line 656 "e.y"
+//#line 691 "e.y"
{ reserved("meta pattern"); }
break;
case 171:
-//#line 661 "e.y"
+//#line 696 "e.y"
{ yyval = listPattern(val_peek(1)); }
break;
case 172:
-//#line 662 "e.y"
+//#line 697 "e.y"
{ yyval = cdrPattern(val_peek(3), val_peek(0)); }
break;
case 173:
-//#line 664 "e.y"
+//#line 699 "e.y"
{ reserved("map pattern"); }
break;
case 174:
-//#line 665 "e.y"
+//#line 700 "e.y"
{ reserved("map pattern"); }
break;
case 176:
-//#line 670 "e.y"
+//#line 705 "e.y"
{ yyval = patternEquals(val_peek(0)); }
break;
case 178:
-//#line 675 "e.y"
+//#line 710 "e.y"
{ yyval = quasiPattern(val_peek(1), val_peek(0)); }
break;
case 179:
-//#line 679 "e.y"
+//#line 714 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 180:
-//#line 680 "e.y"
+//#line 715 "e.y"
{ yyval = with(val_peek(1), val_peek(0)); }
break;
case 181:
-//#line 684 "e.y"
+//#line 719 "e.y"
{ yyval = list(val_peek(1), val_peek(0)); }
break;
case 182:
-//#line 685 "e.y"
+//#line 720 "e.y"
{ yyval = with(with(val_peek(2), val_peek(1)), val_peek(0));}
break;
case 185:
-//#line 694 "e.y"
+//#line 729 "e.y"
{ yyval = atNoun(val_peek(0)); }
break;
case 186:
-//#line 695 "e.y"
+//#line 730 "e.y"
{ yyval = val_peek(1); }
break;
case 187:
-//#line 708 "e.y"
+//#line 743 "e.y"
{ yyval = finalPattern(val_peek(2), val_peek(0)); }
break;
case 188:
-//#line 709 "e.y"
+//#line 744 "e.y"
{ yyval = finalPattern(val_peek(0)); }
break;
case 189:
-//#line 710 "e.y"
+//#line 745 "e.y"
{ yyval = slotDefiner(val_peek(0)); }
break;
case 190:
-//#line 711 "e.y"
+//#line 746 "e.y"
{ yyval = ignore(); }
break;
case 191:
-//#line 712 "e.y"
+//#line 747 "e.y"
{ reserved("anon guard"); }
break;
case 194:
-//#line 716 "e.y"
+//#line 751 "e.y"
{ yyval = quasiLiteralPatt(val_peek(1)); }
break;
case 195:
-//#line 717 "e.y"
+//#line 752 "e.y"
{ yyval = quasiPatternPatt(val_peek(1)); }
break;
case 196:
-//#line 721 "e.y"
+//#line 756 "e.y"
{ yyval = bindDefiner(val_peek(2), val_peek(0)); }
break;
case 197:
-//#line 722 "e.y"
+//#line 757 "e.y"
{ yyval = bindDefiner(val_peek(0)); }
break;
case 198:
-//#line 726 "e.y"
+//#line 761 "e.y"
{ yyval = varPattern(val_peek(2), val_peek(0)); }
break;
case 199:
-//#line 727 "e.y"
+//#line 762 "e.y"
{ yyval = varPattern(val_peek(0)); }
break;
case 200:
-//#line 736 "e.y"
+//#line 771 "e.y"
{ yyval = finalPattern(val_peek(0)); }
break;
case 201:
-//#line 737 "e.y"
+//#line 772 "e.y"
{ yyval = ignore(); }
break;
case 202:
-//#line 738 "e.y"
+//#line 773 "e.y"
{ yyval = bindDefiner(val_peek(0)); }
break;
case 203:
-//#line 739 "e.y"
+//#line 774 "e.y"
{ yyval = varPattern(val_peek(0)); }
break;
case 204:
-//#line 740 "e.y"
+//#line 775 "e.y"
{ yyval = quasiLiteralPatt(val_peek(1)); }
break;
case 205:
-//#line 741 "e.y"
+//#line 776 "e.y"
{ yyval = quasiPatternPatt(val_peek(1)); }
break;
case 207:
-//#line 758 "e.y"
+//#line 793 "e.y"
{ yyval = val_peek(0); }
break;
case 208:
-//#line 759 "e.y"
+//#line 794 "e.y"
{ yyval = bindDefiner(val_peek(0)); }
break;
case 209:
-//#line 760 "e.y"
+//#line 795 "e.y"
{ yyval = varPattern(val_peek(0)); }
break;
case 210:
-//#line 767 "e.y"
+//#line 802 "e.y"
{ yyval = audits(val_peek(0), list()); }
break;
case 211:
-//#line 768 "e.y"
+//#line 803 "e.y"
{ pocket("auditors");
yyval = audits(val_peek(2), val_peek(0)); }
break;
case 212:
-//#line 776 "e.y"
+//#line 811 "e.y"
{ yyval = audits(val_peek(0), list()); }
break;
case 213:
-//#line 777 "e.y"
+//#line 812 "e.y"
{ pocket("auditors");
yyval = audits(val_peek(2), val_peek(0)); }
break;
case 214:
-//#line 782 "e.y"
+//#line 817 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 215:
-//#line 783 "e.y"
+//#line 818 "e.y"
{ yyval = with(val_peek(3), val_peek(0)); }
break;
case 216:
-//#line 795 "e.y"
+//#line 830 "e.y"
{ yyval = list(); }
break;
case 217:
-//#line 796 "e.y"
+//#line 831 "e.y"
{ yyval = append(list(val_peek(3)),val_peek(1)); }
break;
case 220:
-//#line 810 "e.y"
+//#line 845 "e.y"
{ yyval = method(val_peek(1), val_peek(0)); }
break;
case 221:
-//#line 812 "e.y"
+//#line 847 "e.y"
{ reserved("fields"); }
break;
case 222:
-//#line 813 "e.y"
+//#line 848 "e.y"
{ reserved("on event"); }
break;
case 223:
-//#line 814 "e.y"
+//#line 849 "e.y"
{ reserved("sealed meta"); }
break;
case 224:
-//#line 815 "e.y"
+//#line 850 "e.y"
{ reserved("sealed meta"); }
break;
case 225:
-//#line 823 "e.y"
+//#line 858 "e.y"
{ yyval = methHead("run", val_peek(2), val_peek(0)); }
break;
case 226:
-//#line 824 "e.y"
+//#line 859 "e.y"
{ yyval = methHead(val_peek(4), val_peek(2), val_peek(0)); }
break;
case 227:
-//#line 826 "e.y"
+//#line 861 "e.y"
{ pocket("no-paren-method");
yyval = methHead(val_peek(1), list(), val_peek(0)); }
break;
case 228:
-//#line 835 "e.y"
+//#line 870 "e.y"
{ yyval = methHead("run", val_peek(2), val_peek(0)); }
break;
case 229:
-//#line 837 "e.y"
+//#line 872 "e.y"
{ pocket("one-method-object");
yyval = methHead(val_peek(4), val_peek(2), val_peek(0)); }
break;
case 230:
-//#line 839 "e.y"
+//#line 874 "e.y"
{ pocket("no-paren-method");
yyval = methHead(val_peek(1), list(), val_peek(0)); }
break;
case 231:
-//#line 848 "e.y"
+//#line 883 "e.y"
{ yyval = list(val_peek(5), val_peek(2), val_peek(0)); }
break;
case 232:
-//#line 858 "e.y"
+//#line 893 "e.y"
{ yyval = matcher(val_peek(1), val_peek(0)); }
break;
case 233:
-//#line 867 "e.y"
+//#line 902 "e.y"
{ yyval = delegatex(val_peek(0)); }
break;
case 234:
-//#line 874 "e.y"
+//#line 909 "e.y"
{ yyval = VOID; }
break;
case 235:
-//#line 875 "e.y"
+//#line 910 "e.y"
{ yyval = val_peek(0); }
break;
case 236:
-//#line 879 "e.y"
+//#line 914 "e.y"
{ yyval = val_peek(1); }
break;
case 237:
-//#line 888 "e.y"
+//#line 923 "e.y"
{ yyval = list(val_peek(7), val_peek(5), val_peek(2), val_peek(0)); }
break;
case 238:
-//#line 891 "e.y"
+//#line 926 "e.y"
{ pocket("when-clauses");
yyval = list(val_peek(5), val_peek(2), val_peek(0)); }
break;
case 239:
-//#line 896 "e.y"
+//#line 931 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 240:
-//#line 897 "e.y"
+//#line 932 "e.y"
{ yyval = with(val_peek(2), val_peek(0)); }
break;
case 241:
-//#line 901 "e.y"
+//#line 936 "e.y"
{ list(val_peek(2), val_peek(0)); }
break;
case 246:
-//#line 919 "e.y"
+//#line 954 "e.y"
{ yyval = list(); }
break;
case 247:
-//#line 923 "e.y"
+//#line 958 "e.y"
{ yyval = list(); }
break;
case 248:
-//#line 928 "e.y"
+//#line 963 "e.y"
{ yyval = val_peek(1); }
break;
case 249:
-//#line 933 "e.y"
+//#line 968 "e.y"
{ pocket("lambda-args");
yyval = with(val_peek(1), val_peek(0)); }
break;
case 252:
-//#line 943 "e.y"
+//#line 978 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 253:
-//#line 944 "e.y"
+//#line 979 "e.y"
{ yyval = with(val_peek(2), val_peek(0)); }
break;
case 254:
-//#line 949 "e.y"
+//#line 984 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 255:
-//#line 950 "e.y"
+//#line 985 "e.y"
{ yyval = with(val_peek(2), val_peek(0)); }
break;
case 256:
-//#line 954 "e.y"
+//#line 989 "e.y"
{ yyval = new Assoc(val_peek(2), val_peek(0)); }
break;
case 257:
-//#line 955 "e.y"
+//#line 990 "e.y"
{ reserved("export binding"); }
break;
case 259:
-//#line 970 "e.y"
+//#line 1005 "e.y"
{ yyval = hilbert(val_peek(0)); }
break;
case 260:
-//#line 977 "e.y"
+//#line 1012 "e.y"
{ yyval = ((Astro)val_peek(0)).getOptArgString(ID); }
break;
case 261:
-//#line 978 "e.y"
+//#line 1013 "e.y"
{ reserved("keyword \"" +
((Astro)val_peek(0)).getTag().getTagName() +
"\""); }
break;
case 262:
-//#line 994 "e.y"
+//#line 1029 "e.y"
{ yyval = "add"; }
break;
case 263:
-//#line 995 "e.y"
+//#line 1030 "e.y"
{ yyval = "and"; }
break;
case 264:
-//#line 996 "e.y"
+//#line 1031 "e.y"
{ yyval = "approxDivide"; }
break;
case 265:
-//#line 997 "e.y"
+//#line 1032 "e.y"
{ yyval = "floorDivide"; }
break;
case 266:
-//#line 998 "e.y"
+//#line 1033 "e.y"
{ yyval = "shiftLeft"; }
break;
case 267:
-//#line 999 "e.y"
+//#line 1034 "e.y"
{ yyval = "remainder"; }
break;
case 268:
-//#line 1000 "e.y"
+//#line 1035 "e.y"
{ yyval = "mod"; }
break;
case 269:
-//#line 1001 "e.y"
+//#line 1036 "e.y"
{ yyval = "multiply"; }
break;
case 270:
-//#line 1002 "e.y"
+//#line 1037 "e.y"
{ yyval = "or"; }
break;
case 271:
-//#line 1003 "e.y"
+//#line 1038 "e.y"
{ yyval = "pow"; }
break;
case 272:
-//#line 1004 "e.y"
+//#line 1039 "e.y"
{ yyval = "subtract"; }
break;
case 273:
-//#line 1005 "e.y"
+//#line 1040 "e.y"
{ yyval = "xor"; }
break;
case 274:
-//#line 1014 "e.y"
+//#line 1049 "e.y"
{ yyval = NULL; }
break;
case 275:
-//#line 1015 "e.y"
+//#line 1050 "e.y"
{ yyval = val_peek(3); }
break;
case 276:
-//#line 1019 "e.y"
+//#line 1054 "e.y"
{ yyval = val_peek(1); }
break;
case 277:
-//#line 1024 "e.y"
+//#line 1059 "e.y"
{ yyval = eScript(val_peek(2), optMatcher(val_peek(1))); }
break;
case 278:
-//#line 1026 "e.y"
+//#line 1061 "e.y"
{ pocket("plumbing");
yyval = eScript(null, val_peek(0)); }
break;
case 279:
-//#line 1028 "e.y"
+//#line 1063 "e.y"
{ pocket("plumbing");
yyval = eScript(null, val_peek(0)); }
break;
case 281:
-//#line 1038 "e.y"
+//#line 1073 "e.y"
{ yyval = with(val_peek(2), val_peek(1)); }
break;
case 283:
-//#line 1043 "e.y"
+//#line 1078 "e.y"
{ yyval = with(val_peek(2), val_peek(1)); }
break;
case 285:
-//#line 1048 "e.y"
+//#line 1083 "e.y"
{ yyval = with(val_peek(2), val_peek(1)); }
break;
case 288:
-//#line 1065 "e.y"
+//#line 1100 "e.y"
{ yyval = with(val_peek(1), val_peek(0)); }
break;
case 289:
-//#line 1069 "e.y"
+//#line 1104 "e.y"
{ yyval = matcher(val_peek(1), val_peek(0)); }
break;
case 290:
-//#line 1076 "e.y"
+//#line 1111 "e.y"
{ yyval = null; }
break;
case 291:
-//#line 1077 "e.y"
+//#line 1112 "e.y"
{ yyval = val_peek(0); }
break;
case 292:
-//#line 1088 "e.y"
+//#line 1123 "e.y"
{ yyval = oType(val_peek(4), val_peek(1)); }
break;
case 293:
-//#line 1089 "e.y"
+//#line 1124 "e.y"
{ yyval = oType(val_peek(2), list(val_peek(1))); }
break;
case 297:
-//#line 1096 "e.y"
+//#line 1131 "e.y"
{ yyval = with(val_peek(3),val_peek(1)); }
break;
case 298:
-//#line 1100 "e.y"
+//#line 1135 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 299:
-//#line 1101 "e.y"
+//#line 1136 "e.y"
{ yyval = with(val_peek(3),val_peek(0)); }
break;
case 300:
-//#line 1103 "e.y"
+//#line 1138 "e.y"
{ reserved("on event"); }
break;
case 301:
-//#line 1104 "e.y"
+//#line 1139 "e.y"
{ reserved("on event"); }
break;
case 302:
-//#line 1111 "e.y"
+//#line 1146 "e.y"
{ yyval = mType(val_peek(1),list(),val_peek(0)); }
break;
case 303:
-//#line 1112 "e.y"
+//#line 1147 "e.y"
{ yyval = mType(val_peek(4),val_peek(2),val_peek(0)); }
break;
case 304:
-//#line 1113 "e.y"
+//#line 1148 "e.y"
{ yyval = mType("run",val_peek(2),val_peek(0)); }
break;
case 305:
-//#line 1117 "e.y"
+//#line 1152 "e.y"
{ yyval = val_peek(0); }
break;
case 306:
-//#line 1118 "e.y"
+//#line 1153 "e.y"
{ yyval = val_peek(1); }
break;
case 307:
-//#line 1122 "e.y"
+//#line 1157 "e.y"
{ yyval = list(val_peek(0)); }
break;
case 308:
-//#line 1123 "e.y"
+//#line 1158 "e.y"
{ yyval = with(val_peek(3),val_peek(0)); }
break;
case 309:
-//#line 1130 "e.y"
+//#line 1165 "e.y"
{ yyval = pType(val_peek(1),val_peek(0)); }
break;
case 310:
-//#line 1131 "e.y"
+//#line 1166 "e.y"
{ yyval = pType(null,val_peek(0)); }
break;
case 311:
-//#line 1135 "e.y"
+//#line 1170 "e.y"
{ yyval = null; }
break;
case 312:
-//#line 1136 "e.y"
+//#line 1171 "e.y"
{ yyval = val_peek(0); }
break;
case 315:
-//#line 1152 "e.y"
+//#line 1187 "e.y"
{ begin(); }
break;
case 316:
-//#line 1159 "e.y"
+//#line 1194 "e.y"
{ end(); }
break;
-//#line 6795 "EParser.java"
+//#line 6867 "EParser.java"
//########## END OF USER-SUPPLIED ACTIONS ##########
}//switch
//#### Now let's reduce... ####
1.15 +1 -1 e/src/jsrc/org/erights/e/elang/syntax/Makefile
Index: Makefile
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/elang/syntax/Makefile,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- Makefile 2001/04/13 08:08:34 1.14
+++ Makefile 2001/12/10 20:30:09 1.15
@@ -46,4 +46,4 @@
$(BYACCJ) -jv -f EParser -x EBuilder -s Object e.y
all: e.y _parse
- $(STLJ) org.erights.build.EYaccFixer . $(TOP)/src/bin/resources
+ $(STLJ) org.quasiliteral.syntax.EYaccFixer . $(TOP)/src/bin/resources
1.102 +1 -1 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.101
retrieving revision 1.102
diff -u -r1.101 -r1.102
--- e.y 2001/12/10 18:27:00 1.101
+++ e.y 2001/12/10 20:30:09 1.102
@@ -29,7 +29,6 @@
%{
package org.erights.e.elang.syntax;
-import org.erights.build.EYaccFixer;
import org.erights.e.develop.exception.ThrowableSugar;
import org.erights.e.elang.evm.ENode;
import org.erights.e.elang.interp.Interp;
@@ -43,6 +42,7 @@
import org.quasiliteral.astro.Astro;
import org.quasiliteral.astro.AstroSchema;
import org.quasiliteral.astro.BaseSchema;
+import org.quasiliteral.syntax.EYaccFixer;
import org.quasiliteral.syntax.SyntaxException;
import java.io.IOException;
1.45 +2 -2 e/src/jsrc/org/erights/e/ui/elmer/EInterpAdapter.java
Index: EInterpAdapter.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/erights/e/ui/elmer/EInterpAdapter.java,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- EInterpAdapter.java 2001/12/02 18:42:02 1.44
+++ EInterpAdapter.java 2001/12/10 20:30:09 1.45
@@ -23,8 +23,6 @@
import org.erights.e.develop.format.StringHelper;
import org.erights.e.elang.interp.InteractiveInterp;
import org.erights.e.elang.interp.InterpLoop;
-import org.quasiliteral.syntax.NeedMoreException;
-import org.quasiliteral.syntax.TwineFeeder;
import org.erights.e.elib.base.SourceSpan;
import org.erights.e.elib.eio.TextWriter;
import org.erights.e.elib.prim.FERunner;
@@ -34,6 +32,8 @@
import org.erights.e.elib.tables.Twine;
import org.erights.e.elib.util.AlreadyDefinedException;
import org.erights.e.ui.jed.JedMain;
+import org.quasiliteral.syntax.NeedMoreException;
+import org.quasiliteral.syntax.TwineFeeder;
import javax.swing.JTextArea;
import java.awt.event.KeyAdapter;
1.5 +0 -3 e/src/jsrc/org/quasiliteral/astro/ASTBuilder.java
Index: ASTBuilder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/ASTBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ASTBuilder.java 2001/12/10 06:11:03 1.4
+++ ASTBuilder.java 2001/12/10 20:30:09 1.5
@@ -1,9 +1,6 @@
package org.quasiliteral.astro;
-import org.erights.e.elib.prim.E;
import org.erights.e.elib.tables.Twine;
-
-import java.math.BigInteger;
//This file is hereby placed in the public domain
1.4 +2 -2 e/src/jsrc/org/quasiliteral/astro/AstroAST.java
Index: AstroAST.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/AstroAST.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AstroAST.java 2001/12/10 06:11:03 1.3
+++ AstroAST.java 2001/12/10 20:30:09 1.4
@@ -4,9 +4,9 @@
import antlr.CommonToken;
import antlr.Token;
import antlr.collections.AST;
-import org.erights.e.elib.tables.Twine;
-import org.erights.e.elib.tables.ConstList;
import org.erights.e.elib.prim.E;
+import org.erights.e.elib.tables.ConstList;
+import org.erights.e.elib.tables.Twine;
/**
* AST node implementation which stores tokens explicitly.
1.7 +1 -3 e/src/jsrc/org/quasiliteral/astro/AstroTag.java
Index: AstroTag.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/AstroTag.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- AstroTag.java 2001/12/10 16:55:33 1.6
+++ AstroTag.java 2001/12/10 20:30:09 1.7
@@ -1,12 +1,10 @@
package org.quasiliteral.astro;
-import org.erights.e.elib.ref.Ref;
+import org.erights.e.elib.prim.E;
import org.erights.e.elib.serial.PassByConstruction;
import org.erights.e.elib.serial.Persistent;
import org.erights.e.elib.tables.Twine;
-import org.erights.e.elib.prim.E;
import org.quasiliteral.syntax.BaseLexer;
-import antlr.Token;
import java.math.BigInteger;
1.14 +2 -2 e/src/jsrc/org/quasiliteral/astro/AstroToken.java
Index: AstroToken.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/AstroToken.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- AstroToken.java 2001/12/10 16:55:33 1.13
+++ AstroToken.java 2001/12/10 20:30:09 1.14
@@ -3,9 +3,9 @@
import antlr.Token;
import org.erights.e.elib.base.SourceSpan;
import org.erights.e.elib.prim.E;
-import org.erights.e.elib.tables.Twine;
-import org.erights.e.elib.tables.EmptyTwine;
import org.erights.e.elib.tables.ConstList;
+import org.erights.e.elib.tables.EmptyTwine;
+import org.erights.e.elib.tables.Twine;
/**
* A Kind of Antlr {@link Token} that preserves all the information in a
1.10 +0 -1 e/src/jsrc/org/quasiliteral/astro/BaseSchema.java
Index: BaseSchema.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/BaseSchema.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- BaseSchema.java 2001/12/10 16:55:33 1.9
+++ BaseSchema.java 2001/12/10 20:30:09 1.10
@@ -6,7 +6,6 @@
import org.erights.e.elib.tables.FlexList;
import org.erights.e.elib.tables.FlexMap;
import org.erights.e.elib.tables.Twine;
-import org.quasiliteral.syntax.BaseLexer;
import java.math.BigInteger;
1.3 +1 -1 e/src/jsrc/org/quasiliteral/quasiterm/QuasiBuilder.java
Index: QuasiBuilder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/quasiterm/QuasiBuilder.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- QuasiBuilder.java 2001/12/06 09:26:41 1.2
+++ QuasiBuilder.java 2001/12/10 20:30:09 1.3
@@ -1,8 +1,8 @@
package org.quasiliteral.quasiterm;
-import org.quasiliteral.astro.AstroBuilder;
import org.quasiliteral.astro.Astro;
import org.quasiliteral.astro.AstroArg;
+import org.quasiliteral.astro.AstroBuilder;
//This file is hereby placed in the public domain
1.5 +2 -2 e/src/jsrc/org/quasiliteral/quasiterm/QuasiBuilderAdaptor.java
Index: QuasiBuilderAdaptor.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/quasiterm/QuasiBuilderAdaptor.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- QuasiBuilderAdaptor.java 2001/12/10 16:55:33 1.4
+++ QuasiBuilderAdaptor.java 2001/12/10 20:30:09 1.5
@@ -1,11 +1,11 @@
package org.quasiliteral.quasiterm;
import org.erights.e.elib.tables.Twine;
+import org.quasiliteral.astro.Astro;
+import org.quasiliteral.astro.AstroArg;
import org.quasiliteral.astro.AstroBuilder;
import org.quasiliteral.astro.AstroSchema;
-import org.quasiliteral.astro.Astro;
import org.quasiliteral.astro.AstroTag;
-import org.quasiliteral.astro.AstroArg;
import org.quasiliteral.term.TermBuilder;
import java.math.BigInteger;
1.6 +1 -1 e/src/jsrc/org/quasiliteral/syntax/BaseLexer.java
Index: BaseLexer.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/syntax/BaseLexer.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- BaseLexer.java 2001/12/10 06:11:03 1.5
+++ BaseLexer.java 2001/12/10 20:30:09 1.6
@@ -1,8 +1,8 @@
package org.quasiliteral.syntax;
import org.erights.e.elib.tables.Twine;
-import org.quasiliteral.astro.AstroBuilder;
import org.quasiliteral.astro.Astro;
+import org.quasiliteral.astro.AstroBuilder;
import org.quasiliteral.astro.AstroTag;
import java.io.IOException;
1.1 e/src/jsrc/org/quasiliteral/syntax/EYaccFixer.java
Index: EYaccFixer.java
===================================================================
package org.quasiliteral.syntax;
import org.erights.e.elib.prim.E;
import org.erights.e.elib.tables.FlexList;
import org.erights.e.elib.tables.Twine;
import org.erights.e.meta.java.io.FileSugar;
import org.quasiliteral.base.MatchMaker;
import org.quasiliteral.base.ValueMaker;
import org.quasiliteral.text.SimpleQuasiParser;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
/**
* Post-processes the output of byacc/Java (Berkeley Yacc for Java) so
* that it is valid Java. <p>
*
* The problem with byacc/Java's output is simply that it's too
* large. Specifically, Java turns the table initializers into
* bytecodes to perform the initialization. These bytecodes exceed
* Java's limit of 64KB per method. To work around this, EYaccFixer
* parses the table initializations, serializes the resulting tables
* into a file to be included as a resource in the e.jar file, and
* changes the table initializations to initialize these tables by
* unserializing these resources.
*
* @author <a href="mailto:markm@erights.org">Mark S. Miller</a>
*/
public class EYaccFixer {
static /*package*/ final SimpleQuasiParser QParser =
SimpleQuasiParser.THE_ONE;
static private final MatchMaker ParseQPatt =
QParser.matchMaker(Twine.fromString(
"@{0}\n" +
"final static short yytable[] = {@{1}};\n" +
"final static short yycheck[] = {@{2}};\n" +
"@{3}int yyparse()@{4}"
));
static private final String rName
= "org/erights/e/elang/syntax/ParserTables.data";
static private final ValueMaker ParseQExpr =
QParser.valueMaker(Twine.fromString(
"// Fixed by EYaccFixer to meet jvm size limits\n" +
"${0}\n\n" +
"//These two tables are not statically initialized, but rather\n" +
"//initialized on first use, so that a failure to initialize them\n" +
"//can successfully report the problem.\n" +
"static private short[] yytable = null;\n" +
"static private short[] yycheck = null;\n" +
"/** Ensures that yytable and yycheck are initialized. */\n" +
"static private void initTables() {\n" +
" if (null != yycheck) {\n" +
" return;\n" +
" }\n" +
" try {\n" +
" String rName = \"" + rName + "\";\n" +
" InputStream inp = ClassLoader.getSystemResourceAsStream(rName);\n" +
" if (null == inp) {\n" +
" throw new RuntimeException(rName + \" not found\");\n" +
" }\n" +
" ObjectInput obInp = new ObjectInputStream(inp);\n" +
" yytable = (short[])obInp.readObject();\n" +
" yycheck = (short[])obInp.readObject();\n" +
" long hash = EYaccFixer.checkhash(yytable, yycheck);\n" +
" if (hash != ${5}) {\n" +
" throw new RuntimeException(rName + \" bad checkhash: \" +\n" +
" hash);\n" +
" }\n" +
" } catch (Exception ex) {\n" +
" throw ThrowableSugar.backtrace(ex, \"initializing parser\");\n" +
" }\n" +
"}\n\n" +
"${3}int yyparse() ${4}"
));
/**
* Used to make sure that the tables read in to the transformed parser
* are the same as the tables extracted from the pre-transformed
* parser. Ideally, this should be a hash function that's good at
* detecting errors, like a CRC. But for now we just do something crude.
*/
static public long checkhash(short[] yytable, short[] yycheck) {
long result = 0;
for (int i = 0; i < yytable.length; i++) {
result = result * 3 + yytable[i];
}
for (int i = 0; i < yycheck.length; i++) {
result = result * 3 + yycheck[i];
}
return result;
}
static private final Object[] NO_ARGS = {};
static private short[] eatMyShorts(String numbers) {
FlexList result = FlexList.fromType(Short.TYPE, 1000);
int len = numbers.length();
int i = 0;
while (i < len && !Character.isDigit(numbers.charAt(i))) {
i++;
}
while (i < len) {
int num = 0;
while (i < len && Character.isDigit(numbers.charAt(i))) {
num = num * 10 + Character.digit(numbers.charAt(i), 10);
i++;
}
if (num > Short.MAX_VALUE || num < 0) {
throw new ArithmeticException("Must be a positive short");
}
result.push(new Short((short)num));
while (i < len && !Character.isDigit(numbers.charAt(i))) {
i++;
}
}
return (short[])result.getArray(Short.TYPE);
}
/**
*
*/
static public void main(String[] args) throws IOException {
if (args.length != 2) {
System.err.println("usage: EYaccFixer srcDir destDir");
System.exit(-1);
}
File parseFile = new File(args[0], "EParser.java");
File dataFile = new File(args[1], rName);
File dataDir = new File(dataFile.getParent());
dataDir.mkdirs();
String original = FileSugar.getText(parseFile);
FlexList partsList = ParseQPatt.matchBind(NO_ARGS, original).diverge();
if (null == partsList) {
throw new NullPointerException("didn't recognize yacc output");
}
short[] yytable = eatMyShorts(partsList.get(1).toString());
short[] yycheck = eatMyShorts(partsList.get(2).toString());
OutputStream outp = new FileOutputStream(dataFile);
ObjectOutput obOutp = new ObjectOutputStream(outp);
obOutp.writeObject(yytable);
obOutp.writeObject(yycheck);
obOutp.flush(); //redundant, but I'm paranoid.
obOutp.close();
String hash = new Long(checkhash(yytable, yycheck)).toString() + "L";
partsList.push(hash);
String[] parts = (String[])partsList.getArray(String.class);
FileSugar.setText(parseFile, E.toString(ParseQExpr.substitute(parts)));
System.out.println("parser generated");
}
}
1.15 +11 -5 e/src/jsrc/org/quasiliteral/term/Term.java
Index: Term.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/Term.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- Term.java 2001/12/10 16:55:33 1.14
+++ Term.java 2001/12/10 20:30:10 1.15
@@ -1,17 +1,17 @@
package org.quasiliteral.term;
-import org.erights.e.elib.prim.StaticMaker;
+import org.erights.e.develop.format.StringHelper;
+import org.erights.e.elib.eio.TextWriter;
import org.erights.e.elib.prim.E;
+import org.erights.e.elib.prim.StaticMaker;
import org.erights.e.elib.serial.PassByConstruction;
import org.erights.e.elib.serial.Persistent;
import org.erights.e.elib.tables.ConstList;
import org.erights.e.elib.tables.Selfless;
import org.erights.e.elib.tables.Twine;
-import org.erights.e.elib.eio.TextWriter;
-import org.erights.e.develop.format.StringHelper;
-import org.quasiliteral.astro.AstroBuilder;
import org.quasiliteral.astro.Astro;
import org.quasiliteral.astro.AstroArg;
+import org.quasiliteral.astro.AstroBuilder;
import org.quasiliteral.astro.AstroTag;
import java.io.IOException;
@@ -178,8 +178,14 @@
}
public Object getOptArgData(short tagCode) {
+ //This is too much reporting work when the error doesn't happen.
+ //Should consider putting into a thunk instead.
+ AstroTag optTag = myTag.getSchema().getOptTagForCode(tagCode);
E.require(tagCode == myTag.getOptTagCode(),
- "Tag mismatch: ", myTag, " vs ", new Integer(tagCode));
+ "Tag mismatch: ", myTag, " vs ",
+ (null == optTag ?
+ (Object)new Integer(tagCode) :
+ (Object)optTag));
return ((Term)myArgs.get(0)).getOptData();
}
1.15 +3 -6 e/src/jsrc/org/quasiliteral/term/TermBuilder.java
Index: TermBuilder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/TermBuilder.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- TermBuilder.java 2001/12/10 16:55:33 1.14
+++ TermBuilder.java 2001/12/10 20:30:10 1.15
@@ -2,17 +2,14 @@
import org.erights.e.elib.prim.E;
import org.erights.e.elib.tables.ConstList;
-import org.erights.e.elib.tables.Twine;
import org.erights.e.elib.tables.FlexList;
-import org.quasiliteral.astro.AstroBuilder;
-import org.quasiliteral.astro.AstroSchema;
+import org.erights.e.elib.tables.Twine;
import org.quasiliteral.astro.ASTBuilder;
import org.quasiliteral.astro.Astro;
-import org.quasiliteral.astro.AstroTag;
import org.quasiliteral.astro.AstroArg;
+import org.quasiliteral.astro.AstroSchema;
+import org.quasiliteral.astro.AstroTag;
import org.quasiliteral.astro.BaseBuilder;
-
-import java.math.BigInteger;
//This file is hereby placed in the public domain
1.12 +1 -1 e/src/jsrc/org/quasiliteral/term/TermLexer.java
Index: TermLexer.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/TermLexer.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- TermLexer.java 2001/12/06 09:26:41 1.11
+++ TermLexer.java 2001/12/10 20:30:10 1.12
@@ -23,8 +23,8 @@
import org.erights.e.elib.eio.TextWriter;
import org.erights.e.elib.tables.EmptyTwine;
import org.erights.e.elib.tables.Twine;
-import org.quasiliteral.astro.AstroBuilder;
import org.quasiliteral.astro.Astro;
+import org.quasiliteral.astro.AstroBuilder;
import org.quasiliteral.syntax.BaseLexer;
import org.quasiliteral.syntax.FileFeeder;
import org.quasiliteral.syntax.LineFeeder;
1.2 +1 -1 e/src/jsrc/org/quasiliteral/text/SimpleQuasiParser.java
Index: SimpleQuasiParser.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/text/SimpleQuasiParser.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SimpleQuasiParser.java 2001/12/10 18:27:01 1.1
+++ SimpleQuasiParser.java 2001/12/10 20:30:10 1.2
@@ -21,10 +21,10 @@
import org.erights.e.elib.tables.IdentityCacheTable;
import org.erights.e.elib.tables.Twine;
-import org.quasiliteral.base.ValueMaker;
import org.quasiliteral.base.MatchMaker;
import org.quasiliteral.base.QuasiExprParser;
import org.quasiliteral.base.QuasiPatternParser;
+import org.quasiliteral.base.ValueMaker;
/**
* The default -- and simplest -- of the quasi parsers
1.2 +1 -1 e/src/jsrc/org/quasiliteral/text/Substituter.java
Index: Substituter.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/text/Substituter.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Substituter.java 2001/12/10 18:27:01 1.1
+++ Substituter.java 2001/12/10 20:30:10 1.2
@@ -25,8 +25,8 @@
import org.erights.e.elib.tables.ConstList;
import org.erights.e.elib.tables.FlexList;
import org.erights.e.elib.tables.Twine;
-import org.quasiliteral.base.ValueMaker;
import org.quasiliteral.base.MatchMaker;
+import org.quasiliteral.base.ValueMaker;
import java.io.StringWriter;