code: def _unquoted_symbol_handler(c, ctx, is_field_name=False):
      
      in_sexp = ctx.container.ion_type is IonType.SEXP
      ctx.set_unicode()
      if c not in _IDENTIFIER_CHARACTERS:
          if in_sexp and c in _OPERATORS:
              c_next, _ = yield
              ctx.queue.unread(c_next)
              assert ctx.value
              yield _CompositeTransition(
                  ctx.event_transition(IonEvent, IonEventType.SCALAR, IonType.SYMBOL, ctx.value.as_symbol()),
                  ctx,
                  partial(_operator_symbol_handler, c)
              )
          _illegal_character(c, ctx.set_ion_type(IonType.SYMBOL))
      val = ctx.value
      val.append(c)
      prev = c
      c, self = yield
      trans = ctx.immediate_transition(self)
      while True:
          if c not in _WHITESPACE:
              if prev in _WHITESPACE or _ends_value(c) or c == _COLON or (in_sexp and c in _OPERATORS):
                  break
              if c not in _IDENTIFIER_CHARACTERS:
                  _illegal_character(c, ctx.set_ion_type(IonType.SYMBOL))
              val.append(c)
          prev = c
          c, _ = yield trans
      yield _symbol_token_end(c, ctx, is_field_name)
docs: Handles identifier symbol tokens. If in an s-expression, these may be followed without whitespace by
      operators.