Class TypeVisitorOperatorCalculator
- java.lang.Object
-
- de.monticore.types3.util.TypeVisitorOperatorCalculator
-
public class TypeVisitorOperatorCalculator extends java.lang.ObjectImplementation of common operators for type visitors, e.g., multiply, add, etc. Implemented here, as some logic is reusable across multiple TypeVisitors, e.g. CommonExpressions, OptionalOperators, AssignmentExpressions, ... Additionally, common logic is shared between the Operators.Return values are empty if the operation is not applicable to the types, no error message will be logged. Return values are not SymTypeOfObscure to make sure that this case is not ignored.
-
-
Field Summary
Fields Modifier and Type Field Description protected static TypeVisitorOperatorCalculatordelegateprotected static java.lang.StringREGEX_STRING
-
Constructor Summary
Constructors Constructor Description TypeVisitorOperatorCalculator()
-
Method Summary
-
-
-
Field Detail
-
REGEX_STRING
protected static final java.lang.String REGEX_STRING
- See Also:
- Constant Field Values
-
delegate
protected static TypeVisitorOperatorCalculator delegate
-
-
Method Detail
-
plus
public static java.util.Optional<SymTypeExpression> plus(SymTypeExpression left, SymTypeExpression right)
-
_plus
protected java.util.Optional<SymTypeExpression> _plus(SymTypeExpression left, SymTypeExpression right)
-
calculatePlus
protected SymTypeExpression calculatePlus(SymTypeExpression left, SymTypeExpression right)
-
minus
public static java.util.Optional<SymTypeExpression> minus(SymTypeExpression left, SymTypeExpression right)
-
_minus
protected java.util.Optional<SymTypeExpression> _minus(SymTypeExpression left, SymTypeExpression right)
-
modulo
public static java.util.Optional<SymTypeExpression> modulo(SymTypeExpression left, SymTypeExpression right)
-
_modulo
protected java.util.Optional<SymTypeExpression> _modulo(SymTypeExpression left, SymTypeExpression right)
-
calculatePlusMinusModulo
protected SymTypeExpression calculatePlusMinusModulo(SymTypeExpression left, SymTypeExpression right)
calculates +,-,% without support for String
-
calculatePlusString
protected SymTypeExpression calculatePlusString(SymTypeExpression left, SymTypeExpression right)
-
calculateToString
protected SymTypeExpression calculateToString(SymTypeExpression type)
Assume that toString (or the conceptual equivalent operation) is used on the set of possible values of the given type. This returns the type after the operation, e.g., for an int, one could return the type R"-?\d+". However, one could use R"-?[0-9]{1,10}", or be even more precise. Alternatively, one could print a 3000 as "3*10^3", which does not fit the regexes above. As such, here we try to be as general as possible, and expect specific languages to override this method, if the need for more restrictive types is required.Interestingly, this COULD (but should not!) be generalized; A function (STE target, STE source) -> STE converted, where source is compatible to target, and converted is the result of the conversion to the target type, which is a subType of the target type. E.g., in this case, a regEx is a strict subtype of String, because the additional info is requried. Let's imagine this for further cases, e.g., This additonal info is not needed for assignements (I think), but, e.g., for operations like +. However, this becomes rather unintuitive real quick: Assume that this conversion is allowed: (int, int, int) i3 = (1, (2, 3)); Now we could just use this for the +-operator: (1, 2, 3) + (4, (5, 6)) == (5, 7, 9), but this gets wierd with ((1, 2), 3) + (4, (5, 6)) -> need to find (int, int, int) first, as it is not on either side. Other example: int and tuples can be converted to String, in this case, the following could be allowed: 1 + (2, 3) // "1(2, 3)" which is severely unintuitiv. As such, currently we avoid generalizing this method, as we don't have another (reasonable!) use case. Somewhat simmilar cases would be numeric promotion, autoboxing.
- Returns:
- either a SymTypeOfRegEx or a SymTypeOfString iff compatible, SymTypeObscure otherwise
-
multiply
public static java.util.Optional<SymTypeExpression> multiply(SymTypeExpression left, SymTypeExpression right)
-
_multiply
protected java.util.Optional<SymTypeExpression> _multiply(SymTypeExpression left, SymTypeExpression right)
-
calculateMultiply
protected SymTypeExpression calculateMultiply(SymTypeExpression left, SymTypeExpression right)
-
divide
public static java.util.Optional<SymTypeExpression> divide(SymTypeExpression left, SymTypeExpression right)
-
_divide
protected java.util.Optional<SymTypeExpression> _divide(SymTypeExpression left, SymTypeExpression right)
-
calculateDivide
protected SymTypeExpression calculateDivide(SymTypeExpression left, SymTypeExpression right)
-
calculateArithmeticExpressionNumeric
protected SymTypeExpression calculateArithmeticExpressionNumeric(SymTypeExpression left, SymTypeExpression right)
calculates +,-,*,/,% without support for String and SIUnits
-
plusPrefix
public static java.util.Optional<SymTypeExpression> plusPrefix(SymTypeExpression inner)
-
_plusPrefix
protected java.util.Optional<SymTypeExpression> _plusPrefix(SymTypeExpression inner)
-
minusPrefix
public static java.util.Optional<SymTypeExpression> minusPrefix(SymTypeExpression inner)
-
_minusPrefix
protected java.util.Optional<SymTypeExpression> _minusPrefix(SymTypeExpression inner)
-
calculatePlusMinusPrefix
protected SymTypeExpression calculatePlusMinusPrefix(SymTypeExpression inner)
calculates unary +,-
-
equality
public static java.util.Optional<SymTypeExpression> equality(SymTypeExpression left, SymTypeExpression right)
-
_equality
protected java.util.Optional<SymTypeExpression> _equality(SymTypeExpression left, SymTypeExpression right)
-
inequality
public static java.util.Optional<SymTypeExpression> inequality(SymTypeExpression left, SymTypeExpression right)
-
_inequality
protected java.util.Optional<SymTypeExpression> _inequality(SymTypeExpression left, SymTypeExpression right)
-
calculateEqualityInequality
protected SymTypeExpression calculateEqualityInequality(SymTypeExpression left, SymTypeExpression right)
calculates ==, !=
-
lessThan
public static java.util.Optional<SymTypeExpression> lessThan(SymTypeExpression left, SymTypeExpression right)
-
_lessThan
protected java.util.Optional<SymTypeExpression> _lessThan(SymTypeExpression left, SymTypeExpression right)
-
lessEqual
public static java.util.Optional<SymTypeExpression> lessEqual(SymTypeExpression left, SymTypeExpression right)
-
_lessEqual
protected java.util.Optional<SymTypeExpression> _lessEqual(SymTypeExpression left, SymTypeExpression right)
-
greaterThan
public static java.util.Optional<SymTypeExpression> greaterThan(SymTypeExpression left, SymTypeExpression right)
-
_greaterThan
protected java.util.Optional<SymTypeExpression> _greaterThan(SymTypeExpression left, SymTypeExpression right)
-
greaterEqual
public static java.util.Optional<SymTypeExpression> greaterEqual(SymTypeExpression left, SymTypeExpression right)
-
_greaterEqual
protected java.util.Optional<SymTypeExpression> _greaterEqual(SymTypeExpression left, SymTypeExpression right)
-
calculateNumericComparison
protected SymTypeExpression calculateNumericComparison(SymTypeExpression left, SymTypeExpression right)
calculates<, <=, >, =>
-
booleanAnd
public static java.util.Optional<SymTypeExpression> booleanAnd(SymTypeExpression left, SymTypeExpression right)
-
_booleanAnd
protected java.util.Optional<SymTypeExpression> _booleanAnd(SymTypeExpression left, SymTypeExpression right)
-
booleanOr
public static java.util.Optional<SymTypeExpression> booleanOr(SymTypeExpression left, SymTypeExpression right)
-
_booleanOr
protected java.util.Optional<SymTypeExpression> _booleanOr(SymTypeExpression left, SymTypeExpression right)
-
calculateConditionalBooleanOp
protected SymTypeExpression calculateConditionalBooleanOp(SymTypeExpression left, SymTypeExpression right)
calculates&&, ||
-
logicalNot
public static java.util.Optional<SymTypeExpression> logicalNot(SymTypeExpression inner)
-
_logicalNot
protected java.util.Optional<SymTypeExpression> _logicalNot(SymTypeExpression inner)
-
calculateLogicalNot
protected SymTypeExpression calculateLogicalNot(SymTypeExpression inner)
-
binaryAnd
public static java.util.Optional<SymTypeExpression> binaryAnd(SymTypeExpression left, SymTypeExpression right)
-
_binaryAnd
protected java.util.Optional<SymTypeExpression> _binaryAnd(SymTypeExpression left, SymTypeExpression right)
-
binaryOr
public static java.util.Optional<SymTypeExpression> binaryOr(SymTypeExpression left, SymTypeExpression right)
-
_binaryOr
protected java.util.Optional<SymTypeExpression> _binaryOr(SymTypeExpression left, SymTypeExpression right)
-
binaryXor
public static java.util.Optional<SymTypeExpression> binaryXor(SymTypeExpression left, SymTypeExpression right)
-
_binaryXor
protected java.util.Optional<SymTypeExpression> _binaryXor(SymTypeExpression left, SymTypeExpression right)
-
calculateBinaryInfixOp
protected SymTypeExpression calculateBinaryInfixOp(SymTypeExpression left, SymTypeExpression right)
calculates&, |, ^
-
bitwiseComplement
public static java.util.Optional<SymTypeExpression> bitwiseComplement(SymTypeExpression inner)
-
_bitwiseComplement
protected java.util.Optional<SymTypeExpression> _bitwiseComplement(SymTypeExpression inner)
-
calculateBitwiseComplement
protected SymTypeExpression calculateBitwiseComplement(SymTypeExpression inner)
calculates ~
-
leftShift
public static java.util.Optional<SymTypeExpression> leftShift(SymTypeExpression left, SymTypeExpression right)
-
_leftShift
protected java.util.Optional<SymTypeExpression> _leftShift(SymTypeExpression left, SymTypeExpression right)
-
signedRightShift
public static java.util.Optional<SymTypeExpression> signedRightShift(SymTypeExpression left, SymTypeExpression right)
-
_signedRightShift
protected java.util.Optional<SymTypeExpression> _signedRightShift(SymTypeExpression left, SymTypeExpression right)
-
unsignedRightShift
public static java.util.Optional<SymTypeExpression> unsignedRightShift(SymTypeExpression left, SymTypeExpression right)
-
_unsignedRightShift
protected java.util.Optional<SymTypeExpression> _unsignedRightShift(SymTypeExpression left, SymTypeExpression right)
-
calculateShift
protected SymTypeExpression calculateShift(SymTypeExpression left, SymTypeExpression right)
-
assignment
public static java.util.Optional<SymTypeExpression> assignment(SymTypeExpression left, SymTypeExpression right)
-
_assignment
protected java.util.Optional<SymTypeExpression> _assignment(SymTypeExpression left, SymTypeExpression right)
-
calculateAssignment
protected SymTypeExpression calculateAssignment(SymTypeExpression left, SymTypeExpression right)
-
cast
public static java.util.Optional<SymTypeExpression> cast(SymTypeExpression target, SymTypeExpression source)
-
_cast
protected java.util.Optional<SymTypeExpression> _cast(SymTypeExpression target, SymTypeExpression source)
-
calculateCast
protected SymTypeExpression calculateCast(SymTypeExpression target, SymTypeExpression source)
-
hasSIUnit
protected boolean hasSIUnit(SymTypeExpression... types)
-
getSIUnit
protected java.util.Optional<SymTypeOfSIUnit> getSIUnit(SymTypeExpression type)
-
hasValueType
protected boolean hasValueType(SymTypeExpression... types)
-
getValueType
protected java.util.Optional<SymTypeExpression> getValueType(SymTypeExpression type)
-
obscure2Empty
protected java.util.Optional<SymTypeExpression> obscure2Empty(SymTypeExpression type)
-
fuseSIUnitWithValueType
protected SymTypeExpression fuseSIUnitWithValueType(java.util.Optional<SymTypeOfSIUnit> siUnitType, java.util.Optional<SymTypeExpression> valueType)
-
init
public static void init()
-
reset
public static void reset()
-
setDelegate
protected static void setDelegate(TypeVisitorOperatorCalculator newDelegate)
-
getDelegate
protected static TypeVisitorOperatorCalculator getDelegate()
-
-