diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2019-11-27 15:58:06 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2019-11-27 15:58:06 +0200 |
commit | 77bb8f5117b7a0f78b2dc99a3937430339e4291d (patch) | |
tree | 9037b54f17e3175a8d11e1b43b55b71887f867a4 /searchlib/src/main/javacc/RankingExpressionParser.jj | |
parent | f4203c3cc571722f08ee65047437c1290ed63f69 (diff) |
Support index generating expressions in tensor value functions
Diffstat (limited to 'searchlib/src/main/javacc/RankingExpressionParser.jj')
-rwxr-xr-x | searchlib/src/main/javacc/RankingExpressionParser.jj | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/searchlib/src/main/javacc/RankingExpressionParser.jj b/searchlib/src/main/javacc/RankingExpressionParser.jj index beab722a1eb..c7870182939 100755 --- a/searchlib/src/main/javacc/RankingExpressionParser.jj +++ b/searchlib/src/main/javacc/RankingExpressionParser.jj @@ -887,30 +887,46 @@ void labelAndDimension(TensorAddress.Builder addressBuilder) : void labelAndDimensionValues(List addressValues) : { - String dimension, label; + String dimension; + Value.DimensionValue dimensionValue; } { - dimension = identifier() <COLON> label = tag() - { addressValues.add(new Value.DimensionValue(dimension, label)); } + dimension = identifier() <COLON> dimensionValue = dimensionValue(Optional.of(dimension)) + { addressValues.add(dimensionValue); } } /** A tensor address (possibly on short form) represented as a list because the tensor type is not available */ List valueAddress() : { List dimensionValues = new ArrayList(); - String label; + ExpressionNode valueExpression; + Value.DimensionValue dimensionValue; } { ( - ( <LSQUARE> ( <INTEGER> { dimensionValues.add(new Value.DimensionValue(token.image)); } ) <RSQUARE> ) - | - LOOKAHEAD(3) ( <LCURLY> label = tag() { dimensionValues.add(new Value.DimensionValue(label)); } <RCURLY> ) + ( <LSQUARE> ( valueExpression = expression() { dimensionValues.add(new Value.DimensionValue(TensorFunctionNode.wrapScalar(valueExpression))); } ) <RSQUARE> ) | - ( <LCURLY> - ( labelAndDimensionValues(dimensionValues))* + LOOKAHEAD(3) ( <LCURLY> + ( labelAndDimensionValues(dimensionValues))+ ( <COMMA> labelAndDimensionValues(dimensionValues))* <RCURLY> ) + | + ( <LCURLY> dimensionValue = dimensionValue(Optional.empty()) { dimensionValues.add(dimensionValue); } <RCURLY> ) ) { return dimensionValues;} +} + +Value.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)); + } }
\ No newline at end of file |