private void ReadIdentifierOrKeyword()
        {
            var start = _charReader.Position;

            // Skip first letter
            NextChar();

            // The following characters can be letters, digits the underscore and the dollar sign.

            while (char.IsLetterOrDigit(_charReader.Current) ||
                   _charReader.Current == '_' ||
                   _charReader.Current == '$')
            {
                NextChar();
            }

            var end  = _charReader.Position;
            var span = TextSpan.FromBounds(start, end);
            var text = Text.GetSubText(span).ToString();

            _kind = SyntaxFacts.GetUnityKeywordKind(text);

            _contextualKind = SyntaxFacts.GetContextualKeywordKind(text);

            switch (_kind)
            {
            case SyntaxKind.TrueKeyword:
                _value = true;
                break;

            case SyntaxKind.FalseKeyword:
                _value = false;
                break;

            default:
                _value = text;
                break;
            }
        }