private StringBuilder StateEmpty(Ctype ctype, in char cc, StringBuilder sb)
        private StringBuilder ProcessCharacter(int c, char cc, StringBuilder sb)
        {
            if (c == 10)
            {
                if (_state == State.LineComment)
                {
                    _state = State.Empty;
                }
                sb = _state switch
                {
                    State.Empty => StateEmpty(Ctype.Whitespace, cc, sb),
                    State.LiteralInt => StateLiteralInt(Ctype.Whitespace, cc, sb),
                    State.Control => StateControl(Ctype.Whitespace, cc, sb),
                    State.Name => StateName(Ctype.Whitespace, cc, sb),
                    _ => sb
                };
                _line++;
                _pos = 0;
                return(sb);
            }

            // Switch for states that should not be handled based on character type
            // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
            switch (_state)
            {
            case State.LineComment:
                return(sb);

            case State.BlockComment:
                if (_lastStar && cc == '/')
                {
                    _state = State.Empty;
                }
                _lastStar = cc == '*';
                _pos++;
                return(sb);

            case State.Escaped:
                sb     = AddToString(sb, cc);
                _state = State.LiteralString;
                _pos++;
                return(sb);

            case State.LiteralString:
                _pos++;
                switch (cc)
                {
                case '\\':
                    _state = State.Escaped;
                    break;

                case '"':
                    _state = State.Empty;
                    _tokenParser.ParseToken(new Token(TokenType.String, _line, _pos, sb.ToString()));
                    sb = new StringBuilder();
                    break;

                default:
                    sb.Append(cc);
                    break;
                }

                return(sb);

            default:
                if (cc == '"')
                {
                    _pos++;
                    sb = StartString(sb);
                    return(sb);
                }

                break;
            }

            Ctype ctype = CharacterType(c);

            sb = _state switch
            {
                State.Empty => StateEmpty(ctype, cc, sb),
                State.LiteralInt => StateLiteralInt(ctype, cc, sb),
                State.Control => StateControl(ctype, cc, sb),
                State.Name => StateName(ctype, cc, sb),
                _ => sb
            };
            _pos++;
            return(sb);
        }