Package org.apache.sysds.parser

## Class Expression

- java.lang.Object
- - org.apache.sysds.parser.Expression

All Implemented Interfaces:
  `ParseInfo`

Direct Known Subclasses:
  `BinaryExpression`, `BooleanExpression`, `ExpressionList`, `Identifier`, `IterablePredicate`, `RelationalExpression`

    public abstract class Expression
    extends Object
    implements ParseInfo

### Nested Class Summary

Nested Classes
`static class` `Expression.BinaryOp` Binary operators.
`static class` `Expression.BooleanOp` Boolean operators.
`static class` `Expression.DataOp` Data operators.
`static class` `Expression.FunctCallOp` Function call operators.
`static class` `Expression.RelationalOp` Relational operators.

### Constructor Summary

Constructors
`Expression()`

### Method Summary

All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
`static Types.DataType` `computeDataType​(Expression expression1, Expression expression2, boolean cast)` Compute data type based on expressions.
`static Types.DataType` `computeDataType​(Identifier identifier1, Identifier identifier2, boolean cast)` Compute data type based on identifiers.
`static Types.ValueType` `computeValueType​(Expression expr1, Types.ValueType v1, Types.ValueType v2, boolean cast)`
`static Types.ValueType` `computeValueType​(Expression expression1, Expression expression2, boolean cast)` Compute value type based on expressions.
`static Types.ValueType` `computeValueType​(Identifier identifier1, Identifier identifier2, boolean cast)` Compute value type based on identifiers.
`static Types.FileFormat` `convertFormatType​(String format)` Convert string format type to `Hop.FileFormatTypes`.
`boolean` `equals​(Object that)`
`int` `getBeginColumn()`
`int` `getBeginLine()`
`static MatrixCharacteristics` `getBinaryMatrixCharacteristics​(Expression expression1, Expression expression2)` Returns the matrix characteristics for scalar-scalar, scalar-matrix, matrix-scalar, matrix-matrix operations.
`static Expression.BinaryOp` `getBinaryOp​(String val)` Convert string value to binary operator.
`static Expression.BooleanOp` `getBooleanOp​(String val)` Convert string value to boolean operator.
`int` `getEndColumn()`
`int` `getEndLine()`
`String` `getFilename()`
`Identifier` `getOutput()` Obtain identifier.
`Identifier[]` `getOutputs()` Obtain identifiers.
`ArrayList<String>` `getParseExceptionList()`
`static Expression.RelationalOp` `getRelationalOp​(String val)` Convert string value to relational operator.
`static String` `getTempName()` Obtain temporary name ("parsertemp" + _tempId) for expression.
`String` `getText()`
`int` `hashCode()`
`String` `printErrorLocation()`
`String` `printInfoLocation()` Return info message containing the filename, the beginning line position, and the beginning column position.
`String` `printWarningLocation()`
`void` `raiseValidateError​(String message)` Throw a LanguageException with the message.
`void` `raiseValidateError​(String message, boolean conditional)` Throw a LanguageException with the message if conditional is `false`; otherwise log the message as a warning.
`void` `raiseValidateError​(String msg, boolean conditional, String errorCode)` Throw a LanguageException with the message (and optional error code) if conditional is `false`; otherwise log the message as a warning.
`abstract Expression` `rewriteExpression​(String prefix)`
`void` `setBeginColumn​(int passed)`
`void` `setBeginLine​(int passed)`
`void` `setCtxValues​(org.antlr.v4.runtime.ParserRuleContext ctx)` Set ParserRuleContext values (begin line, begin column, end line, end column, and text).
`void` `setCtxValuesAndFilename​(org.antlr.v4.runtime.ParserRuleContext ctx, String filename)` Set ParserRuleContext values (begin line, begin column, end line, end column, and text) and file name.
`void` `setEndColumn​(int passed)`
`void` `setEndLine​(int passed)`
`void` `setFilename​(String passed)`
`void` `setOutput​(Identifier output)`
`void` `setParseExceptionList​(ArrayList<String> passed)`
`void` `setParseInfo​(ParseInfo parseInfo)` Set parse information.
`void` `setText​(String text)`
`void` `validateExpression​(HashMap<String,​DataIdentifier> ids, HashMap<String,​ConstIdentifier> currConstVars, boolean conditional)`
`void` `validateExpression​(MultiAssignmentStatement mas, HashMap<String,​DataIdentifier> ids, HashMap<String,​ConstIdentifier> currConstVars, boolean conditional)`
`abstract VariableSet` `variablesRead()`
`abstract VariableSet` `variablesUpdated()`

### Methods inherited from class java.lang.Object

`getClass, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### Expression

    public Expression()

### Method Detail

#### rewriteExpression

    public abstract Expression rewriteExpression​(String prefix)

#### setOutput

    public void setOutput​(Identifier output)

#### getOutput

    public Identifier getOutput()

Obtain identifier.

Returns:
  Identifier

#### getOutputs

    public Identifier[] getOutputs()

Obtain identifiers.

Returns:
  Identifiers

#### validateExpression

    public void validateExpression​(HashMap<String,​DataIdentifier> ids,
                                   HashMap<String,​ConstIdentifier> currConstVars,
                                   boolean conditional)

#### validateExpression

    public void validateExpression​(MultiAssignmentStatement mas,
                                   HashMap<String,​DataIdentifier> ids,
                                   HashMap<String,​ConstIdentifier> currConstVars,
                                   boolean conditional)

#### getBinaryOp

    public static Expression.BinaryOp getBinaryOp​(String val)

Convert string value to binary operator.

Parameters:
  `val` - String value ('+', '-', '*', '/', '%%', '%/%', '^', %*%')
Returns:
  Binary operator (`BinaryOp.PLUS`, `BinaryOp.MINUS`, `BinaryOp.MULT`, `BinaryOp.DIV`, `BinaryOp.MODULUS`, `BinaryOp.INTDIV`, `BinaryOp.POW`, `BinaryOp.MATMULT`). Returns `BinaryOp.INVALID` if string value not recognized.

#### getRelationalOp

    public static Expression.RelationalOp getRelationalOp​(String val)

Convert string value to relational operator.

Parameters:
  `val` - String value ('<', '<=', '>', '>=', '==', '!=')
Returns:
  Relational operator (`RelationalOp.LESS`, `RelationalOp.LESSEQUAL`, `RelationalOp.GREATER`, `RelationalOp.GREATEREQUAL`, `RelationalOp.EQUAL`, `RelationalOp.NOTEQUAL`). Returns `RelationalOp.INVALID` if string value not recognized.

#### getBooleanOp

    public static Expression.BooleanOp getBooleanOp​(String val)

Convert string value to boolean operator.

Parameters:
  `val` - String value ('&&', '&', '||', '|', '!')
Returns:
  Boolean operator (`BooleanOp.CONDITIONALAND`, `BooleanOp.LOGICALAND`, `BooleanOp.CONDITIONALOR`, `BooleanOp.LOGICALOR`, `BooleanOp.NOT`). Returns `BooleanOp.INVALID` if string value not recognized.

#### convertFormatType

    public static Types.FileFormat convertFormatType​(String format)

Convert string format type to `Hop.FileFormatTypes`.

Parameters:
  `format` - String format type ("text", "binary", "mm", "csv")
Returns:
  Format as `Hop.FileFormatTypes`. Can be `FileFormatTypes.TEXT`, `FileFormatTypes.BINARY`, `FileFormatTypes.MM`, or `FileFormatTypes.CSV`. Unrecognized type is set to `FileFormatTypes.TEXT`.

#### getTempName

    public static String getTempName()

Obtain temporary name ("parsertemp" + _tempId) for expression. Used to construct Hops from parse tree.

Returns:
  Temporary name of expression.

#### variablesRead

    public abstract VariableSet variablesRead()

#### variablesUpdated

    public abstract VariableSet variablesUpdated()

#### computeDataType

    public static Types.DataType computeDataType​(Expression expression1,
                                                 Expression expression2,
                                                 boolean cast)

Compute data type based on expressions. The identifier for each expression is obtained and passed to `computeDataType(Identifier, Identifier, boolean)`. If the identifiers have the same data type, the shared data type is returned. Otherwise, if `cast` is `true` and one of the identifiers is a matrix and the other identifier is a scalar, return `DataType.MATRIX`. Otherwise, throw a LanguageException.

Parameters:
  `expression1` - First expression
  `expression2` - Second expression
  `cast` - Whether a cast should potentially be performed
Returns:
  The data type (`Types.DataType`)

#### computeDataType

    public static Types.DataType computeDataType​(Identifier identifier1,
                                                 Identifier identifier2,
                                                 boolean cast)

Compute data type based on identifiers. If the identifiers have the same data type, the shared data type is returned. Otherwise, if `cast` is `true` and one of the identifiers is a matrix and the other identifier is a scalar, return `DataType.MATRIX`. Otherwise, throw a LanguageException.

Parameters:
  `identifier1` - First identifier
  `identifier2` - Second identifier
  `cast` - Whether a cast should potentially be performed
Returns:
  The data type (`Types.DataType`)

#### computeValueType

    public static Types.ValueType computeValueType​(Expression expression1,
                                                   Expression expression2,
                                                   boolean cast)

Compute value type based on expressions. The identifier for each expression is obtained and passed to `computeValueType(Identifier, Identifier, boolean)`. If the identifiers have the same value type, the shared value type is returned. Otherwise, if `cast` is `true` and one value type is a double and the other is an int, return `ValueType.DOUBLE`. If `cast` is `true` and one value type is a string or the other value type is a string, return `ValueType.STRING`. Otherwise, throw a LanguageException.

Parameters:
  `expression1` - First expression
  `expression2` - Second expression
  `cast` - Whether a cast should potentially be performed
Returns:
  The value type (`Types.ValueType`)

#### computeValueType

    public static Types.ValueType computeValueType​(Identifier identifier1,
                                                   Identifier identifier2,
                                                   boolean cast)

Compute value type based on identifiers. If the identifiers have the same value type, the shared value type is returned. Otherwise, if `cast` is `true` and one value type is a double and the other is an int, return `ValueType.DOUBLE`. If `cast` is `true` and one value type is a string or the other value type is a string, return `ValueType.STRING`. Otherwise, throw a LanguageException.

Parameters:
  `identifier1` - First identifier
  `identifier2` - Second identifier
  `cast` - Whether a cast should potentially be performed
Returns:
  The value type (`Types.ValueType`)

#### computeValueType

    public static Types.ValueType computeValueType​(Expression expr1,
                                                   Types.ValueType v1,
                                                   Types.ValueType v2,
                                                   boolean cast)

#### equals

    public boolean equals​(Object that)

Overrides:
  `equals` in class `Object`

#### hashCode

    public int hashCode()

Overrides:
  `hashCode` in class `Object`

#### raiseValidateError

    public void raiseValidateError​(String message)

Throw a LanguageException with the message.

Parameters:
  `message` - the error message

#### raiseValidateError

    public void raiseValidateError​(String message,
                                   boolean conditional)

Throw a LanguageException with the message if conditional is `false`; otherwise log the message as a warning.

Parameters:
  `message` - the error (or warning) message
  `conditional` - if `true`, display log warning message. Otherwise, the message will be thrown as a LanguageException

#### raiseValidateError

    public void raiseValidateError​(String msg,
                                   boolean conditional,
                                   String errorCode)

Throw a LanguageException with the message (and optional error code) if conditional is `false`; otherwise log the message as a warning.

Parameters:
  `msg` - the error (or warning) message
  `conditional` - if `true`, display log warning message. Otherwise, the message (and optional error code) will be thrown as a LanguageException
  `errorCode` - optional error code

#### getBinaryMatrixCharacteristics

    public static MatrixCharacteristics getBinaryMatrixCharacteristics​(Expression expression1,
                                                                       Expression expression2)

Returns the matrix characteristics for scalar-scalar, scalar-matrix, matrix-scalar, matrix-matrix operations. This method is aware of potentially unknowns and matrix-vector (col/row) operations.

Parameters:
  `expression1` - The first expression
  `expression2` - The second expression
Returns:
  matrix characteristics [1] is the number of columns (clen), [2] is the number of rows in a block (blen), and [3] is the number of columns in a block (blen). Default (unknown) values are -1. Scalar values are all 0.

#### setFilename

    public void setFilename​(String passed)

Specified by:
  `setFilename` in interface `ParseInfo`

#### setBeginLine

    public void setBeginLine​(int passed)

Specified by:
  `setBeginLine` in interface `ParseInfo`

#### setBeginColumn

    public void setBeginColumn​(int passed)

Specified by:
  `setBeginColumn` in interface `ParseInfo`

#### setEndLine

    public void setEndLine​(int passed)

Specified by:
  `setEndLine` in interface `ParseInfo`

#### setEndColumn

    public void setEndColumn​(int passed)

Specified by:
  `setEndColumn` in interface `ParseInfo`

#### setText

    public void setText​(String text)

Specified by:
  `setText` in interface `ParseInfo`

#### setParseExceptionList

    public void setParseExceptionList​(ArrayList<String> passed)

#### setParseInfo

    public void setParseInfo​(ParseInfo parseInfo)

Set parse information.

Parameters:
  `parseInfo` - parse information, such as beginning line position, beginning column position, ending line position, ending column position, text, and filename

#### setCtxValues

    public void setCtxValues​(org.antlr.v4.runtime.ParserRuleContext ctx)

Set ParserRuleContext values (begin line, begin column, end line, end column, and text).

Parameters:
  `ctx` - the antlr ParserRuleContext

#### setCtxValuesAndFilename

    public void setCtxValuesAndFilename​(org.antlr.v4.runtime.ParserRuleContext ctx,
                                        String filename)

Set ParserRuleContext values (begin line, begin column, end line, end column, and text) and file name.

Parameters:
  `ctx` - the antlr ParserRuleContext
  `filename` - the filename (if it exists)

#### getFilename

    public String getFilename()

Specified by:
  `getFilename` in interface `ParseInfo`

#### getBeginLine

    public int getBeginLine()

Specified by:
  `getBeginLine` in interface `ParseInfo`

#### getBeginColumn

    public int getBeginColumn()

Specified by:
  `getBeginColumn` in interface `ParseInfo`

#### getEndLine

    public int getEndLine()

Specified by:
  `getEndLine` in interface `ParseInfo`

#### getEndColumn

    public int getEndColumn()

Specified by:
  `getEndColumn` in interface `ParseInfo`

#### getText

    public String getText()

Specified by:
  `getText` in interface `ParseInfo`

#### getParseExceptionList

    public ArrayList<String> getParseExceptionList()

#### printErrorLocation

    public String printErrorLocation()

#### printWarningLocation

    public String printWarningLocation()

#### printInfoLocation

    public String printInfoLocation()

Return info message containing the filename, the beginning line position, and the beginning column position.

Returns:
  the info message