| Index: lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.g
|
| ===================================================================
|
| --- lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.g (revision 1602068)
|
| +++ lucene/expressions/src/java/org/apache/lucene/expressions/js/Javascript.g (working copy)
|
| @@ -336,7 +336,7 @@
|
| |
| fragment |
| ID |
| - : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* |
| + : ('a'..'z'|'A'..'Z'|'_'|'$') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'$')* |
| ; |
| |
| WS |
| Index: lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptLexer.java
|
| ===================================================================
|
| --- lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptLexer.java (revision 1602068)
|
| +++ lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptLexer.java (working copy)
|
| @@ -679,10 +679,10 @@
|
| // $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: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' | '_' | '$' )* |
| { |
| - if ( (input.LA(1) >= 'A' && input.LA(1) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) { |
| + 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(); |
| } |
| else { |
| @@ -690,12 +690,12 @@
|
| recover(mse); |
| throw mse; |
| } |
| - // src/java/org/apache/lucene/expressions/js/Javascript.g:340:31: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* |
| + // src/java/org/apache/lucene/expressions/js/Javascript.g:340:35: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' )* |
| loop2: |
| while (true) { |
| int alt2=2; |
| int LA2_0 = input.LA(1); |
| - if ( ((LA2_0 >= '0' && LA2_0 <= '9')||(LA2_0 >= 'A' && LA2_0 <= 'Z')||LA2_0=='_'||(LA2_0 >= 'a' && LA2_0 <= 'z')) ) { |
| + 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; |
| } |
| |
| @@ -703,7 +703,7 @@
|
| case 1 : |
| // 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) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) { |
| + if ( input.LA(1)=='$'||(input.LA(1) >= '0' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) { |
| input.consume(); |
| } |
| else { |
| @@ -1476,6 +1476,7 @@
|
| alt17=27; |
| } |
| break; |
| + case '$': |
| case 'A': |
| case 'B': |
| case 'C': |
| Index: lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptParser.java
|
| ===================================================================
|
| --- lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptParser.java (revision 1602068)
|
| +++ lucene/expressions/src/java/org/apache/lucene/expressions/js/JavascriptParser.java (working copy)
|
| @@ -1571,7 +1571,7 @@
|
| |
| stream_arguments.add(arguments48.getTree()); |
| // AST REWRITE |
| - // elements: NAMESPACE_ID, arguments |
| + // elements: arguments, NAMESPACE_ID |
| // token labels: |
| // rule labels: retval |
| // token list labels: |
| Index: lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java
|
| ===================================================================
|
| --- lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java (revision 1602068)
|
| +++ lucene/expressions/src/test/org/apache/lucene/expressions/TestDemoExpressions.java (working copy)
|
| @@ -136,6 +136,25 @@
|
| } |
| } |
| |
| + /** Uses variables with $ */ |
| + public void testDollarVariable() throws Exception { |
| + Expression expr = JavascriptCompiler.compile("$0+$score"); |
| + |
| + SimpleBindings bindings = new SimpleBindings(); |
| + bindings.add(new SortField("$0", SortField.Type.SCORE)); |
| + bindings.add(new SortField("$score", SortField.Type.SCORE)); |
| + |
| + Sort sort = new Sort(expr.getSortField(bindings, true)); |
| + Query query = new TermQuery(new Term("body", "contents")); |
| + TopFieldDocs td = searcher.search(query, null, 3, sort, true, true); |
| + for (int i = 0; i < 3; i++) { |
| + FieldDoc d = (FieldDoc) td.scoreDocs[i]; |
| + float expected = 2*d.score; |
| + float actual = ((Double)d.fields[0]).floatValue(); |
| + assertEquals(expected, actual, CheckHits.explainToleranceDelta(expected, actual)); |
| + } |
| + } |
| + |
| /** tests expression referring to another expression */ |
| public void testExpressionRefersToExpression() throws Exception { |
| Expression expr1 = JavascriptCompiler.compile("_score"); |