def add(node: ASTNode, _): isatLeastOneString = Types.isStrictlyString( node.left) or Types.isStrictlyString(node.right) if isatLeastOneString: node.value = str(node.left.value) + str(node.right.value) node.dataType = Types.STRING else: node.value = node.left.value + node.right.value node.dataType = Types.NUMERIC
def reverse_string(node: ASTNode): left = node.left if TypeChecker.isStrictlyString(left): node.dataType = TypeChecker.STRING return Result(True) else: return Result(False, getUniaryOpTypeErr(node))
def hybridAdd(node: ASTNode): left = node.left right = node.right validType = lambda node: TypeChecker.isStrictlyString( node) or TypeChecker.isLooselyNumeric(node) if validType(left) and validType(right): node.dataType = TypeChecker.NUMERIC if TypeChecker.isLooselyNumeric( left) and TypeChecker.isLooselyNumeric( right) else TypeChecker.STRING return Result(True) else: return Result(False, getBinaryOpTypeErr(node))