[e-cvs] cvs commit: e/src/jsrc/org/quasiliteral/term QuasiBuilder.java QuasiBuilderAdaptor.java TermParser.java term.y
markm@eros.cs.jhu.edu
markm@eros.cs.jhu.edu
Sat, 22 Dec 2001 01:46:56 -0500
markm 01/12/22 01:46:56
Modified: src/jsrc/org/quasiliteral/astro Astro.java AstroArg.java
src/jsrc/org/quasiliteral/quasiterm QAstro.java
QBuilder.java QSome.java
src/jsrc/org/quasiliteral/term QuasiBuilder.java
QuasiBuilderAdaptor.java TermParser.java term.y
Log:
we now do nested quantifiers
Revision Changes Path
1.10 +0 -9 e/src/jsrc/org/quasiliteral/astro/Astro.java
Index: Astro.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/Astro.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Astro.java 2001/12/12 06:35:58 1.9
+++ Astro.java 2001/12/22 06:46:55 1.10
@@ -76,15 +76,6 @@
String getOptArgString(short tagCode);
/**
- * What source text was originally lexed or parsed to produce this token?
- * <p>
- * The source-span annotations on the text are normally the significant
- * part, not the text itself. Absence of source information is indicated
- * with an empty string, rather than null.
- */
- Twine getSource();
-
- /**
* @return :(ConstList of(AstroArg)); In most domains, AstroArg is the
* same as Astro, so this usually returns (ConstList of(Astro)).
*/
1.3 +10 -0 e/src/jsrc/org/quasiliteral/astro/AstroArg.java
Index: AstroArg.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/astro/AstroArg.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AstroArg.java 2001/12/12 06:35:58 1.2
+++ AstroArg.java 2001/12/22 06:46:55 1.3
@@ -1,5 +1,7 @@
package org.quasiliteral.astro;
+import org.erights.e.elib.tables.Twine;
+
//This file is hereby placed in the public domain
/**
@@ -15,4 +17,12 @@
*/
public interface AstroArg {
+ /**
+ * What source text was originally lexed or parsed to produce this node?
+ * <p>
+ * The source-span annotations on the text are normally the significant
+ * part, not the text itself. Absence of source information is indicated
+ * with an empty string, rather than null.
+ */
+ Twine getSource();
}
1.3 +1 -17 e/src/jsrc/org/quasiliteral/quasiterm/QAstro.java
Index: QAstro.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/quasiterm/QAstro.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- QAstro.java 2001/12/22 05:46:10 1.2
+++ QAstro.java 2001/12/22 06:46:55 1.3
@@ -35,28 +35,12 @@
}
/**
- * Transitive snapshot through all substructure that's instanceof EList.
- */
- static private Object transSnapshot(Object thing) {
- if (!(thing instanceof EList)) {
- return thing;
- }
- EList list = (EList)thing;
- int len = list.size();
- Object[] result = new Object[len];
- for (int i = 0; i < len; i++) {
- result[i] = transSnapshot(list.get(i));
- }
- return ConstList.fromArray(result);
- }
-
- /**
*
*/
public ConstList matchBind(ConstList args, Object specimen) {
FlexList bindings = FlexList.make();
if (matchBind(args, specimen, bindings)) {
- return (ConstList)transSnapshot(bindings);
+ return bindings.snapshot();
} else {
return null;
}
1.6 +6 -8 e/src/jsrc/org/quasiliteral/quasiterm/QBuilder.java
Index: QBuilder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/quasiterm/QBuilder.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- QBuilder.java 2001/12/22 05:46:10 1.5
+++ QBuilder.java 2001/12/22 06:46:55 1.6
@@ -166,16 +166,14 @@
/**
*
*/
- public AstroArg some(Astro optTerm, String quant) {
+ public AstroArg some(AstroArg optSub, String quant) {
T.require(quant.length() == 1, "Must be single char: ", quant);
- Twine source;
- if (null == optTerm) {
- source = EmptyTwine.THE_ONE;
- } else {
- source = optTerm.getSource();
+ Twine source = EmptyTwine.THE_ONE;
+ if (null != optSub) {
+ source = optSub.getSource();
}
return new QSome(myBuilder,
- (QAstroArg)optTerm,
+ (QAstroArg)optSub,
quant.charAt(0),
source);
}
@@ -183,7 +181,7 @@
/**
*
*/
- public AstroArg group(Object args, String quant) {
+ public AstroArg group(Object args) {
throw new RuntimeException("XXX not yet implemented");
}
1.3 +18 -3 e/src/jsrc/org/quasiliteral/quasiterm/QSome.java
Index: QSome.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/quasiterm/QSome.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- QSome.java 2001/12/22 05:46:10 1.2
+++ QSome.java 2001/12/22 06:46:55 1.3
@@ -164,16 +164,31 @@
*/
/*package*/
int startShape(ConstList args,
- FlexList optBindings, int[] prefix,
+ FlexList optBindings,
+ int[] prefix,
int shapeSoFar) {
- throw new RuntimeException("XXX not yet implemented");
+ if (null == myOptSubPattern) {
+ return shapeSoFar;
+ } else {
+ return myOptSubPattern.startShape(args,
+ optBindings,
+ prefix,
+ shapeSoFar);
+ }
}
+ /**
+ *
+ */
/*package*/
void endShape(FlexList optBindings,
int[] prefix,
int shape) {
- throw new RuntimeException("XXX not yet implemented");
+ if (null == myOptSubPattern) {
+ // Do nothing.
+ } else {
+ myOptSubPattern.endShape(optBindings, prefix, shape);
+ }
}
/**
1.5 +3 -3 e/src/jsrc/org/quasiliteral/term/QuasiBuilder.java
Index: QuasiBuilder.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/QuasiBuilder.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- QuasiBuilder.java 2001/12/21 05:30:35 1.4
+++ QuasiBuilder.java 2001/12/22 06:46:56 1.5
@@ -75,17 +75,17 @@
* <p>
* Adds quant to the rank of optTerm.
*/
- AstroArg some(Astro optTerm, String quant);
+ AstroArg some(AstroArg optSub, String quant);
/**
* Treat the 'args' list as a repeating sequence.
* <p>
* Matches a consecutive sequence of subsequences matched by 'args'.
- * Adds quant to the rank of each arg.
+ * Doesn't affect rank since each arg is exactly once.
*
* @param args is a list of AstroArg.
*/
- AstroArg group(Object args, String quant);
+ AstroArg group(Object args);
/**
* On substitution, "evaluates" to 'args[litInt]'.
1.5 +2 -2 e/src/jsrc/org/quasiliteral/term/QuasiBuilderAdaptor.java
Index: QuasiBuilderAdaptor.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/QuasiBuilderAdaptor.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- QuasiBuilderAdaptor.java 2001/12/21 05:30:35 1.4
+++ QuasiBuilderAdaptor.java 2001/12/22 06:46:56 1.5
@@ -145,11 +145,11 @@
throw new RuntimeException("not quasi-ing");
}
- public AstroArg some(Astro optTerm, String quant) {
+ public AstroArg some(AstroArg optSub, String quant) {
throw new RuntimeException("not quasi-ing");
}
- public AstroArg group(Object args, String quant) {
+ public AstroArg group(Object args) {
throw new RuntimeException("not quasi-ing");
}
1.20 +39 -39 e/src/jsrc/org/quasiliteral/term/TermParser.java
Index: TermParser.java
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/TermParser.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- TermParser.java 2001/12/21 05:30:35 1.19
+++ TermParser.java 2001/12/22 06:46:56 1.20
@@ -172,52 +172,52 @@
};
final static short yylen[] = { 2,
1, 1, 4, 3, 1, 1, 2, 0, 1, 1,
- 3, 1, 3, 1, 3, 1, 2, 1, 1, 4,
+ 3, 1, 3, 1, 3, 1, 2, 1, 1, 3,
2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
4, 4,
};
final static short yydefred[] = { 0,
30, 26, 27, 28, 29, 0, 0, 0, 0, 1,
0, 5, 6, 0, 0, 19, 0, 22, 23, 24,
- 0, 0, 0, 0, 0, 14, 18, 0, 0, 0,
- 7, 0, 21, 17, 4, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 15, 31, 32, 3, 20,
+ 16, 0, 0, 0, 0, 0, 18, 0, 0, 0,
+ 7, 0, 21, 4, 0, 0, 0, 17, 0, 0,
+ 0, 20, 0, 0, 0, 31, 32, 3,
};
final static short yydgoto[] = { 9,
21, 11, 22, 12, 13, 14, 23, 24, 25, 26,
27,
};
final static short yysindex[] = { -31,
- 0, 0, 0, 0, 0, -36, -101, -98, 0, 0,
- -14, 0, 0, -33, -36, 0, -232, 0, 0, 0,
- -7, -63, -12, -90, -1, 0, 0, -221, -212, -36,
- 0, -20, 0, 0, 0, -36, -36, -36, -77, -72,
- 16, -7, -90, -1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -36, -114, -104, 0, 0,
+ -14, 0, 0, -33, -36, 0, -231, 0, 0, 0,
+ 0, -61, -10, -86, 9, -7, 0, -206, -202, -36,
+ 0, -4, 0, 0, -36, -36, -36, 0, -66, -64,
+ 21, 0, -86, 9, -7, 0, 0, 0,
};
final static short yyrindex[] = { 0,
- 0, 0, 0, 0, 0, -34, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -30, 0, 0, 0, 0,
8, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- -27, 0, -39, -26, -32, 0, 0, 0, 0, 21,
+ 0, 0, -39, -20, -28, -27, 0, 0, 0, 27,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, -21, -28, 0, 0, 0, 0, 0,
+ 0, 0, -19, -21, -26, 0, 0, 0,
};
final static short yygindex[] = { 0,
- 63, 0, 38, 0, 55, 0, 58, 34, 37, 39,
- -2,
+ 69, 0, 40, 0, 61, 0, 62, 41, 42, 43,
+ 3,
};
final static int YYTABLESIZE=230;
final static short yytable[] = { 7,
- 25, 9, 7, 15, 7, 20, 19, 2, 12, 16,
- 16, 12, 13, 16, 10, 13, 16, 10, 34, 11,
- 42, 28, 11, 36, 29, 30, 18, 8, 33, 35,
- 8, 36, 8, 37, 20, 19, 38, 39, 25, 49,
- 25, 25, 25, 25, 25, 2, 40, 46, 2, 2,
- 2, 2, 47, 9, 6, 18, 48, 17, 8, 6,
- 12, 8, 10, 25, 13, 16, 10, 41, 31, 43,
- 2, 11, 32, 44, 0, 0, 45, 0, 0, 0,
+ 25, 9, 7, 15, 7, 20, 19, 2, 28, 16,
+ 14, 15, 12, 14, 15, 12, 14, 15, 29, 13,
+ 10, 11, 13, 10, 11, 30, 18, 8, 38, 33,
+ 8, 34, 8, 35, 20, 19, 42, 36, 25, 35,
+ 25, 25, 25, 25, 25, 2, 37, 38, 2, 2,
+ 2, 2, 39, 9, 6, 18, 40, 17, 46, 6,
+ 47, 48, 8, 25, 12, 14, 15, 8, 10, 41,
+ 2, 13, 10, 11, 31, 43, 32, 44, 0, 45,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 12, 0, 25, 0, 13, 16, 0, 0, 0,
- 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 25, 0, 12, 14, 15, 0, 0,
+ 2, 0, 13, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 25, 0, 0, 0, 0, 0,
0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -232,17 +232,17 @@
1, 2, 3, 4, 5, 1, 2, 3, 4, 5,
};
final static short yycheck[] = { 36,
- 0, 41, 36, 40, 36, 42, 43, 0, 41, 46,
- 38, 44, 41, 41, 41, 44, 44, 44, 21, 41,
- 41, 123, 44, 44, 123, 40, 63, 64, 261, 93,
- 64, 44, 64, 124, 42, 43, 38, 259, 38, 42,
- 40, 41, 42, 43, 44, 38, 259, 125, 41, 42,
- 43, 44, 125, 93, 91, 63, 41, 94, 93, 91,
- 93, 41, 0, 63, 93, 93, 93, 30, 14, 36,
- 63, 93, 15, 37, -1, -1, 38, -1, -1, -1,
+ 0, 41, 36, 40, 36, 42, 43, 0, 123, 46,
+ 38, 38, 41, 41, 41, 44, 44, 44, 123, 41,
+ 41, 41, 44, 44, 44, 40, 63, 64, 26, 261,
+ 64, 93, 64, 44, 42, 43, 41, 124, 38, 44,
+ 40, 41, 42, 43, 44, 38, 38, 45, 41, 42,
+ 43, 44, 259, 93, 91, 63, 259, 94, 125, 91,
+ 125, 41, 93, 63, 93, 93, 93, 41, 0, 30,
+ 63, 93, 93, 93, 14, 35, 15, 36, -1, 37,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 124, -1, 93, -1, 124, 124, -1, -1, -1,
- 93, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 93, -1, 124, 124, 124, -1, -1,
+ 93, -1, 124, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 124, -1, -1, -1, -1, -1,
-1, 124, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -296,10 +296,10 @@
"bag : seq",
"bag : bag '&' seq",
"seq : term",
-"seq : term quant",
+"seq : seq quant",
"seq : quant",
"seq : '.'",
-"seq : '(' args ')' quant",
+"seq : '(' args ')'",
"seq : '^' LiteralString",
"quant : '?'",
"quant : '+'",
@@ -678,11 +678,11 @@
break;
case 17:
//#line 117 "term.y"
-{ yyval = b.some((Astro)val_peek(1), (String)val_peek(0)); }
+{ yyval = b.some((AstroArg)val_peek(1), (String)val_peek(0)); }
break;
case 18:
//#line 118 "term.y"
-{ yyval = b.some(null, (String)val_peek(0)); }
+{ yyval = b.some(null, (String)val_peek(0)); }
break;
case 19:
//#line 119 "term.y"
@@ -690,7 +690,7 @@
break;
case 20:
//#line 120 "term.y"
-{ yyval = b.group(val_peek(2), (String)val_peek(0)); }
+{ yyval = b.group(val_peek(1)); }
break;
case 21:
//#line 121 "term.y"
1.19 +4 -4 e/src/jsrc/org/quasiliteral/term/term.y
Index: term.y
===================================================================
RCS file: /cvs/e/src/jsrc/org/quasiliteral/term/term.y,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- term.y 2001/12/21 05:30:35 1.18
+++ term.y 2001/12/22 06:46:56 1.19
@@ -114,10 +114,10 @@
*/
seq:
term // An Astro is already a fine AstroArg
- | term quant { $$ = b.some((Astro)$1, (String)$2); }
- | quant { $$ = b.some(null, (String)$1); }
- | '.' { reserved("Use '@{_}' for now"); }
- | '(' args ')' quant { $$ = b.group($2, (String)$4); }
+ | seq quant { $$ = b.some((AstroArg)$1, (String)$2); }
+ | quant { $$ = b.some(null, (String)$1); }
+ | '.' { reserved("Use '@{_}' for now"); }
+ | '(' args ')' { $$ = b.group($2); }
| '^' LiteralString { $$ = b.unpack((Astro)$2); }
;