You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rj...@apache.org on 2014/07/10 01:37:39 UTC
svn commit: r1609338 [1/2] - in /lucene/dev/branches/branch_4x: ./ lucene/
lucene/expressions/
lucene/expressions/src/java/org/apache/lucene/expressions/
lucene/expressions/src/java/org/apache/lucene/expressions/js/
lucene/expressions/src/test/org/apac...
Author: rjernst
Date: Wed Jul 9 23:37:38 2014
New Revision: 1609338
URL: http://svn.apache.org/r1609338
Log:
LUCENE-5806: Extend expression grammar to allow advanced "variables"
Added:
lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/VariableContext.java
- copied unchanged from r1609337, lucene/dev/trunk/lucene/expressions/src/java/org/apache/lucene/expressions/js/VariableContext.java
lucene/dev/branches/branch_4x/lucene/expressions/src/test/org/apache/lucene/expressions/js/TestVariableContext.java
- copied unchanged from r1609337, lucene/dev/trunk/lucene/expressions/src/test/org/apache/lucene/expressions/js/TestVariableContext.java
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/lucene/ (props changed)
lucene/dev/branches/branch_4x/lucene/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/lucene/expressions/ (props changed)
lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/SimpleBindings.java
lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.g
lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.tokens
lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptCompiler.java
lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptLexer.java
lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptParser.java
lucene/dev/branches/branch_4x/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java
lucene/dev/branches/branch_4x/lucene/expressions/src/test/org/apache/lucene/expressions/js/TestJavascriptCompiler.java
Modified: lucene/dev/branches/branch_4x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/CHANGES.txt?rev=1609338&r1=1609337&r2=1609338&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/lucene/CHANGES.txt Wed Jul 9 23:37:38 2014
@@ -17,6 +17,10 @@ New Features
* LUCENE-4175, LUCENE-5714, LUCENE-5779: Index and search rectangles with spatial
BBoxSpatialStrategy using most predicates. Sort documents by relative overlap
of query areas or just by indexed shape area. (Ryan McKinley, David Smiley)
+
+* LUCENE-5806: Extend expressions grammar to support array access in variables.
+ Added helper class VariableContext to parse complex variable into pieces.
+ (Ryan Ernst)
API Changes
Modified: lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/SimpleBindings.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/SimpleBindings.java?rev=1609338&r1=1609337&r2=1609338&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/SimpleBindings.java (original)
+++ lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/SimpleBindings.java Wed Jul 9 23:37:38 2014
@@ -66,6 +66,11 @@ public final class SimpleBindings extend
public void add(SortField sortField) {
map.put(sortField.getField(), sortField);
}
+
+ /**
+ * Bind a {@link ValueSource} directly to the given name.
+ */
+ public void add(String name, ValueSource source) { map.put(name, source); }
/**
* Adds an Expression to the bindings.
@@ -83,6 +88,8 @@ public final class SimpleBindings extend
throw new IllegalArgumentException("Invalid reference '" + name + "'");
} else if (o instanceof Expression) {
return ((Expression)o).getValueSource(this);
+ } else if (o instanceof ValueSource) {
+ return ((ValueSource)o);
}
SortField field = (SortField) o;
switch(field.getType()) {
Modified: lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.g
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.g?rev=1609338&r1=1609337&r2=1609338&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.g (original)
+++ lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.g Wed Jul 9 23:37:38 2014
@@ -309,11 +309,11 @@ unary_operator
postfix
: primary
- | NAMESPACE_ID arguments -> ^(AT_CALL NAMESPACE_ID arguments?)
+ | VARIABLE arguments -> ^(AT_CALL VARIABLE arguments?)
;
primary
- : NAMESPACE_ID
+ : VARIABLE
| numeric
| AT_LPAREN! conditional AT_RPAREN!
;
@@ -330,8 +330,19 @@ numeric
// * Lexer Rules
// ***********************************************************************
-NAMESPACE_ID
- : ID (AT_DOT ID)*
+VARIABLE
+ : OBJECT (AT_DOT OBJECT)*
+ ;
+
+fragment
+OBJECT
+ : ID ARRAY*
+ ;
+
+fragment
+ARRAY
+ : '[' STRING ']'
+ | '[' DECIMALINTEGER ']'
;
fragment
@@ -339,6 +350,26 @@ ID
: ('a'..'z'|'A'..'Z'|'_'|'$') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'$')*
;
+fragment
+STRING
+ : '\'' SINGLE_STRING_CHAR* '\'' { }
+ | '"' DOUBLE_STRING_CHAR* '"'
+ ;
+
+fragment
+SINGLE_STRING_CHAR
+ : '\\\''
+ | '\\\\'
+ | ~('\\'|'\'')
+ ;
+
+fragment
+DOUBLE_STRING_CHAR
+ : '\\"'
+ | '\\\\'
+ | ~('\\'|'"')
+ ;
+
WS
: (' '|'\t'|'\n'|'\r')+ {skip();}
;
Modified: lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.tokens
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.tokens?rev=1609338&r1=1609337&r2=1609338&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.tokens (original)
+++ lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.tokens Wed Jul 9 23:37:38 2014
@@ -1,67 +1,72 @@
-AT_ADD=4
-AT_BIT_AND=5
-AT_BIT_NOT=6
-AT_BIT_OR=7
-AT_BIT_SHL=8
-AT_BIT_SHR=9
-AT_BIT_SHU=10
-AT_BIT_XOR=11
-AT_BOOL_AND=12
-AT_BOOL_NOT=13
-AT_BOOL_OR=14
-AT_CALL=15
-AT_COLON=16
-AT_COMMA=17
-AT_COMP_EQ=18
-AT_COMP_GT=19
-AT_COMP_GTE=20
-AT_COMP_LT=21
-AT_COMP_LTE=22
-AT_COMP_NEQ=23
-AT_COND_QUE=24
-AT_DIVIDE=25
-AT_DOT=26
-AT_LPAREN=27
-AT_MODULO=28
-AT_MULTIPLY=29
-AT_NEGATE=30
-AT_RPAREN=31
-AT_SUBTRACT=32
-DECIMAL=33
-DECIMALDIGIT=34
-DECIMALINTEGER=35
-EXPONENT=36
-HEX=37
-HEXDIGIT=38
-ID=39
-NAMESPACE_ID=40
-OCTAL=41
-OCTALDIGIT=42
-WS=43
-'!'=13
-'!='=23
-'%'=28
-'&&'=12
-'&'=5
-'('=27
-')'=31
-'*'=29
-'+'=4
-','=17
-'-'=32
-'.'=26
-'/'=25
-':'=16
-'<'=21
-'<<'=8
-'<='=22
-'=='=18
-'>'=19
-'>='=20
-'>>'=9
-'>>>'=10
-'?'=24
-'^'=11
-'|'=7
-'||'=14
-'~'=6
+ARRAY=4
+AT_ADD=5
+AT_BIT_AND=6
+AT_BIT_NOT=7
+AT_BIT_OR=8
+AT_BIT_SHL=9
+AT_BIT_SHR=10
+AT_BIT_SHU=11
+AT_BIT_XOR=12
+AT_BOOL_AND=13
+AT_BOOL_NOT=14
+AT_BOOL_OR=15
+AT_CALL=16
+AT_COLON=17
+AT_COMMA=18
+AT_COMP_EQ=19
+AT_COMP_GT=20
+AT_COMP_GTE=21
+AT_COMP_LT=22
+AT_COMP_LTE=23
+AT_COMP_NEQ=24
+AT_COND_QUE=25
+AT_DIVIDE=26
+AT_DOT=27
+AT_LPAREN=28
+AT_MODULO=29
+AT_MULTIPLY=30
+AT_NEGATE=31
+AT_RPAREN=32
+AT_SUBTRACT=33
+DECIMAL=34
+DECIMALDIGIT=35
+DECIMALINTEGER=36
+DOUBLE_STRING_CHAR=37
+EXPONENT=38
+HEX=39
+HEXDIGIT=40
+ID=41
+OBJECT=42
+OCTAL=43
+OCTALDIGIT=44
+SINGLE_STRING_CHAR=45
+STRING=46
+VARIABLE=47
+WS=48
+'!'=14
+'!='=24
+'%'=29
+'&&'=13
+'&'=6
+'('=28
+')'=32
+'*'=30
+'+'=5
+','=18
+'-'=33
+'.'=27
+'/'=26
+':'=17
+'<'=22
+'<<'=9
+'<='=23
+'=='=19
+'>'=20
+'>='=21
+'>>'=10
+'>>>'=11
+'?'=25
+'^'=12
+'|'=8
+'||'=15
+'~'=7
Modified: lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptCompiler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptCompiler.java?rev=1609338&r1=1609337&r2=1609338&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptCompiler.java (original)
+++ lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptCompiler.java Wed Jul 9 23:37:38 2014
@@ -260,8 +260,12 @@ public class JavascriptCompiler {
gen.cast(Type.DOUBLE_TYPE, expected);
break;
- case JavascriptParser.NAMESPACE_ID:
+ case JavascriptParser.VARIABLE:
int index;
+
+ // normalize quotes
+ text = normalizeQuotes(text);
+
if (externalsMap.containsKey(text)) {
index = externalsMap.get(text);
@@ -497,6 +501,46 @@ public class JavascriptCompiler {
throw exception;
}
}
+
+ private static String normalizeQuotes(String text) {
+ StringBuilder out = new StringBuilder(text.length());
+ boolean inDoubleQuotes = false;
+ for (int i = 0; i < text.length(); ++i) {
+ char c = text.charAt(i);
+ if (c == '\\') {
+ c = text.charAt(++i);
+ if (c == '\\') {
+ out.append('\\'); // re-escape the backslash
+ }
+ // no escape for double quote
+ } else if (c == '\'') {
+ if (inDoubleQuotes) {
+ // escape in output
+ out.append('\\');
+ } else {
+ int j = findSingleQuoteStringEnd(text, i);
+ out.append(text, i, j); // copy up to end quote (leave end for append below)
+ i = j;
+ }
+ } else if (c == '"') {
+ c = '\''; // change beginning/ending doubles to singles
+ inDoubleQuotes = !inDoubleQuotes;
+ }
+ out.append(c);
+ }
+ return out.toString();
+ }
+
+ private static int findSingleQuoteStringEnd(String text, int start) {
+ ++start; // skip beginning
+ while (text.charAt(start) != '\'') {
+ if (text.charAt(start) == '\\') {
+ ++start; // blindly consume escape value
+ }
+ ++start;
+ }
+ return start;
+ }
/**
* The default set of functions available to expressions.
Modified: lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptLexer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptLexer.java?rev=1609338&r1=1609337&r2=1609338&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptLexer.java (original)
+++ lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptLexer.java Wed Jul 9 23:37:38 2014
@@ -13,46 +13,51 @@ import java.util.ArrayList;
@SuppressWarnings("all")
class JavascriptLexer extends Lexer {
public static final int EOF=-1;
- public static final int AT_ADD=4;
- public static final int AT_BIT_AND=5;
- public static final int AT_BIT_NOT=6;
- public static final int AT_BIT_OR=7;
- public static final int AT_BIT_SHL=8;
- public static final int AT_BIT_SHR=9;
- public static final int AT_BIT_SHU=10;
- public static final int AT_BIT_XOR=11;
- public static final int AT_BOOL_AND=12;
- public static final int AT_BOOL_NOT=13;
- public static final int AT_BOOL_OR=14;
- public static final int AT_CALL=15;
- public static final int AT_COLON=16;
- public static final int AT_COMMA=17;
- public static final int AT_COMP_EQ=18;
- public static final int AT_COMP_GT=19;
- public static final int AT_COMP_GTE=20;
- public static final int AT_COMP_LT=21;
- public static final int AT_COMP_LTE=22;
- public static final int AT_COMP_NEQ=23;
- public static final int AT_COND_QUE=24;
- public static final int AT_DIVIDE=25;
- public static final int AT_DOT=26;
- public static final int AT_LPAREN=27;
- public static final int AT_MODULO=28;
- public static final int AT_MULTIPLY=29;
- public static final int AT_NEGATE=30;
- public static final int AT_RPAREN=31;
- public static final int AT_SUBTRACT=32;
- public static final int DECIMAL=33;
- public static final int DECIMALDIGIT=34;
- public static final int DECIMALINTEGER=35;
- public static final int EXPONENT=36;
- public static final int HEX=37;
- public static final int HEXDIGIT=38;
- public static final int ID=39;
- public static final int NAMESPACE_ID=40;
- public static final int OCTAL=41;
- public static final int OCTALDIGIT=42;
- public static final int WS=43;
+ public static final int ARRAY=4;
+ public static final int AT_ADD=5;
+ public static final int AT_BIT_AND=6;
+ public static final int AT_BIT_NOT=7;
+ public static final int AT_BIT_OR=8;
+ public static final int AT_BIT_SHL=9;
+ public static final int AT_BIT_SHR=10;
+ public static final int AT_BIT_SHU=11;
+ public static final int AT_BIT_XOR=12;
+ public static final int AT_BOOL_AND=13;
+ public static final int AT_BOOL_NOT=14;
+ public static final int AT_BOOL_OR=15;
+ public static final int AT_CALL=16;
+ public static final int AT_COLON=17;
+ public static final int AT_COMMA=18;
+ public static final int AT_COMP_EQ=19;
+ public static final int AT_COMP_GT=20;
+ public static final int AT_COMP_GTE=21;
+ public static final int AT_COMP_LT=22;
+ public static final int AT_COMP_LTE=23;
+ public static final int AT_COMP_NEQ=24;
+ public static final int AT_COND_QUE=25;
+ public static final int AT_DIVIDE=26;
+ public static final int AT_DOT=27;
+ public static final int AT_LPAREN=28;
+ public static final int AT_MODULO=29;
+ public static final int AT_MULTIPLY=30;
+ public static final int AT_NEGATE=31;
+ public static final int AT_RPAREN=32;
+ public static final int AT_SUBTRACT=33;
+ public static final int DECIMAL=34;
+ public static final int DECIMALDIGIT=35;
+ public static final int DECIMALINTEGER=36;
+ public static final int DOUBLE_STRING_CHAR=37;
+ public static final int EXPONENT=38;
+ public static final int HEX=39;
+ public static final int HEXDIGIT=40;
+ public static final int ID=41;
+ public static final int OBJECT=42;
+ public static final int OCTAL=43;
+ public static final int OCTALDIGIT=44;
+ public static final int SINGLE_STRING_CHAR=45;
+ public static final int STRING=46;
+ public static final int VARIABLE=47;
+ public static final int WS=48;
@Override
@@ -630,17 +635,17 @@ class JavascriptLexer extends Lexer {
}
// $ANTLR end "AT_SUBTRACT"
- // $ANTLR start "NAMESPACE_ID"
- public final void mNAMESPACE_ID() throws RecognitionException {
+ // $ANTLR start "VARIABLE"
+ public final void mVARIABLE() throws RecognitionException {
try {
- int _type = NAMESPACE_ID;
+ int _type = VARIABLE;
int _channel = DEFAULT_TOKEN_CHANNEL;
- // src/java/org/apache/lucene/expressions/js/Javascript.g:334:5: ( ID ( AT_DOT ID )* )
- // src/java/org/apache/lucene/expressions/js/Javascript.g:334:7: ID ( AT_DOT ID )*
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:334:5: ( OBJECT ( AT_DOT OBJECT )* )
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:334:7: OBJECT ( AT_DOT OBJECT )*
{
- mID();
+ mOBJECT();
- // src/java/org/apache/lucene/expressions/js/Javascript.g:334:10: ( AT_DOT ID )*
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:334:14: ( AT_DOT OBJECT )*
loop1:
while (true) {
int alt1=2;
@@ -651,11 +656,11 @@ class JavascriptLexer extends Lexer {
switch (alt1) {
case 1 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:334:11: AT_DOT ID
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:334:15: AT_DOT OBJECT
{
mAT_DOT();
- mID();
+ mOBJECT();
}
break;
@@ -674,13 +679,116 @@ class JavascriptLexer extends Lexer {
// do for sure before leaving
}
}
- // $ANTLR end "NAMESPACE_ID"
+ // $ANTLR end "VARIABLE"
+
+ // $ANTLR start "OBJECT"
+ public final void mOBJECT() throws RecognitionException {
+ try {
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:340:5: ( ID ( ARRAY )* )
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:340:7: ID ( ARRAY )*
+ {
+ mID();
+
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:340:10: ( ARRAY )*
+ loop2:
+ while (true) {
+ int alt2=2;
+ int LA2_0 = input.LA(1);
+ if ( (LA2_0=='[') ) {
+ alt2=1;
+ }
+
+ switch (alt2) {
+ case 1 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:340:10: ARRAY
+ {
+ mARRAY();
+
+ }
+ break;
+
+ default :
+ break loop2;
+ }
+ }
+
+ }
+
+ }
+ finally {
+ // do for sure before leaving
+ }
+ }
+ // $ANTLR end "OBJECT"
+
+ // $ANTLR start "ARRAY"
+ public final void mARRAY() throws RecognitionException {
+ try {
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:345:5: ( '[' STRING ']' | '[' DECIMALINTEGER ']' )
+ int alt3=2;
+ int LA3_0 = input.LA(1);
+ if ( (LA3_0=='[') ) {
+ int LA3_1 = input.LA(2);
+ if ( (LA3_1=='\"'||LA3_1=='\'') ) {
+ alt3=1;
+ }
+ else if ( ((LA3_1 >= '0' && LA3_1 <= '9')) ) {
+ alt3=2;
+ }
+
+ else {
+ int nvaeMark = input.mark();
+ try {
+ input.consume();
+ NoViableAltException nvae =
+ new NoViableAltException("", 3, 1, input);
+ throw nvae;
+ } finally {
+ input.rewind(nvaeMark);
+ }
+ }
+
+ }
+
+ else {
+ NoViableAltException nvae =
+ new NoViableAltException("", 3, 0, input);
+ throw nvae;
+ }
+
+ switch (alt3) {
+ case 1 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:345:7: '[' STRING ']'
+ {
+ match('[');
+ mSTRING();
+
+ match(']');
+ }
+ break;
+ case 2 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:346:7: '[' DECIMALINTEGER ']'
+ {
+ match('[');
+ mDECIMALINTEGER();
+
+ match(']');
+ }
+ break;
+
+ }
+ }
+ finally {
+ // do for sure before leaving
+ }
+ }
+ // $ANTLR end "ARRAY"
// $ANTLR start "ID"
public final void mID() throws RecognitionException {
try {
- // src/java/org/apache/lucene/expressions/js/Javascript.g:340:5: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' )* )
- // src/java/org/apache/lucene/expressions/js/Javascript.g:340:7: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' )*
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:351:5: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' )* )
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:351:7: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '$' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' )*
{
if ( input.LA(1)=='$'||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
input.consume();
@@ -690,16 +798,16 @@ class JavascriptLexer extends Lexer {
recover(mse);
throw mse;
}
- // src/java/org/apache/lucene/expressions/js/Javascript.g:340:35: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' )*
- loop2:
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:351:35: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' )*
+ loop4:
while (true) {
- int alt2=2;
- int LA2_0 = input.LA(1);
- if ( (LA2_0=='$'||(LA2_0 >= '0' && LA2_0 <= '9')||(LA2_0 >= 'A' && LA2_0 <= 'Z')||LA2_0=='_'||(LA2_0 >= 'a' && LA2_0 <= 'z')) ) {
- alt2=1;
+ int alt4=2;
+ int LA4_0 = input.LA(1);
+ if ( (LA4_0=='$'||(LA4_0 >= '0' && LA4_0 <= '9')||(LA4_0 >= 'A' && LA4_0 <= 'Z')||LA4_0=='_'||(LA4_0 >= 'a' && LA4_0 <= 'z')) ) {
+ alt4=1;
}
- switch (alt2) {
+ switch (alt4) {
case 1 :
// src/java/org/apache/lucene/expressions/js/Javascript.g:
{
@@ -715,7 +823,7 @@ class JavascriptLexer extends Lexer {
break;
default :
- break loop2;
+ break loop4;
}
}
@@ -728,25 +836,265 @@ class JavascriptLexer extends Lexer {
}
// $ANTLR end "ID"
+ // $ANTLR start "STRING"
+ public final void mSTRING() throws RecognitionException {
+ try {
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:356:5: ( '\\'' ( SINGLE_STRING_CHAR )* '\\'' | '\"' ( DOUBLE_STRING_CHAR )* '\"' )
+ int alt7=2;
+ int LA7_0 = input.LA(1);
+ if ( (LA7_0=='\'') ) {
+ alt7=1;
+ }
+ else if ( (LA7_0=='\"') ) {
+ alt7=2;
+ }
+
+ else {
+ NoViableAltException nvae =
+ new NoViableAltException("", 7, 0, input);
+ throw nvae;
+ }
+
+ switch (alt7) {
+ case 1 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:356:7: '\\'' ( SINGLE_STRING_CHAR )* '\\''
+ {
+ match('\'');
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:356:12: ( SINGLE_STRING_CHAR )*
+ loop5:
+ while (true) {
+ int alt5=2;
+ int LA5_0 = input.LA(1);
+ if ( ((LA5_0 >= '\u0000' && LA5_0 <= '&')||(LA5_0 >= '(' && LA5_0 <= '\uFFFF')) ) {
+ alt5=1;
+ }
+
+ switch (alt5) {
+ case 1 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:356:12: SINGLE_STRING_CHAR
+ {
+ mSINGLE_STRING_CHAR();
+
+ }
+ break;
+
+ default :
+ break loop5;
+ }
+ }
+
+ match('\'');
+
+ }
+ break;
+ case 2 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:357:7: '\"' ( DOUBLE_STRING_CHAR )* '\"'
+ {
+ match('\"');
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:357:11: ( DOUBLE_STRING_CHAR )*
+ loop6:
+ while (true) {
+ int alt6=2;
+ int LA6_0 = input.LA(1);
+ if ( ((LA6_0 >= '\u0000' && LA6_0 <= '!')||(LA6_0 >= '#' && LA6_0 <= '\uFFFF')) ) {
+ alt6=1;
+ }
+
+ switch (alt6) {
+ case 1 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:357:11: DOUBLE_STRING_CHAR
+ {
+ mDOUBLE_STRING_CHAR();
+
+ }
+ break;
+
+ default :
+ break loop6;
+ }
+ }
+
+ match('\"');
+ }
+ break;
+
+ }
+ }
+ finally {
+ // do for sure before leaving
+ }
+ }
+ // $ANTLR end "STRING"
+
+ // $ANTLR start "SINGLE_STRING_CHAR"
+ public final void mSINGLE_STRING_CHAR() throws RecognitionException {
+ try {
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:362:5: ( '\\\\\\'' | '\\\\\\\\' |~ ( '\\\\' | '\\'' ) )
+ int alt8=3;
+ int LA8_0 = input.LA(1);
+ if ( (LA8_0=='\\') ) {
+ int LA8_1 = input.LA(2);
+ if ( (LA8_1=='\'') ) {
+ alt8=1;
+ }
+ else if ( (LA8_1=='\\') ) {
+ alt8=2;
+ }
+
+ else {
+ int nvaeMark = input.mark();
+ try {
+ input.consume();
+ NoViableAltException nvae =
+ new NoViableAltException("", 8, 1, input);
+ throw nvae;
+ } finally {
+ input.rewind(nvaeMark);
+ }
+ }
+
+ }
+ else if ( ((LA8_0 >= '\u0000' && LA8_0 <= '&')||(LA8_0 >= '(' && LA8_0 <= '[')||(LA8_0 >= ']' && LA8_0 <= '\uFFFF')) ) {
+ alt8=3;
+ }
+
+ else {
+ NoViableAltException nvae =
+ new NoViableAltException("", 8, 0, input);
+ throw nvae;
+ }
+
+ switch (alt8) {
+ case 1 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:362:7: '\\\\\\''
+ {
+ match("\\'");
+
+ }
+ break;
+ case 2 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:363:7: '\\\\\\\\'
+ {
+ match("\\\\");
+
+ }
+ break;
+ case 3 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:364:7: ~ ( '\\\\' | '\\'' )
+ {
+ if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '&')||(input.LA(1) >= '(' && input.LA(1) <= '[')||(input.LA(1) >= ']' && input.LA(1) <= '\uFFFF') ) {
+ input.consume();
+ }
+ else {
+ MismatchedSetException mse = new MismatchedSetException(null,input);
+ recover(mse);
+ throw mse;
+ }
+ }
+ break;
+
+ }
+ }
+ finally {
+ // do for sure before leaving
+ }
+ }
+ // $ANTLR end "SINGLE_STRING_CHAR"
+
+ // $ANTLR start "DOUBLE_STRING_CHAR"
+ public final void mDOUBLE_STRING_CHAR() throws RecognitionException {
+ try {
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:369:5: ( '\\\\\"' | '\\\\\\\\' |~ ( '\\\\' | '\"' ) )
+ int alt9=3;
+ int LA9_0 = input.LA(1);
+ if ( (LA9_0=='\\') ) {
+ int LA9_1 = input.LA(2);
+ if ( (LA9_1=='\"') ) {
+ alt9=1;
+ }
+ else if ( (LA9_1=='\\') ) {
+ alt9=2;
+ }
+
+ else {
+ int nvaeMark = input.mark();
+ try {
+ input.consume();
+ NoViableAltException nvae =
+ new NoViableAltException("", 9, 1, input);
+ throw nvae;
+ } finally {
+ input.rewind(nvaeMark);
+ }
+ }
+
+ }
+ else if ( ((LA9_0 >= '\u0000' && LA9_0 <= '!')||(LA9_0 >= '#' && LA9_0 <= '[')||(LA9_0 >= ']' && LA9_0 <= '\uFFFF')) ) {
+ alt9=3;
+ }
+
+ else {
+ NoViableAltException nvae =
+ new NoViableAltException("", 9, 0, input);
+ throw nvae;
+ }
+
+ switch (alt9) {
+ case 1 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:369:7: '\\\\\"'
+ {
+ match("\\\"");
+
+ }
+ break;
+ case 2 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:370:7: '\\\\\\\\'
+ {
+ match("\\\\");
+
+ }
+ break;
+ case 3 :
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:371:7: ~ ( '\\\\' | '\"' )
+ {
+ if ( (input.LA(1) >= '\u0000' && input.LA(1) <= '!')||(input.LA(1) >= '#' && input.LA(1) <= '[')||(input.LA(1) >= ']' && input.LA(1) <= '\uFFFF') ) {
+ input.consume();
+ }
+ else {
+ MismatchedSetException mse = new MismatchedSetException(null,input);
+ recover(mse);
+ throw mse;
+ }
+ }
+ break;
+
+ }
+ }
+ finally {
+ // do for sure before leaving
+ }
+ }
+ // $ANTLR end "DOUBLE_STRING_CHAR"
+
// $ANTLR start "WS"
public final void mWS() throws RecognitionException {
try {
int _type = WS;
int _channel = DEFAULT_TOKEN_CHANNEL;
- // src/java/org/apache/lucene/expressions/js/Javascript.g:343:5: ( ( ' ' | '\\t' | '\\n' | '\\r' )+ )
- // src/java/org/apache/lucene/expressions/js/Javascript.g:343:7: ( ' ' | '\\t' | '\\n' | '\\r' )+
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:374:5: ( ( ' ' | '\\t' | '\\n' | '\\r' )+ )
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:374:7: ( ' ' | '\\t' | '\\n' | '\\r' )+
{
- // src/java/org/apache/lucene/expressions/js/Javascript.g:343:7: ( ' ' | '\\t' | '\\n' | '\\r' )+
- int cnt3=0;
- loop3:
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:374:7: ( ' ' | '\\t' | '\\n' | '\\r' )+
+ int cnt10=0;
+ loop10:
while (true) {
- int alt3=2;
- int LA3_0 = input.LA(1);
- if ( ((LA3_0 >= '\t' && LA3_0 <= '\n')||LA3_0=='\r'||LA3_0==' ') ) {
- alt3=1;
+ int alt10=2;
+ int LA10_0 = input.LA(1);
+ if ( ((LA10_0 >= '\t' && LA10_0 <= '\n')||LA10_0=='\r'||LA10_0==' ') ) {
+ alt10=1;
}
- switch (alt3) {
+ switch (alt10) {
case 1 :
// src/java/org/apache/lucene/expressions/js/Javascript.g:
{
@@ -762,11 +1110,11 @@ class JavascriptLexer extends Lexer {
break;
default :
- if ( cnt3 >= 1 ) break loop3;
- EarlyExitException eee = new EarlyExitException(3, input);
+ if ( cnt10 >= 1 ) break loop10;
+ EarlyExitException eee = new EarlyExitException(10, input);
throw eee;
}
- cnt3++;
+ cnt10++;
}
skip();
@@ -786,27 +1134,27 @@ class JavascriptLexer extends Lexer {
try {
int _type = DECIMAL;
int _channel = DEFAULT_TOKEN_CHANNEL;
- // src/java/org/apache/lucene/expressions/js/Javascript.g:347:5: ( DECIMALINTEGER AT_DOT ( DECIMALDIGIT )* ( EXPONENT )? | AT_DOT ( DECIMALDIGIT )+ ( EXPONENT )? | DECIMALINTEGER ( EXPONENT )? )
- int alt9=3;
- alt9 = dfa9.predict(input);
- switch (alt9) {
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:378:5: ( DECIMALINTEGER AT_DOT ( DECIMALDIGIT )* ( EXPONENT )? | AT_DOT ( DECIMALDIGIT )+ ( EXPONENT )? | DECIMALINTEGER ( EXPONENT )? )
+ int alt16=3;
+ alt16 = dfa16.predict(input);
+ switch (alt16) {
case 1 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:347:7: DECIMALINTEGER AT_DOT ( DECIMALDIGIT )* ( EXPONENT )?
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:378:7: DECIMALINTEGER AT_DOT ( DECIMALDIGIT )* ( EXPONENT )?
{
mDECIMALINTEGER();
mAT_DOT();
- // src/java/org/apache/lucene/expressions/js/Javascript.g:347:29: ( DECIMALDIGIT )*
- loop4:
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:378:29: ( DECIMALDIGIT )*
+ loop11:
while (true) {
- int alt4=2;
- int LA4_0 = input.LA(1);
- if ( ((LA4_0 >= '0' && LA4_0 <= '9')) ) {
- alt4=1;
+ int alt11=2;
+ int LA11_0 = input.LA(1);
+ if ( ((LA11_0 >= '0' && LA11_0 <= '9')) ) {
+ alt11=1;
}
- switch (alt4) {
+ switch (alt11) {
case 1 :
// src/java/org/apache/lucene/expressions/js/Javascript.g:
{
@@ -822,19 +1170,19 @@ class JavascriptLexer extends Lexer {
break;
default :
- break loop4;
+ break loop11;
}
}
- // src/java/org/apache/lucene/expressions/js/Javascript.g:347:43: ( EXPONENT )?
- int alt5=2;
- int LA5_0 = input.LA(1);
- if ( (LA5_0=='E'||LA5_0=='e') ) {
- alt5=1;
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:378:43: ( EXPONENT )?
+ int alt12=2;
+ int LA12_0 = input.LA(1);
+ if ( (LA12_0=='E'||LA12_0=='e') ) {
+ alt12=1;
}
- switch (alt5) {
+ switch (alt12) {
case 1 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:347:43: EXPONENT
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:378:43: EXPONENT
{
mEXPONENT();
@@ -846,21 +1194,21 @@ class JavascriptLexer extends Lexer {
}
break;
case 2 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:348:7: AT_DOT ( DECIMALDIGIT )+ ( EXPONENT )?
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:379:7: AT_DOT ( DECIMALDIGIT )+ ( EXPONENT )?
{
mAT_DOT();
- // src/java/org/apache/lucene/expressions/js/Javascript.g:348:14: ( DECIMALDIGIT )+
- int cnt6=0;
- loop6:
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:379:14: ( DECIMALDIGIT )+
+ int cnt13=0;
+ loop13:
while (true) {
- int alt6=2;
- int LA6_0 = input.LA(1);
- if ( ((LA6_0 >= '0' && LA6_0 <= '9')) ) {
- alt6=1;
+ int alt13=2;
+ int LA13_0 = input.LA(1);
+ if ( ((LA13_0 >= '0' && LA13_0 <= '9')) ) {
+ alt13=1;
}
- switch (alt6) {
+ switch (alt13) {
case 1 :
// src/java/org/apache/lucene/expressions/js/Javascript.g:
{
@@ -876,22 +1224,22 @@ class JavascriptLexer extends Lexer {
break;
default :
- if ( cnt6 >= 1 ) break loop6;
- EarlyExitException eee = new EarlyExitException(6, input);
+ if ( cnt13 >= 1 ) break loop13;
+ EarlyExitException eee = new EarlyExitException(13, input);
throw eee;
}
- cnt6++;
+ cnt13++;
}
- // src/java/org/apache/lucene/expressions/js/Javascript.g:348:28: ( EXPONENT )?
- int alt7=2;
- int LA7_0 = input.LA(1);
- if ( (LA7_0=='E'||LA7_0=='e') ) {
- alt7=1;
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:379:28: ( EXPONENT )?
+ int alt14=2;
+ int LA14_0 = input.LA(1);
+ if ( (LA14_0=='E'||LA14_0=='e') ) {
+ alt14=1;
}
- switch (alt7) {
+ switch (alt14) {
case 1 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:348:28: EXPONENT
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:379:28: EXPONENT
{
mEXPONENT();
@@ -903,19 +1251,19 @@ class JavascriptLexer extends Lexer {
}
break;
case 3 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:349:7: DECIMALINTEGER ( EXPONENT )?
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:380:7: DECIMALINTEGER ( EXPONENT )?
{
mDECIMALINTEGER();
- // src/java/org/apache/lucene/expressions/js/Javascript.g:349:22: ( EXPONENT )?
- int alt8=2;
- int LA8_0 = input.LA(1);
- if ( (LA8_0=='E'||LA8_0=='e') ) {
- alt8=1;
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:380:22: ( EXPONENT )?
+ int alt15=2;
+ int LA15_0 = input.LA(1);
+ if ( (LA15_0=='E'||LA15_0=='e') ) {
+ alt15=1;
}
- switch (alt8) {
+ switch (alt15) {
case 1 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:349:22: EXPONENT
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:380:22: EXPONENT
{
mEXPONENT();
@@ -942,21 +1290,21 @@ class JavascriptLexer extends Lexer {
try {
int _type = OCTAL;
int _channel = DEFAULT_TOKEN_CHANNEL;
- // src/java/org/apache/lucene/expressions/js/Javascript.g:353:5: ( '0' ( OCTALDIGIT )+ )
- // src/java/org/apache/lucene/expressions/js/Javascript.g:353:7: '0' ( OCTALDIGIT )+
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:384:5: ( '0' ( OCTALDIGIT )+ )
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:384:7: '0' ( OCTALDIGIT )+
{
match('0');
- // src/java/org/apache/lucene/expressions/js/Javascript.g:353:11: ( OCTALDIGIT )+
- int cnt10=0;
- loop10:
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:384:11: ( OCTALDIGIT )+
+ int cnt17=0;
+ loop17:
while (true) {
- int alt10=2;
- int LA10_0 = input.LA(1);
- if ( ((LA10_0 >= '0' && LA10_0 <= '7')) ) {
- alt10=1;
+ int alt17=2;
+ int LA17_0 = input.LA(1);
+ if ( ((LA17_0 >= '0' && LA17_0 <= '7')) ) {
+ alt17=1;
}
- switch (alt10) {
+ switch (alt17) {
case 1 :
// src/java/org/apache/lucene/expressions/js/Javascript.g:
{
@@ -972,11 +1320,11 @@ class JavascriptLexer extends Lexer {
break;
default :
- if ( cnt10 >= 1 ) break loop10;
- EarlyExitException eee = new EarlyExitException(10, input);
+ if ( cnt17 >= 1 ) break loop17;
+ EarlyExitException eee = new EarlyExitException(17, input);
throw eee;
}
- cnt10++;
+ cnt17++;
}
}
@@ -995,19 +1343,19 @@ class JavascriptLexer extends Lexer {
try {
int _type = HEX;
int _channel = DEFAULT_TOKEN_CHANNEL;
- // src/java/org/apache/lucene/expressions/js/Javascript.g:357:5: ( ( '0x' | '0X' ) ( HEXDIGIT )+ )
- // src/java/org/apache/lucene/expressions/js/Javascript.g:357:7: ( '0x' | '0X' ) ( HEXDIGIT )+
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:388:5: ( ( '0x' | '0X' ) ( HEXDIGIT )+ )
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:388:7: ( '0x' | '0X' ) ( HEXDIGIT )+
{
- // src/java/org/apache/lucene/expressions/js/Javascript.g:357:7: ( '0x' | '0X' )
- int alt11=2;
- int LA11_0 = input.LA(1);
- if ( (LA11_0=='0') ) {
- int LA11_1 = input.LA(2);
- if ( (LA11_1=='x') ) {
- alt11=1;
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:388:7: ( '0x' | '0X' )
+ int alt18=2;
+ int LA18_0 = input.LA(1);
+ if ( (LA18_0=='0') ) {
+ int LA18_1 = input.LA(2);
+ if ( (LA18_1=='x') ) {
+ alt18=1;
}
- else if ( (LA11_1=='X') ) {
- alt11=2;
+ else if ( (LA18_1=='X') ) {
+ alt18=2;
}
else {
@@ -1015,7 +1363,7 @@ class JavascriptLexer extends Lexer {
try {
input.consume();
NoViableAltException nvae =
- new NoViableAltException("", 11, 1, input);
+ new NoViableAltException("", 18, 1, input);
throw nvae;
} finally {
input.rewind(nvaeMark);
@@ -1026,20 +1374,20 @@ class JavascriptLexer extends Lexer {
else {
NoViableAltException nvae =
- new NoViableAltException("", 11, 0, input);
+ new NoViableAltException("", 18, 0, input);
throw nvae;
}
- switch (alt11) {
+ switch (alt18) {
case 1 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:357:8: '0x'
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:388:8: '0x'
{
match("0x");
}
break;
case 2 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:357:13: '0X'
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:388:13: '0X'
{
match("0X");
@@ -1048,17 +1396,17 @@ class JavascriptLexer extends Lexer {
}
- // src/java/org/apache/lucene/expressions/js/Javascript.g:357:19: ( HEXDIGIT )+
- int cnt12=0;
- loop12:
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:388:19: ( HEXDIGIT )+
+ int cnt19=0;
+ loop19:
while (true) {
- int alt12=2;
- int LA12_0 = input.LA(1);
- if ( ((LA12_0 >= '0' && LA12_0 <= '9')||(LA12_0 >= 'A' && LA12_0 <= 'F')||(LA12_0 >= 'a' && LA12_0 <= 'f')) ) {
- alt12=1;
+ int alt19=2;
+ int LA19_0 = input.LA(1);
+ if ( ((LA19_0 >= '0' && LA19_0 <= '9')||(LA19_0 >= 'A' && LA19_0 <= 'F')||(LA19_0 >= 'a' && LA19_0 <= 'f')) ) {
+ alt19=1;
}
- switch (alt12) {
+ switch (alt19) {
case 1 :
// src/java/org/apache/lucene/expressions/js/Javascript.g:
{
@@ -1074,11 +1422,11 @@ class JavascriptLexer extends Lexer {
break;
default :
- if ( cnt12 >= 1 ) break loop12;
- EarlyExitException eee = new EarlyExitException(12, input);
+ if ( cnt19 >= 1 ) break loop19;
+ EarlyExitException eee = new EarlyExitException(19, input);
throw eee;
}
- cnt12++;
+ cnt19++;
}
}
@@ -1095,43 +1443,43 @@ class JavascriptLexer extends Lexer {
// $ANTLR start "DECIMALINTEGER"
public final void mDECIMALINTEGER() throws RecognitionException {
try {
- // src/java/org/apache/lucene/expressions/js/Javascript.g:363:5: ( '0' | '1' .. '9' ( DECIMALDIGIT )* )
- int alt14=2;
- int LA14_0 = input.LA(1);
- if ( (LA14_0=='0') ) {
- alt14=1;
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:394:5: ( '0' | '1' .. '9' ( DECIMALDIGIT )* )
+ int alt21=2;
+ int LA21_0 = input.LA(1);
+ if ( (LA21_0=='0') ) {
+ alt21=1;
}
- else if ( ((LA14_0 >= '1' && LA14_0 <= '9')) ) {
- alt14=2;
+ else if ( ((LA21_0 >= '1' && LA21_0 <= '9')) ) {
+ alt21=2;
}
else {
NoViableAltException nvae =
- new NoViableAltException("", 14, 0, input);
+ new NoViableAltException("", 21, 0, input);
throw nvae;
}
- switch (alt14) {
+ switch (alt21) {
case 1 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:363:7: '0'
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:394:7: '0'
{
match('0');
}
break;
case 2 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:364:7: '1' .. '9' ( DECIMALDIGIT )*
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:395:7: '1' .. '9' ( DECIMALDIGIT )*
{
matchRange('1','9');
- // src/java/org/apache/lucene/expressions/js/Javascript.g:364:16: ( DECIMALDIGIT )*
- loop13:
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:395:16: ( DECIMALDIGIT )*
+ loop20:
while (true) {
- int alt13=2;
- int LA13_0 = input.LA(1);
- if ( ((LA13_0 >= '0' && LA13_0 <= '9')) ) {
- alt13=1;
+ int alt20=2;
+ int LA20_0 = input.LA(1);
+ if ( ((LA20_0 >= '0' && LA20_0 <= '9')) ) {
+ alt20=1;
}
- switch (alt13) {
+ switch (alt20) {
case 1 :
// src/java/org/apache/lucene/expressions/js/Javascript.g:
{
@@ -1147,7 +1495,7 @@ class JavascriptLexer extends Lexer {
break;
default :
- break loop13;
+ break loop20;
}
}
@@ -1165,8 +1513,8 @@ class JavascriptLexer extends Lexer {
// $ANTLR start "EXPONENT"
public final void mEXPONENT() throws RecognitionException {
try {
- // src/java/org/apache/lucene/expressions/js/Javascript.g:369:5: ( ( 'e' | 'E' ) ( '+' | '-' )? ( DECIMALDIGIT )+ )
- // src/java/org/apache/lucene/expressions/js/Javascript.g:369:7: ( 'e' | 'E' ) ( '+' | '-' )? ( DECIMALDIGIT )+
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:400:5: ( ( 'e' | 'E' ) ( '+' | '-' )? ( DECIMALDIGIT )+ )
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:400:7: ( 'e' | 'E' ) ( '+' | '-' )? ( DECIMALDIGIT )+
{
if ( input.LA(1)=='E'||input.LA(1)=='e' ) {
input.consume();
@@ -1176,13 +1524,13 @@ class JavascriptLexer extends Lexer {
recover(mse);
throw mse;
}
- // src/java/org/apache/lucene/expressions/js/Javascript.g:369:17: ( '+' | '-' )?
- int alt15=2;
- int LA15_0 = input.LA(1);
- if ( (LA15_0=='+'||LA15_0=='-') ) {
- alt15=1;
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:400:17: ( '+' | '-' )?
+ int alt22=2;
+ int LA22_0 = input.LA(1);
+ if ( (LA22_0=='+'||LA22_0=='-') ) {
+ alt22=1;
}
- switch (alt15) {
+ switch (alt22) {
case 1 :
// src/java/org/apache/lucene/expressions/js/Javascript.g:
{
@@ -1199,17 +1547,17 @@ class JavascriptLexer extends Lexer {
}
- // src/java/org/apache/lucene/expressions/js/Javascript.g:369:28: ( DECIMALDIGIT )+
- int cnt16=0;
- loop16:
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:400:28: ( DECIMALDIGIT )+
+ int cnt23=0;
+ loop23:
while (true) {
- int alt16=2;
- int LA16_0 = input.LA(1);
- if ( ((LA16_0 >= '0' && LA16_0 <= '9')) ) {
- alt16=1;
+ int alt23=2;
+ int LA23_0 = input.LA(1);
+ if ( ((LA23_0 >= '0' && LA23_0 <= '9')) ) {
+ alt23=1;
}
- switch (alt16) {
+ switch (alt23) {
case 1 :
// src/java/org/apache/lucene/expressions/js/Javascript.g:
{
@@ -1225,11 +1573,11 @@ class JavascriptLexer extends Lexer {
break;
default :
- if ( cnt16 >= 1 ) break loop16;
- EarlyExitException eee = new EarlyExitException(16, input);
+ if ( cnt23 >= 1 ) break loop23;
+ EarlyExitException eee = new EarlyExitException(23, input);
throw eee;
}
- cnt16++;
+ cnt23++;
}
}
@@ -1244,7 +1592,7 @@ class JavascriptLexer extends Lexer {
// $ANTLR start "DECIMALDIGIT"
public final void mDECIMALDIGIT() throws RecognitionException {
try {
- // src/java/org/apache/lucene/expressions/js/Javascript.g:374:5: ( '0' .. '9' )
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:405:5: ( '0' .. '9' )
// src/java/org/apache/lucene/expressions/js/Javascript.g:
{
if ( (input.LA(1) >= '0' && input.LA(1) <= '9') ) {
@@ -1267,7 +1615,7 @@ class JavascriptLexer extends Lexer {
// $ANTLR start "HEXDIGIT"
public final void mHEXDIGIT() throws RecognitionException {
try {
- // src/java/org/apache/lucene/expressions/js/Javascript.g:379:5: ( DECIMALDIGIT | 'a' .. 'f' | 'A' .. 'F' )
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:410:5: ( DECIMALDIGIT | 'a' .. 'f' | 'A' .. 'F' )
// src/java/org/apache/lucene/expressions/js/Javascript.g:
{
if ( (input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'F')||(input.LA(1) >= 'a' && input.LA(1) <= 'f') ) {
@@ -1290,7 +1638,7 @@ class JavascriptLexer extends Lexer {
// $ANTLR start "OCTALDIGIT"
public final void mOCTALDIGIT() throws RecognitionException {
try {
- // src/java/org/apache/lucene/expressions/js/Javascript.g:386:5: ( '0' .. '7' )
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:417:5: ( '0' .. '7' )
// src/java/org/apache/lucene/expressions/js/Javascript.g:
{
if ( (input.LA(1) >= '0' && input.LA(1) <= '7') ) {
@@ -1312,41 +1660,41 @@ class JavascriptLexer extends Lexer {
@Override
public void mTokens() throws RecognitionException {
- // src/java/org/apache/lucene/expressions/js/Javascript.g:1:8: ( AT_ADD | AT_BIT_AND | AT_BIT_NOT | AT_BIT_OR | AT_BIT_SHL | AT_BIT_SHR | AT_BIT_SHU | AT_BIT_XOR | AT_BOOL_AND | AT_BOOL_NOT | AT_BOOL_OR | AT_COLON | AT_COMMA | AT_COMP_EQ | AT_COMP_GT | AT_COMP_GTE | AT_COMP_LT | AT_COMP_LTE | AT_COMP_NEQ | AT_COND_QUE | AT_DIVIDE | AT_DOT | AT_LPAREN | AT_MODULO | AT_MULTIPLY | AT_RPAREN | AT_SUBTRACT | NAMESPACE_ID | WS | DECIMAL | OCTAL | HEX )
- int alt17=32;
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:1:8: ( AT_ADD | AT_BIT_AND | AT_BIT_NOT | AT_BIT_OR | AT_BIT_SHL | AT_BIT_SHR | AT_BIT_SHU | AT_BIT_XOR | AT_BOOL_AND | AT_BOOL_NOT | AT_BOOL_OR | AT_COLON | AT_COMMA | AT_COMP_EQ | AT_COMP_GT | AT_COMP_GTE | AT_COMP_LT | AT_COMP_LTE | AT_COMP_NEQ | AT_COND_QUE | AT_DIVIDE | AT_DOT | AT_LPAREN | AT_MODULO | AT_MULTIPLY | AT_RPAREN | AT_SUBTRACT | VARIABLE | WS | DECIMAL | OCTAL | HEX )
+ int alt24=32;
switch ( input.LA(1) ) {
case '+':
{
- alt17=1;
+ alt24=1;
}
break;
case '&':
{
- int LA17_2 = input.LA(2);
- if ( (LA17_2=='&') ) {
- alt17=9;
+ int LA24_2 = input.LA(2);
+ if ( (LA24_2=='&') ) {
+ alt24=9;
}
else {
- alt17=2;
+ alt24=2;
}
}
break;
case '~':
{
- alt17=3;
+ alt24=3;
}
break;
case '|':
{
- int LA17_4 = input.LA(2);
- if ( (LA17_4=='|') ) {
- alt17=11;
+ int LA24_4 = input.LA(2);
+ if ( (LA24_4=='|') ) {
+ alt24=11;
}
else {
- alt17=4;
+ alt24=4;
}
}
@@ -1356,16 +1704,16 @@ class JavascriptLexer extends Lexer {
switch ( input.LA(2) ) {
case '<':
{
- alt17=5;
+ alt24=5;
}
break;
case '=':
{
- alt17=18;
+ alt24=18;
}
break;
default:
- alt17=17;
+ alt24=17;
}
}
break;
@@ -1374,106 +1722,106 @@ class JavascriptLexer extends Lexer {
switch ( input.LA(2) ) {
case '>':
{
- int LA17_31 = input.LA(3);
- if ( (LA17_31=='>') ) {
- alt17=7;
+ int LA24_31 = input.LA(3);
+ if ( (LA24_31=='>') ) {
+ alt24=7;
}
else {
- alt17=6;
+ alt24=6;
}
}
break;
case '=':
{
- alt17=16;
+ alt24=16;
}
break;
default:
- alt17=15;
+ alt24=15;
}
}
break;
case '^':
{
- alt17=8;
+ alt24=8;
}
break;
case '!':
{
- int LA17_8 = input.LA(2);
- if ( (LA17_8=='=') ) {
- alt17=19;
+ int LA24_8 = input.LA(2);
+ if ( (LA24_8=='=') ) {
+ alt24=19;
}
else {
- alt17=10;
+ alt24=10;
}
}
break;
case ':':
{
- alt17=12;
+ alt24=12;
}
break;
case ',':
{
- alt17=13;
+ alt24=13;
}
break;
case '=':
{
- alt17=14;
+ alt24=14;
}
break;
case '?':
{
- alt17=20;
+ alt24=20;
}
break;
case '/':
{
- alt17=21;
+ alt24=21;
}
break;
case '.':
{
- int LA17_14 = input.LA(2);
- if ( ((LA17_14 >= '0' && LA17_14 <= '9')) ) {
- alt17=30;
+ int LA24_14 = input.LA(2);
+ if ( ((LA24_14 >= '0' && LA24_14 <= '9')) ) {
+ alt24=30;
}
else {
- alt17=22;
+ alt24=22;
}
}
break;
case '(':
{
- alt17=23;
+ alt24=23;
}
break;
case '%':
{
- alt17=24;
+ alt24=24;
}
break;
case '*':
{
- alt17=25;
+ alt24=25;
}
break;
case ')':
{
- alt17=26;
+ alt24=26;
}
break;
case '-':
{
- alt17=27;
+ alt24=27;
}
break;
case '$':
@@ -1531,7 +1879,7 @@ class JavascriptLexer extends Lexer {
case 'y':
case 'z':
{
- alt17=28;
+ alt24=28;
}
break;
case '\t':
@@ -1539,7 +1887,7 @@ class JavascriptLexer extends Lexer {
case '\r':
case ' ':
{
- alt17=29;
+ alt24=29;
}
break;
case '0':
@@ -1548,7 +1896,7 @@ class JavascriptLexer extends Lexer {
case 'X':
case 'x':
{
- alt17=32;
+ alt24=32;
}
break;
case '0':
@@ -1560,11 +1908,11 @@ class JavascriptLexer extends Lexer {
case '6':
case '7':
{
- alt17=31;
+ alt24=31;
}
break;
default:
- alt17=30;
+ alt24=30;
}
}
break;
@@ -1578,15 +1926,15 @@ class JavascriptLexer extends Lexer {
case '8':
case '9':
{
- alt17=30;
+ alt24=30;
}
break;
default:
NoViableAltException nvae =
- new NoViableAltException("", 17, 0, input);
+ new NoViableAltException("", 24, 0, input);
throw nvae;
}
- switch (alt17) {
+ switch (alt24) {
case 1 :
// src/java/org/apache/lucene/expressions/js/Javascript.g:1:10: AT_ADD
{
@@ -1777,35 +2125,35 @@ class JavascriptLexer extends Lexer {
}
break;
case 28 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:1:298: NAMESPACE_ID
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:1:298: VARIABLE
{
- mNAMESPACE_ID();
+ mVARIABLE();
}
break;
case 29 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:1:311: WS
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:1:307: WS
{
mWS();
}
break;
case 30 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:1:314: DECIMAL
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:1:310: DECIMAL
{
mDECIMAL();
}
break;
case 31 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:1:322: OCTAL
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:1:318: OCTAL
{
mOCTAL();
}
break;
case 32 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:1:328: HEX
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:1:324: HEX
{
mHEX();
@@ -1816,20 +2164,20 @@ class JavascriptLexer extends Lexer {
}
- protected DFA9 dfa9 = new DFA9(this);
- static final String DFA9_eotS =
+ protected DFA16 dfa16 = new DFA16(this);
+ static final String DFA16_eotS =
"\1\uffff\2\4\3\uffff\1\4";
- static final String DFA9_eofS =
+ static final String DFA16_eofS =
"\7\uffff";
- static final String DFA9_minS =
+ static final String DFA16_minS =
"\3\56\3\uffff\1\56";
- static final String DFA9_maxS =
+ static final String DFA16_maxS =
"\1\71\1\56\1\71\3\uffff\1\71";
- static final String DFA9_acceptS =
+ static final String DFA16_acceptS =
"\3\uffff\1\2\1\3\1\1\1\uffff";
- static final String DFA9_specialS =
+ static final String DFA16_specialS =
"\7\uffff}>";
- static final String[] DFA9_transitionS = {
+ static final String[] DFA16_transitionS = {
"\1\3\1\uffff\1\1\11\2",
"\1\5",
"\1\5\1\uffff\12\6",
@@ -1839,38 +2187,38 @@ class JavascriptLexer extends Lexer {
"\1\5\1\uffff\12\6"
};
- static final short[] DFA9_eot = DFA.unpackEncodedString(DFA9_eotS);
- static final short[] DFA9_eof = DFA.unpackEncodedString(DFA9_eofS);
- static final char[] DFA9_min = DFA.unpackEncodedStringToUnsignedChars(DFA9_minS);
- static final char[] DFA9_max = DFA.unpackEncodedStringToUnsignedChars(DFA9_maxS);
- static final short[] DFA9_accept = DFA.unpackEncodedString(DFA9_acceptS);
- static final short[] DFA9_special = DFA.unpackEncodedString(DFA9_specialS);
- static final short[][] DFA9_transition;
+ static final short[] DFA16_eot = DFA.unpackEncodedString(DFA16_eotS);
+ static final short[] DFA16_eof = DFA.unpackEncodedString(DFA16_eofS);
+ static final char[] DFA16_min = DFA.unpackEncodedStringToUnsignedChars(DFA16_minS);
+ static final char[] DFA16_max = DFA.unpackEncodedStringToUnsignedChars(DFA16_maxS);
+ static final short[] DFA16_accept = DFA.unpackEncodedString(DFA16_acceptS);
+ static final short[] DFA16_special = DFA.unpackEncodedString(DFA16_specialS);
+ static final short[][] DFA16_transition;
static {
- int numStates = DFA9_transitionS.length;
- DFA9_transition = new short[numStates][];
+ int numStates = DFA16_transitionS.length;
+ DFA16_transition = new short[numStates][];
for (int i=0; i<numStates; i++) {
- DFA9_transition[i] = DFA.unpackEncodedString(DFA9_transitionS[i]);
+ DFA16_transition[i] = DFA.unpackEncodedString(DFA16_transitionS[i]);
}
}
- protected class DFA9 extends DFA {
+ protected class DFA16 extends DFA {
- public DFA9(BaseRecognizer recognizer) {
+ public DFA16(BaseRecognizer recognizer) {
this.recognizer = recognizer;
- this.decisionNumber = 9;
- this.eot = DFA9_eot;
- this.eof = DFA9_eof;
- this.min = DFA9_min;
- this.max = DFA9_max;
- this.accept = DFA9_accept;
- this.special = DFA9_special;
- this.transition = DFA9_transition;
+ this.decisionNumber = 16;
+ this.eot = DFA16_eot;
+ this.eof = DFA16_eof;
+ this.min = DFA16_min;
+ this.max = DFA16_max;
+ this.accept = DFA16_accept;
+ this.special = DFA16_special;
+ this.transition = DFA16_transition;
}
@Override
public String getDescription() {
- return "346:1: DECIMAL : ( DECIMALINTEGER AT_DOT ( DECIMALDIGIT )* ( EXPONENT )? | AT_DOT ( DECIMALDIGIT )+ ( EXPONENT )? | DECIMALINTEGER ( EXPONENT )? );";
+ return "377:1: DECIMAL : ( DECIMALINTEGER AT_DOT ( DECIMALDIGIT )* ( EXPONENT )? | AT_DOT ( DECIMALDIGIT )+ ( EXPONENT )? | DECIMALINTEGER ( EXPONENT )? );";
}
}
Modified: lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptParser.java?rev=1609338&r1=1609337&r2=1609338&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptParser.java (original)
+++ lucene/dev/branches/branch_4x/lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptParser.java Wed Jul 9 23:37:38 2014
@@ -16,56 +16,62 @@ import org.antlr.runtime.tree.*;
@SuppressWarnings("all")
class JavascriptParser extends Parser {
public static final String[] tokenNames = new String[] {
- "<invalid>", "<EOR>", "<DOWN>", "<UP>", "AT_ADD", "AT_BIT_AND", "AT_BIT_NOT",
- "AT_BIT_OR", "AT_BIT_SHL", "AT_BIT_SHR", "AT_BIT_SHU", "AT_BIT_XOR", "AT_BOOL_AND",
- "AT_BOOL_NOT", "AT_BOOL_OR", "AT_CALL", "AT_COLON", "AT_COMMA", "AT_COMP_EQ",
- "AT_COMP_GT", "AT_COMP_GTE", "AT_COMP_LT", "AT_COMP_LTE", "AT_COMP_NEQ",
- "AT_COND_QUE", "AT_DIVIDE", "AT_DOT", "AT_LPAREN", "AT_MODULO", "AT_MULTIPLY",
- "AT_NEGATE", "AT_RPAREN", "AT_SUBTRACT", "DECIMAL", "DECIMALDIGIT", "DECIMALINTEGER",
- "EXPONENT", "HEX", "HEXDIGIT", "ID", "NAMESPACE_ID", "OCTAL", "OCTALDIGIT",
- "WS"
+ "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ARRAY", "AT_ADD", "AT_BIT_AND",
+ "AT_BIT_NOT", "AT_BIT_OR", "AT_BIT_SHL", "AT_BIT_SHR", "AT_BIT_SHU", "AT_BIT_XOR",
+ "AT_BOOL_AND", "AT_BOOL_NOT", "AT_BOOL_OR", "AT_CALL", "AT_COLON", "AT_COMMA",
+ "AT_COMP_EQ", "AT_COMP_GT", "AT_COMP_GTE", "AT_COMP_LT", "AT_COMP_LTE",
+ "AT_COMP_NEQ", "AT_COND_QUE", "AT_DIVIDE", "AT_DOT", "AT_LPAREN", "AT_MODULO",
+ "AT_MULTIPLY", "AT_NEGATE", "AT_RPAREN", "AT_SUBTRACT", "DECIMAL", "DECIMALDIGIT",
+ "DECIMALINTEGER", "DOUBLE_STRING_CHAR", "EXPONENT", "HEX", "HEXDIGIT",
+ "ID", "OBJECT", "OCTAL", "OCTALDIGIT", "SINGLE_STRING_CHAR", "STRING",
+ "VARIABLE", "WS"
};
public static final int EOF=-1;
- public static final int AT_ADD=4;
- public static final int AT_BIT_AND=5;
- public static final int AT_BIT_NOT=6;
- public static final int AT_BIT_OR=7;
- public static final int AT_BIT_SHL=8;
- public static final int AT_BIT_SHR=9;
- public static final int AT_BIT_SHU=10;
- public static final int AT_BIT_XOR=11;
- public static final int AT_BOOL_AND=12;
- public static final int AT_BOOL_NOT=13;
- public static final int AT_BOOL_OR=14;
- public static final int AT_CALL=15;
- public static final int AT_COLON=16;
- public static final int AT_COMMA=17;
- public static final int AT_COMP_EQ=18;
- public static final int AT_COMP_GT=19;
- public static final int AT_COMP_GTE=20;
- public static final int AT_COMP_LT=21;
- public static final int AT_COMP_LTE=22;
- public static final int AT_COMP_NEQ=23;
- public static final int AT_COND_QUE=24;
- public static final int AT_DIVIDE=25;
- public static final int AT_DOT=26;
- public static final int AT_LPAREN=27;
- public static final int AT_MODULO=28;
- public static final int AT_MULTIPLY=29;
- public static final int AT_NEGATE=30;
- public static final int AT_RPAREN=31;
- public static final int AT_SUBTRACT=32;
- public static final int DECIMAL=33;
- public static final int DECIMALDIGIT=34;
- public static final int DECIMALINTEGER=35;
- public static final int EXPONENT=36;
- public static final int HEX=37;
- public static final int HEXDIGIT=38;
- public static final int ID=39;
- public static final int NAMESPACE_ID=40;
- public static final int OCTAL=41;
- public static final int OCTALDIGIT=42;
- public static final int WS=43;
+ public static final int ARRAY=4;
+ public static final int AT_ADD=5;
+ public static final int AT_BIT_AND=6;
+ public static final int AT_BIT_NOT=7;
+ public static final int AT_BIT_OR=8;
+ public static final int AT_BIT_SHL=9;
+ public static final int AT_BIT_SHR=10;
+ public static final int AT_BIT_SHU=11;
+ public static final int AT_BIT_XOR=12;
+ public static final int AT_BOOL_AND=13;
+ public static final int AT_BOOL_NOT=14;
+ public static final int AT_BOOL_OR=15;
+ public static final int AT_CALL=16;
+ public static final int AT_COLON=17;
+ public static final int AT_COMMA=18;
+ public static final int AT_COMP_EQ=19;
+ public static final int AT_COMP_GT=20;
+ public static final int AT_COMP_GTE=21;
+ public static final int AT_COMP_LT=22;
+ public static final int AT_COMP_LTE=23;
+ public static final int AT_COMP_NEQ=24;
+ public static final int AT_COND_QUE=25;
+ public static final int AT_DIVIDE=26;
+ public static final int AT_DOT=27;
+ public static final int AT_LPAREN=28;
+ public static final int AT_MODULO=29;
+ public static final int AT_MULTIPLY=30;
+ public static final int AT_NEGATE=31;
+ public static final int AT_RPAREN=32;
+ public static final int AT_SUBTRACT=33;
+ public static final int DECIMAL=34;
+ public static final int DECIMALDIGIT=35;
+ public static final int DECIMALINTEGER=36;
+ public static final int DOUBLE_STRING_CHAR=37;
+ public static final int EXPONENT=38;
+ public static final int HEX=39;
+ public static final int HEXDIGIT=40;
+ public static final int ID=41;
+ public static final int OBJECT=42;
+ public static final int OCTAL=43;
+ public static final int OCTALDIGIT=44;
+ public static final int SINGLE_STRING_CHAR=45;
+ public static final int STRING=46;
+ public static final int VARIABLE=47;
+ public static final int WS=48;
// delegates
public Parser[] getDelegates() {
@@ -1271,8 +1277,8 @@ class JavascriptParser extends Parser {
case AT_LPAREN:
case DECIMAL:
case HEX:
- case NAMESPACE_ID:
case OCTAL:
+ case VARIABLE:
{
alt12=1;
}
@@ -1493,26 +1499,26 @@ class JavascriptParser extends Parser {
// $ANTLR start "postfix"
- // src/java/org/apache/lucene/expressions/js/Javascript.g:310:1: postfix : ( primary | NAMESPACE_ID arguments -> ^( AT_CALL NAMESPACE_ID ( arguments )? ) );
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:310:1: postfix : ( primary | VARIABLE arguments -> ^( AT_CALL VARIABLE ( arguments )? ) );
public final JavascriptParser.postfix_return postfix() throws RecognitionException {
JavascriptParser.postfix_return retval = new JavascriptParser.postfix_return();
retval.start = input.LT(1);
CommonTree root_0 = null;
- Token NAMESPACE_ID47=null;
+ Token VARIABLE47=null;
ParserRuleReturnScope primary46 =null;
ParserRuleReturnScope arguments48 =null;
- CommonTree NAMESPACE_ID47_tree=null;
- RewriteRuleTokenStream stream_NAMESPACE_ID=new RewriteRuleTokenStream(adaptor,"token NAMESPACE_ID");
+ CommonTree VARIABLE47_tree=null;
+ RewriteRuleTokenStream stream_VARIABLE=new RewriteRuleTokenStream(adaptor,"token VARIABLE");
RewriteRuleSubtreeStream stream_arguments=new RewriteRuleSubtreeStream(adaptor,"rule arguments");
try {
- // src/java/org/apache/lucene/expressions/js/Javascript.g:311:5: ( primary | NAMESPACE_ID arguments -> ^( AT_CALL NAMESPACE_ID ( arguments )? ) )
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:311:5: ( primary | VARIABLE arguments -> ^( AT_CALL VARIABLE ( arguments )? ) )
int alt14=2;
int LA14_0 = input.LA(1);
- if ( (LA14_0==NAMESPACE_ID) ) {
+ if ( (LA14_0==VARIABLE) ) {
int LA14_1 = input.LA(2);
if ( (LA14_1==EOF||(LA14_1 >= AT_ADD && LA14_1 <= AT_BIT_AND)||(LA14_1 >= AT_BIT_OR && LA14_1 <= AT_BOOL_AND)||LA14_1==AT_BOOL_OR||(LA14_1 >= AT_COLON && LA14_1 <= AT_DIVIDE)||(LA14_1 >= AT_MODULO && LA14_1 <= AT_MULTIPLY)||(LA14_1 >= AT_RPAREN && LA14_1 <= AT_SUBTRACT)) ) {
alt14=1;
@@ -1560,10 +1566,10 @@ class JavascriptParser extends Parser {
}
break;
case 2 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:312:7: NAMESPACE_ID arguments
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:312:7: VARIABLE arguments
{
- NAMESPACE_ID47=(Token)match(input,NAMESPACE_ID,FOLLOW_NAMESPACE_ID_in_postfix1168);
- stream_NAMESPACE_ID.add(NAMESPACE_ID47);
+ VARIABLE47=(Token)match(input,VARIABLE,FOLLOW_VARIABLE_in_postfix1168);
+ stream_VARIABLE.add(VARIABLE47);
pushFollow(FOLLOW_arguments_in_postfix1170);
arguments48=arguments();
@@ -1571,7 +1577,7 @@ class JavascriptParser extends Parser {
stream_arguments.add(arguments48.getTree());
// AST REWRITE
- // elements: NAMESPACE_ID, arguments
+ // elements: VARIABLE, arguments
// token labels:
// rule labels: retval
// token list labels:
@@ -1581,14 +1587,14 @@ class JavascriptParser extends Parser {
RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
root_0 = (CommonTree)adaptor.nil();
- // 312:30: -> ^( AT_CALL NAMESPACE_ID ( arguments )? )
+ // 312:26: -> ^( AT_CALL VARIABLE ( arguments )? )
{
- // src/java/org/apache/lucene/expressions/js/Javascript.g:312:33: ^( AT_CALL NAMESPACE_ID ( arguments )? )
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:312:29: ^( AT_CALL VARIABLE ( arguments )? )
{
CommonTree root_1 = (CommonTree)adaptor.nil();
root_1 = (CommonTree)adaptor.becomeRoot((CommonTree)adaptor.create(AT_CALL, "AT_CALL"), root_1);
- adaptor.addChild(root_1, stream_NAMESPACE_ID.nextNode());
- // src/java/org/apache/lucene/expressions/js/Javascript.g:312:56: ( arguments )?
+ adaptor.addChild(root_1, stream_VARIABLE.nextNode());
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:312:48: ( arguments )?
if ( stream_arguments.hasNext() ) {
adaptor.addChild(root_1, stream_arguments.nextTree());
}
@@ -1633,28 +1639,28 @@ class JavascriptParser extends Parser {
// $ANTLR start "primary"
- // src/java/org/apache/lucene/expressions/js/Javascript.g:315:1: primary : ( NAMESPACE_ID | numeric | AT_LPAREN ! conditional AT_RPAREN !);
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:315:1: primary : ( VARIABLE | numeric | AT_LPAREN ! conditional AT_RPAREN !);
public final JavascriptParser.primary_return primary() throws RecognitionException {
JavascriptParser.primary_return retval = new JavascriptParser.primary_return();
retval.start = input.LT(1);
CommonTree root_0 = null;
- Token NAMESPACE_ID49=null;
+ Token VARIABLE49=null;
Token AT_LPAREN51=null;
Token AT_RPAREN53=null;
ParserRuleReturnScope numeric50 =null;
ParserRuleReturnScope conditional52 =null;
- CommonTree NAMESPACE_ID49_tree=null;
+ CommonTree VARIABLE49_tree=null;
CommonTree AT_LPAREN51_tree=null;
CommonTree AT_RPAREN53_tree=null;
try {
- // src/java/org/apache/lucene/expressions/js/Javascript.g:316:5: ( NAMESPACE_ID | numeric | AT_LPAREN ! conditional AT_RPAREN !)
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:316:5: ( VARIABLE | numeric | AT_LPAREN ! conditional AT_RPAREN !)
int alt15=3;
switch ( input.LA(1) ) {
- case NAMESPACE_ID:
+ case VARIABLE:
{
alt15=1;
}
@@ -1678,14 +1684,14 @@ class JavascriptParser extends Parser {
}
switch (alt15) {
case 1 :
- // src/java/org/apache/lucene/expressions/js/Javascript.g:316:7: NAMESPACE_ID
+ // src/java/org/apache/lucene/expressions/js/Javascript.g:316:7: VARIABLE
{
root_0 = (CommonTree)adaptor.nil();
- NAMESPACE_ID49=(Token)match(input,NAMESPACE_ID,FOLLOW_NAMESPACE_ID_in_primary1198);
- NAMESPACE_ID49_tree = (CommonTree)adaptor.create(NAMESPACE_ID49);
- adaptor.addChild(root_0, NAMESPACE_ID49_tree);
+ VARIABLE49=(Token)match(input,VARIABLE,FOLLOW_VARIABLE_in_primary1198);
+ VARIABLE49_tree = (CommonTree)adaptor.create(VARIABLE49);
+ adaptor.addChild(root_0, VARIABLE49_tree);
}
break;
@@ -1776,7 +1782,7 @@ class JavascriptParser extends Parser {
// src/java/org/apache/lucene/expressions/js/Javascript.g:322:18: ( conditional ( AT_COMMA ! conditional )* )?
int alt17=2;
int LA17_0 = input.LA(1);
- if ( (LA17_0==AT_ADD||LA17_0==AT_BIT_NOT||LA17_0==AT_BOOL_NOT||LA17_0==AT_LPAREN||(LA17_0 >= AT_SUBTRACT && LA17_0 <= DECIMAL)||LA17_0==HEX||(LA17_0 >= NAMESPACE_ID && LA17_0 <= OCTAL)) ) {
+ if ( (LA17_0==AT_ADD||LA17_0==AT_BIT_NOT||LA17_0==AT_BOOL_NOT||LA17_0==AT_LPAREN||(LA17_0 >= AT_SUBTRACT && LA17_0 <= DECIMAL)||LA17_0==HEX||LA17_0==OCTAL||LA17_0==VARIABLE) ) {
alt17=1;
}
switch (alt17) {
@@ -1906,60 +1912,60 @@ class JavascriptParser extends Parser {
public static final BitSet FOLLOW_conditional_in_expression737 = new BitSet(new long[]{0x0000000000000000L});
public static final BitSet FOLLOW_EOF_in_expression739 = new BitSet(new long[]{0x0000000000000002L});
- public static final BitSet FOLLOW_logical_or_in_conditional757 = new BitSet(new long[]{0x0000000001000002L});
- public static final BitSet FOLLOW_AT_COND_QUE_in_conditional760 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_conditional_in_conditional763 = new BitSet(new long[]{0x0000000000010000L});
- public static final BitSet FOLLOW_AT_COLON_in_conditional765 = new BitSet(new long[]{0x0000032308002050L});
+ public static final BitSet FOLLOW_logical_or_in_conditional757 = new BitSet(new long[]{0x0000000002000002L});
+ public static final BitSet FOLLOW_AT_COND_QUE_in_conditional760 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_conditional_in_conditional763 = new BitSet(new long[]{0x0000000000020000L});
+ public static final BitSet FOLLOW_AT_COLON_in_conditional765 = new BitSet(new long[]{0x00008886100040A0L});
public static final BitSet FOLLOW_conditional_in_conditional768 = new BitSet(new long[]{0x0000000000000002L});
- public static final BitSet FOLLOW_logical_and_in_logical_or787 = new BitSet(new long[]{0x0000000000004002L});
- public static final BitSet FOLLOW_AT_BOOL_OR_in_logical_or790 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_logical_and_in_logical_or793 = new BitSet(new long[]{0x0000000000004002L});
- public static final BitSet FOLLOW_bitwise_or_in_logical_and812 = new BitSet(new long[]{0x0000000000001002L});
- public static final BitSet FOLLOW_AT_BOOL_AND_in_logical_and815 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_bitwise_or_in_logical_and818 = new BitSet(new long[]{0x0000000000001002L});
- public static final BitSet FOLLOW_bitwise_xor_in_bitwise_or837 = new BitSet(new long[]{0x0000000000000082L});
- public static final BitSet FOLLOW_AT_BIT_OR_in_bitwise_or840 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_bitwise_xor_in_bitwise_or843 = new BitSet(new long[]{0x0000000000000082L});
- public static final BitSet FOLLOW_bitwise_and_in_bitwise_xor862 = new BitSet(new long[]{0x0000000000000802L});
- public static final BitSet FOLLOW_AT_BIT_XOR_in_bitwise_xor865 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_bitwise_and_in_bitwise_xor868 = new BitSet(new long[]{0x0000000000000802L});
- public static final BitSet FOLLOW_equality_in_bitwise_and888 = new BitSet(new long[]{0x0000000000000022L});
- public static final BitSet FOLLOW_AT_BIT_AND_in_bitwise_and891 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_equality_in_bitwise_and894 = new BitSet(new long[]{0x0000000000000022L});
- public static final BitSet FOLLOW_relational_in_equality913 = new BitSet(new long[]{0x0000000000840002L});
- public static final BitSet FOLLOW_set_in_equality916 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_relational_in_equality925 = new BitSet(new long[]{0x0000000000840002L});
- public static final BitSet FOLLOW_shift_in_relational944 = new BitSet(new long[]{0x0000000000780002L});
- public static final BitSet FOLLOW_set_in_relational947 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_shift_in_relational964 = new BitSet(new long[]{0x0000000000780002L});
- public static final BitSet FOLLOW_additive_in_shift983 = new BitSet(new long[]{0x0000000000000702L});
- public static final BitSet FOLLOW_set_in_shift986 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_additive_in_shift999 = new BitSet(new long[]{0x0000000000000702L});
- public static final BitSet FOLLOW_multiplicative_in_additive1018 = new BitSet(new long[]{0x0000000100000012L});
- public static final BitSet FOLLOW_set_in_additive1021 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_multiplicative_in_additive1030 = new BitSet(new long[]{0x0000000100000012L});
- public static final BitSet FOLLOW_unary_in_multiplicative1049 = new BitSet(new long[]{0x0000000032000002L});
- public static final BitSet FOLLOW_set_in_multiplicative1052 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_unary_in_multiplicative1065 = new BitSet(new long[]{0x0000000032000002L});
+ public static final BitSet FOLLOW_logical_and_in_logical_or787 = new BitSet(new long[]{0x0000000000008002L});
+ public static final BitSet FOLLOW_AT_BOOL_OR_in_logical_or790 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_logical_and_in_logical_or793 = new BitSet(new long[]{0x0000000000008002L});
+ public static final BitSet FOLLOW_bitwise_or_in_logical_and812 = new BitSet(new long[]{0x0000000000002002L});
+ public static final BitSet FOLLOW_AT_BOOL_AND_in_logical_and815 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_bitwise_or_in_logical_and818 = new BitSet(new long[]{0x0000000000002002L});
+ public static final BitSet FOLLOW_bitwise_xor_in_bitwise_or837 = new BitSet(new long[]{0x0000000000000102L});
+ public static final BitSet FOLLOW_AT_BIT_OR_in_bitwise_or840 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_bitwise_xor_in_bitwise_or843 = new BitSet(new long[]{0x0000000000000102L});
+ public static final BitSet FOLLOW_bitwise_and_in_bitwise_xor862 = new BitSet(new long[]{0x0000000000001002L});
+ public static final BitSet FOLLOW_AT_BIT_XOR_in_bitwise_xor865 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_bitwise_and_in_bitwise_xor868 = new BitSet(new long[]{0x0000000000001002L});
+ public static final BitSet FOLLOW_equality_in_bitwise_and888 = new BitSet(new long[]{0x0000000000000042L});
+ public static final BitSet FOLLOW_AT_BIT_AND_in_bitwise_and891 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_equality_in_bitwise_and894 = new BitSet(new long[]{0x0000000000000042L});
+ public static final BitSet FOLLOW_relational_in_equality913 = new BitSet(new long[]{0x0000000001080002L});
+ public static final BitSet FOLLOW_set_in_equality916 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_relational_in_equality925 = new BitSet(new long[]{0x0000000001080002L});
+ public static final BitSet FOLLOW_shift_in_relational944 = new BitSet(new long[]{0x0000000000F00002L});
+ public static final BitSet FOLLOW_set_in_relational947 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_shift_in_relational964 = new BitSet(new long[]{0x0000000000F00002L});
+ public static final BitSet FOLLOW_additive_in_shift983 = new BitSet(new long[]{0x0000000000000E02L});
+ public static final BitSet FOLLOW_set_in_shift986 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_additive_in_shift999 = new BitSet(new long[]{0x0000000000000E02L});
+ public static final BitSet FOLLOW_multiplicative_in_additive1018 = new BitSet(new long[]{0x0000000200000022L});
+ public static final BitSet FOLLOW_set_in_additive1021 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_multiplicative_in_additive1030 = new BitSet(new long[]{0x0000000200000022L});
+ public static final BitSet FOLLOW_unary_in_multiplicative1049 = new BitSet(new long[]{0x0000000064000002L});
+ public static final BitSet FOLLOW_set_in_multiplicative1052 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_unary_in_multiplicative1065 = new BitSet(new long[]{0x0000000064000002L});
public static final BitSet FOLLOW_postfix_in_unary1084 = new BitSet(new long[]{0x0000000000000002L});
- public static final BitSet FOLLOW_AT_ADD_in_unary1092 = new BitSet(new long[]{0x0000032308002050L});
+ public static final BitSet FOLLOW_AT_ADD_in_unary1092 = new BitSet(new long[]{0x00008886100040A0L});
public static final BitSet FOLLOW_unary_in_unary1095 = new BitSet(new long[]{0x0000000000000002L});
- public static final BitSet FOLLOW_unary_operator_in_unary1103 = new BitSet(new long[]{0x0000032308002050L});
+ public static final BitSet FOLLOW_unary_operator_in_unary1103 = new BitSet(new long[]{0x00008886100040A0L});
public static final BitSet FOLLOW_unary_in_unary1106 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_AT_SUBTRACT_in_unary_operator1123 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_AT_BIT_NOT_in_unary_operator1135 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_AT_BOOL_NOT_in_unary_operator1143 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_primary_in_postfix1160 = new BitSet(new long[]{0x0000000000000002L});
- public static final BitSet FOLLOW_NAMESPACE_ID_in_postfix1168 = new BitSet(new long[]{0x0000000008000000L});
+ public static final BitSet FOLLOW_VARIABLE_in_postfix1168 = new BitSet(new long[]{0x0000000010000000L});
public static final BitSet FOLLOW_arguments_in_postfix1170 = new BitSet(new long[]{0x0000000000000002L});
- public static final BitSet FOLLOW_NAMESPACE_ID_in_primary1198 = new BitSet(new long[]{0x0000000000000002L});
+ public static final BitSet FOLLOW_VARIABLE_in_primary1198 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_numeric_in_primary1206 = new BitSet(new long[]{0x0000000000000002L});
- public static final BitSet FOLLOW_AT_LPAREN_in_primary1214 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_conditional_in_primary1217 = new BitSet(new long[]{0x0000000080000000L});
+ public static final BitSet FOLLOW_AT_LPAREN_in_primary1214 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_conditional_in_primary1217 = new BitSet(new long[]{0x0000000100000000L});
public static final BitSet FOLLOW_AT_RPAREN_in_primary1219 = new BitSet(new long[]{0x0000000000000002L});
- public static final BitSet FOLLOW_AT_LPAREN_in_arguments1237 = new BitSet(new long[]{0x0000032388002050L});
- public static final BitSet FOLLOW_conditional_in_arguments1241 = new BitSet(new long[]{0x0000000080020000L});
- public static final BitSet FOLLOW_AT_COMMA_in_arguments1244 = new BitSet(new long[]{0x0000032308002050L});
- public static final BitSet FOLLOW_conditional_in_arguments1247 = new BitSet(new long[]{0x0000000080020000L});
+ public static final BitSet FOLLOW_AT_LPAREN_in_arguments1237 = new BitSet(new long[]{0x00008887100040A0L});
+ public static final BitSet FOLLOW_conditional_in_arguments1241 = new BitSet(new long[]{0x0000000100040000L});
+ public static final BitSet FOLLOW_AT_COMMA_in_arguments1244 = new BitSet(new long[]{0x00008886100040A0L});
+ public static final BitSet FOLLOW_conditional_in_arguments1247 = new BitSet(new long[]{0x0000000100040000L});
public static final BitSet FOLLOW_AT_RPAREN_in_arguments1253 = new BitSet(new long[]{0x0000000000000002L});
}
Modified: lucene/dev/branches/branch_4x/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java?rev=1609338&r1=1609337&r2=1609338&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java (original)
+++ lucene/dev/branches/branch_4x/lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java Wed Jul 9 23:37:38 2014
@@ -5,9 +5,13 @@ import org.apache.lucene.document.Double
import org.apache.lucene.document.Field;
import org.apache.lucene.document.NumericDocValuesField;
import org.apache.lucene.expressions.js.JavascriptCompiler;
+import org.apache.lucene.expressions.js.VariableContext;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.RandomIndexWriter;
import org.apache.lucene.index.Term;
+import org.apache.lucene.queries.function.ValueSource;
+import org.apache.lucene.queries.function.valuesource.DoubleConstValueSource;
+import org.apache.lucene.queries.function.valuesource.IntFieldSource;
import org.apache.lucene.search.CheckHits;
import org.apache.lucene.search.FieldDoc;
import org.apache.lucene.search.IndexSearcher;
@@ -21,6 +25,10 @@ import org.apache.lucene.store.Directory
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
+import static org.apache.lucene.expressions.js.VariableContext.Type.MEMBER;
+import static org.apache.lucene.expressions.js.VariableContext.Type.STR_INDEX;
+import static org.apache.lucene.expressions.js.VariableContext.Type.INT_INDEX;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -227,4 +235,71 @@ public class TestDemoExpressions extend
d = (FieldDoc) td.scoreDocs[2];
assertEquals(5.2842D, (Double)d.fields[0], 1E-4);
}
+
+ public void testStaticExtendedVariableExample() throws Exception {
+ Expression popularity = JavascriptCompiler.compile("doc[\"popularity\"].value");
+ SimpleBindings bindings = new SimpleBindings();
+ bindings.add("doc['popularity'].value", new IntFieldSource("popularity"));
+ Sort sort = new Sort(popularity.getSortField(bindings, true));
+ TopFieldDocs td = searcher.search(new MatchAllDocsQuery(), null, 3, sort);
+
+ FieldDoc d = (FieldDoc)td.scoreDocs[0];
+ assertEquals(20D, (Double)d.fields[0], 1E-4);
+
+ d = (FieldDoc)td.scoreDocs[1];
+ assertEquals(5D, (Double)d.fields[0], 1E-4);
+
+ d = (FieldDoc)td.scoreDocs[2];
+ assertEquals(2D, (Double)d.fields[0], 1E-4);
+ }
+
+ public void testDynamicExtendedVariableExample() throws Exception {
+ Expression popularity = JavascriptCompiler.compile("doc['popularity'].value + magicarray[0] + fourtytwo");
+
+ // The following is an example of how to write bindings which parse the variable name into pieces.
+ // Note, however, that this requires a lot of error checking. Each "error case" below should be
+ // filled in with proper error messages for a real use case.
+ Bindings bindings = new Bindings() {
+ @Override
+ public ValueSource getValueSource(String name) {
+ VariableContext[] var = VariableContext.parse(name);
+ assert var[0].type == MEMBER;
+ String base = var[0].text;
+ if (base.equals("doc")) {
+ if (var.length > 1 && var[1].type == STR_INDEX) {
+ String field = var[1].text;
+ if (var.length > 2 && var[2].type == MEMBER && var[2].text.equals("value")) {
+ return new IntFieldSource(field);
+ } else {
+ fail("member: " + var[2].text);// error case, non/missing "value" member access
+ }
+ } else {
+ fail();// error case, doc should be a str indexed array
+ }
+ } else if (base.equals("magicarray")) {
+ if (var.length > 1 && var[1].type == INT_INDEX) {
+ return new DoubleConstValueSource(2048);
+ } else {
+ fail();// error case, magic array isn't an array
+ }
+ } else if (base.equals("fourtytwo")) {
+ return new DoubleConstValueSource(42);
+ } else {
+ fail();// error case (variable doesn't exist)
+ }
+ throw new IllegalArgumentException("Illegal reference '" + name + "'");
+ }
+ };
+ Sort sort = new Sort(popularity.getSortField(bindings, false));
+ TopFieldDocs td = searcher.search(new MatchAllDocsQuery(), null, 3, sort);
+
+ FieldDoc d = (FieldDoc)td.scoreDocs[0];
+ assertEquals(2092D, (Double)d.fields[0], 1E-4);
+
+ d = (FieldDoc)td.scoreDocs[1];
+ assertEquals(2095D, (Double)d.fields[0], 1E-4);
+
+ d = (FieldDoc)td.scoreDocs[2];
+ assertEquals(2110D, (Double)d.fields[0], 1E-4);
+ }
}