summaryrefslogtreecommitdiffstats
path: root/searchlib/src/main/javacc/RankingExpressionParser.jj
diff options
context:
space:
mode:
Diffstat (limited to 'searchlib/src/main/javacc/RankingExpressionParser.jj')
-rwxr-xr-xsearchlib/src/main/javacc/RankingExpressionParser.jj45
1 files changed, 30 insertions, 15 deletions
diff --git a/searchlib/src/main/javacc/RankingExpressionParser.jj b/searchlib/src/main/javacc/RankingExpressionParser.jj
index febd0a60bb3..a796eaa4ac0 100755
--- a/searchlib/src/main/javacc/RankingExpressionParser.jj
+++ b/searchlib/src/main/javacc/RankingExpressionParser.jj
@@ -242,7 +242,7 @@ ExpressionNode value() :
LOOKAHEAD(2) ret = ifExpression() |
LOOKAHEAD(4) ret = function() |
ret = feature() |
- ret = queryFeature() |
+ ret = legacyQueryFeature() |
( <LBRACE> ret = expression() <RBRACE> { ret = new EmbracedNode(ret); } ) ) )
{
ret = not ? new NotNode(ret) : ret;
@@ -264,15 +264,6 @@ IfNode ifExpression() :
}
}
-ReferenceNode queryFeature() :
-{
- String name;
-}
-{
- ( <DOLLAR> name = identifier() )
- { return new ReferenceNode("query", Arrays.asList((ExpressionNode)new NameNode(name)), null); }
-}
-
ReferenceNode feature() :
{
List<ExpressionNode> args = null;
@@ -283,6 +274,16 @@ ReferenceNode feature() :
{ return new ReferenceNode(name, args, out); }
}
+// Query features can be referenced as "$name" instead of "query(name)". TODO: Warn this is deprecated
+ReferenceNode legacyQueryFeature() :
+{
+ String name;
+}
+{
+ ( <DOLLAR> name = identifier() )
+ { return new ReferenceNode("query", Arrays.asList((ExpressionNode)new NameNode(name)), null); }
+}
+
String outs() :
{
StringBuilder ret = new StringBuilder();
@@ -333,7 +334,7 @@ ExpressionNode arg() :
{
( ret = constantPrimitive() |
LOOKAHEAD(2) ret = feature() |
- name = identifier() { ret = new NameNode(name); } )
+ name = identifier() { ret = new NameNode(name); } )
{ return ret; }
}
@@ -342,7 +343,7 @@ ExpressionNode function() :
ExpressionNode function;
}
{
- ( function = scalarOrTensorFunction() | function = tensorFunction() )
+ ( LOOKAHEAD(2) function = scalarOrTensorFunction() | function = tensorFunction() )
{ return function; }
}
@@ -717,7 +718,7 @@ String identifier() :
Function func;
}
{
- name = tensorFunctionName() { return name; } |
+ LOOKAHEAD(2) name = tensorFunctionName() { return name; } |
func = unaryFunctionName() { return func.toString(); } |
func = binaryFunctionName() { return func.toString(); } |
<IF> { return token.image; } |
@@ -770,11 +771,25 @@ List<String> tagCommaLeadingList() :
ConstantNode constantPrimitive() :
{
String sign = "";
+ String value;
}
{
( <SUB> { sign = "-";} ) ?
- ( <INTEGER> | <FLOAT> | <STRING> )
- { return new ConstantNode(Value.parse(sign + token.image),sign + token.image); }
+ ( <INTEGER> { value = token.image; } |
+ <FLOAT> { value = token.image; } |
+ value = stringPath() )
+ { return new ConstantNode(Value.parse(sign + value),sign + value); }
+}
+
+// Strings separated by "/"
+String stringPath() :
+{
+ StringBuilder b = new StringBuilder();
+}
+{
+ <STRING> { b.append(token.image); }
+ ( LOOKAHEAD(2) <DIV> <STRING> { b.append("/").append(token.image); } ) *
+ { return b.toString(); }
}
Value primitiveValue() :