docs: def _exponent_handler_factory(ion_type, exp_chars, parse_func, first_char=None):
      """Generates a handler co-routine which tokenizes an numeric exponent.
  
      Args:
          ion_type (IonType): The type of the value with this exponent.
          exp_chars (sequence): The set of ordinals of the legal exponent characters for this component.
          parse_func (callable): Called upon ending the numeric value. Accepts the current token value and returns a
              thunk that lazily parses the token.
          first_char (Optional[int]): The ordinal of the character that should be appended instead of the character that
              occurs first in this component. This is useful for preparing the token for parsing in the case where a
              particular character is peculiar to the Ion format (e.g. 'd' to denote the exponent of a decimal value
              should be replaced with 'e' for compatibility with python's Decimal type).
      """
      def transition(prev, c, ctx, trans):
          if c in _SIGN and prev in exp_chars:
              ctx.value.append(c)
          else:
              _illegal_character(c, ctx)
          return trans
      illegal = exp_chars + _SIGN
      return _numeric_handler_factory(_DIGITS, transition, lambda c, ctx: c in exp_chars, illegal, parse_func,
                                      illegal_at_end=illegal, ion_type=ion_type, first_char=first_char)