<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def register(name=None, exprresolver=None, params=None, reg=None):
 """Register an expression resolver. Can be used such as a decorator. For example all remainding expressions are the same. .. code-block:: python @register('myresolver') def myresolver(**kwargs):
 pass .. code-block:: python def myresolver(**kwargs):
 pass register('myresolver', myresolver) .. code-block:: python @register('myresolver') class MyResolver():
 def __call__(**kwargs):
 pass .. code-block:: python class MyResolver():
 def __call__(**kwargs):
 pass register('myresolver', MyResolver) .. code-block:: python class MyResolver():
 def __call__(**kwargs):
 pass register('myresolver', MyResolver()) :param str name: register name to use. Default is the function/class name. :param exprresolver: function able to resolve an expression. :param dict kwargs: parameters of resolver instanciation if exprresolver is a class and this function is used such as a decorator. :param ResolverRegistry reg: registry to use. Default is the global registry . """


    def _register(exprresolver, _name=name, _params=params):
        """Local registration for better use in a decoration context.

        :param exprresolver: function/class able to resolve an expression.
        :param str _name: private parameter used to set the name.
        :param dict _params: private parameter used to set resolver class
            constructor parameters."""

        _exprresolver = exprresolver

        if isclass(exprresolver):  # try to instanciate exprresolver
            if _params is None:
                _params = {}

            _exprresolver = _exprresolver(**_params)

        if _name is None:
            _name = getname(exprresolver)

        reg[_name] = _exprresolver

        if reg.default is None:
            reg.default = _name

        return exprresolver

    if name is None:
        name = getname(exprresolver)

    if reg is None:
        reg = _RESOLVER_REGISTRY

    if exprresolver is None:
        result = _register

    else:
        result = name
        _register(exprresolver)

    return result