diff options
author | Jon Bratseth <bratseth@gmail.com> | 2022-03-03 10:02:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-03 10:02:11 +0100 |
commit | e5a01079a714eef7f472f113549caffe0f41c44b (patch) | |
tree | 6b955356f8acb8931aa238a1c59d020f25cf29ac /searchlib | |
parent | 60c5b5e0a91e35e61dc82222df74df2ad42d3caa (diff) | |
parent | 80b032a8c2c879f71a2e46000176765a71b8d1ab (diff) |
Merge pull request #21504 from vespa-engine/bratseth/truefalse
'true' and 'false' literals in ranking expressions
Diffstat (limited to 'searchlib')
6 files changed, 19 insertions, 18 deletions
diff --git a/searchlib/abi-spec.json b/searchlib/abi-spec.json index ced2517ff9f..5a534562d32 100644 --- a/searchlib/abi-spec.json +++ b/searchlib/abi-spec.json @@ -943,7 +943,6 @@ "public final java.lang.String tag()", "public final java.util.List tagCommaLeadingList()", "public final com.yahoo.searchlib.rankingexpression.rule.ExpressionNode constantPrimitive(boolean)", - "public final com.yahoo.searchlib.rankingexpression.evaluation.Value primitiveValue()", "public final com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode tensorValueBody(com.yahoo.tensor.TensorType, java.util.List)", "public final com.yahoo.tensor.functions.DynamicTensor mappedTensorValueBody(com.yahoo.tensor.TensorType)", "public final com.yahoo.tensor.functions.DynamicTensor mixedTensorValueBody(com.yahoo.tensor.TensorType, java.util.List)", @@ -1086,6 +1085,8 @@ "public static final int MIN", "public static final int PROD", "public static final int SUM", + "public static final int TRUE", + "public static final int FALSE", "public static final int IDENTIFIER", "public static final int SINGLE_LINE_COMMENT", "public static final int DEFAULT", diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/BooleanValue.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/BooleanValue.java index 770be98c739..49f267ca522 100644 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/BooleanValue.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/evaluation/BooleanValue.java @@ -15,7 +15,7 @@ public class BooleanValue extends DoubleCompatibleValue { * Create a boolean value which is frozen at the outset. */ public static BooleanValue frozen(boolean value) { - BooleanValue booleanValue=new BooleanValue(value); + BooleanValue booleanValue = new BooleanValue(value); booleanValue.freeze(); return booleanValue; } diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ConstantNode.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ConstantNode.java index 46e833197f9..2cfe20d8131 100755 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ConstantNode.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/ConstantNode.java @@ -2,6 +2,7 @@ package com.yahoo.searchlib.rankingexpression.rule; import com.yahoo.searchlib.rankingexpression.Reference; +import com.yahoo.searchlib.rankingexpression.evaluation.BooleanValue; import com.yahoo.searchlib.rankingexpression.evaluation.Context; import com.yahoo.searchlib.rankingexpression.evaluation.Value; import com.yahoo.tensor.TensorType; @@ -39,6 +40,8 @@ public final class ConstantNode extends ExpressionNode { @Override public StringBuilder toString(StringBuilder string, SerializationContext context, Deque<String> path, CompositeNode parent) { + if (value instanceof BooleanValue) // Convert booleans to floats + return string.append(value.asBoolean() ? "1.0" : "0.0"); return string.append(value.toString()); } diff --git a/searchlib/src/main/javacc/RankingExpressionParser.jj b/searchlib/src/main/javacc/RankingExpressionParser.jj index 865820320d8..ebe1e048247 100755 --- a/searchlib/src/main/javacc/RankingExpressionParser.jj +++ b/searchlib/src/main/javacc/RankingExpressionParser.jj @@ -153,6 +153,8 @@ TOKEN : <MIN: "min"> | <PROD: "prod"> | <SUM: "sum"> | + <TRUE: "true"> | + <FALSE: "false"> | <IDENTIFIER: (["A"-"Z","a"-"z","0"-"9","_","@"](["A"-"Z","a"-"z","0"-"9","_","@","$"])*)> } @@ -797,7 +799,9 @@ String identifier() : func = binaryFunctionName() { return func.toString(); } | <IF> { return token.image; } | <IN> { return token.image; } | - <IDENTIFIER> { return token.image; } + <IDENTIFIER> { return token.image; } | + <TRUE> { return token.image; } | + <FALSE> { return token.image; } } List<String> identifierList() : @@ -854,25 +858,14 @@ ExpressionNode constantPrimitive(boolean negate) : ( <INTEGER> { value = token.image; } | <FLOAT> { value = token.image; } ) { node = new ConstantNode(Value.parse(negate ? ("-" + value) : value)); } | - <STRING> { - value = token.image; - node = new ConstantNode(Value.parse(value)); + ( <STRING> | <TRUE> | <FALSE> ) { + node = new ConstantNode(Value.parse(token.image)); if (negate) node = new NegativeNode(node); } ) { return node; } } -Value primitiveValue() : -{ - String sign = ""; -} -{ - ( <SUB> { sign = "-";} ) ? - ( <INTEGER> | <FLOAT> | <STRING> ) - { return Value.parse(sign + token.image); } -} - TensorFunctionNode tensorValueBody(TensorType type, List dimensionOrder) : { DynamicTensor dynamicTensor; diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java index efa98fba2eb..19e32c23234 100644 --- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java +++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java @@ -133,6 +133,10 @@ public class EvaluationTestCase { public void testBooleanEvaluation() { EvaluationTester tester = new EvaluationTester(); + // literals + tester.assertEvaluates(false, "false"); + tester.assertEvaluates(true, "true"); + // and tester.assertEvaluates(false, "0 && 0"); tester.assertEvaluates(false, "0 && 1"); diff --git a/searchlib/src/tests/rankingexpression/rankingexpressionlist b/searchlib/src/tests/rankingexpression/rankingexpressionlist index c032ffd1a01..970505e25aa 100644 --- a/searchlib/src/tests/rankingexpression/rankingexpressionlist +++ b/searchlib/src/tests/rankingexpression/rankingexpressionlist @@ -165,5 +165,5 @@ if(1.09999~=1.1,2,3); if (1.09999 ~= 1.1, 2, 3) 1 && 0 || 1 !a && (a || a) 10 ^ 3 -true -false +true; 1.0 +false; 0.0 |