diff options
author | Jon Bratseth <bratseth@oath.com> | 2019-12-09 14:31:43 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-09 14:31:43 -0800 |
commit | 4192f7e82258b6fc6165230cdf1910c384a138c1 (patch) | |
tree | ad80d958954597289c8d838112d6cf092fbaffc3 /searchlib | |
parent | 676dd43a12db59f96536aa6d8a45369d24d17404 (diff) | |
parent | 7ef64a61b4f04a400428fe58ed2475aa37c43d39 (diff) |
Merge pull request #11528 from vespa-engine/bratseth/tensor-slice
Generalized Slice tensor function.
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/abi-spec.json | 2 | ||||
-rwxr-xr-x | searchlib/src/main/javacc/RankingExpressionParser.jj | 27 |
2 files changed, 15 insertions, 14 deletions
diff --git a/searchlib/abi-spec.json b/searchlib/abi-spec.json index 98b975546e7..debcd11fdbd 100644 --- a/searchlib/abi-spec.json +++ b/searchlib/abi-spec.json @@ -917,7 +917,7 @@ "public final void labelAndDimension(com.yahoo.tensor.TensorAddress$Builder)", "public final void labelAndDimensionValues(java.util.List)", "public final java.util.List valueAddress()", - "public final com.yahoo.tensor.functions.Value$DimensionValue dimensionValue(java.util.Optional)", + "public final com.yahoo.tensor.functions.Slice$DimensionValue dimensionValue(java.util.Optional)", "public void <init>(java.io.InputStream)", "public void <init>(java.io.InputStream, java.lang.String)", "public void ReInit(java.io.InputStream)", diff --git a/searchlib/src/main/javacc/RankingExpressionParser.jj b/searchlib/src/main/javacc/RankingExpressionParser.jj index 83496c7c5f1..de3ad6b5d8c 100755 --- a/searchlib/src/main/javacc/RankingExpressionParser.jj +++ b/searchlib/src/main/javacc/RankingExpressionParser.jj @@ -18,6 +18,7 @@ PARSER_BEGIN(RankingExpressionParser) package com.yahoo.searchlib.rankingexpression.parser; import com.yahoo.searchlib.rankingexpression.rule.*; +import com.yahoo.searchlib.rankingexpression.evaluation.Value; import com.yahoo.searchlib.rankingexpression.evaluation.StringValue; import com.yahoo.searchlib.rankingexpression.evaluation.TensorValue; import com.yahoo.tensor.*; @@ -247,7 +248,7 @@ ExpressionNode value() : ( <LBRACE> value = expression() <RBRACE> { value = new EmbracedNode(value); } ) ) ) - [ LOOKAHEAD(2) valueAddress = valueAddress() { value = new TensorFunctionNode(new Value(TensorFunctionNode.wrap(value), valueAddress)); } ] + [ LOOKAHEAD(2) valueAddress = valueAddress() { value = new TensorFunctionNode(new Slice(TensorFunctionNode.wrap(value), valueAddress)); } ] { value = not ? new NotNode(value) : value; value = neg ? new NegativeNode(value) : value; @@ -818,17 +819,17 @@ ConstantNode constantPrimitive() : ( <INTEGER> { value = token.image; } | <FLOAT> { value = token.image; } | <STRING> { value = token.image; } ) - { return new ConstantNode(com.yahoo.searchlib.rankingexpression.evaluation.Value.parse(sign + value),sign + value); } + { return new ConstantNode(Value.parse(sign + value),sign + value); } } -com.yahoo.searchlib.rankingexpression.evaluation.Value primitiveValue() : +Value primitiveValue() : { String sign = ""; } { ( <SUB> { sign = "-";} ) ? ( <INTEGER> | <FLOAT> | <STRING> ) - { return com.yahoo.searchlib.rankingexpression.evaluation.Value.parse(sign + token.image); } + { return Value.parse(sign + token.image); } } TensorFunctionNode tensorValueBody(TensorType type) : @@ -894,7 +895,7 @@ void labelAndDimension(TensorAddress.Builder addressBuilder) : void labelAndDimensionValues(List addressValues) : { String dimension; - Value.DimensionValue dimensionValue; + Slice.DimensionValue dimensionValue; } { dimension = identifier() <COLON> dimensionValue = dimensionValue(Optional.of(dimension)) @@ -906,11 +907,11 @@ List valueAddress() : { List dimensionValues = new ArrayList(); ExpressionNode valueExpression; - Value.DimensionValue dimensionValue; + Slice.DimensionValue dimensionValue; } { ( - ( <LSQUARE> ( valueExpression = expression() { dimensionValues.add(new Value.DimensionValue(TensorFunctionNode.wrapScalar(valueExpression))); } ) <RSQUARE> ) + ( <LSQUARE> ( valueExpression = expression() { dimensionValues.add(new Slice.DimensionValue(TensorFunctionNode.wrapScalar(valueExpression))); } ) <RSQUARE> ) | LOOKAHEAD(3) ( <LCURLY> ( labelAndDimensionValues(dimensionValues))+ @@ -923,16 +924,16 @@ List valueAddress() : { return dimensionValues;} } -Value.DimensionValue dimensionValue(Optional dimensionName) : +Slice.DimensionValue dimensionValue(Optional dimensionName) : { ExpressionNode value; } { value = expression() { - if (value instanceof ReferenceNode && ((ReferenceNode)value).reference().isIdentifier()) - return new Value.DimensionValue(dimensionName, ((ReferenceNode)value).reference().name()); - else - return new Value.DimensionValue(dimensionName, TensorFunctionNode.wrapScalar(value)); - } + if (value instanceof ReferenceNode && ((ReferenceNode)value).reference().isIdentifier()) + return new Slice.DimensionValue(dimensionName, ((ReferenceNode)value).reference().name()); + else + return new Slice.DimensionValue(dimensionName, TensorFunctionNode.wrapScalar(value)); +} }
\ No newline at end of file |