コード例 #1
0
        /// <summary>
        /// Parses an identifier.
        /// </summary>
        /// <param name="reader">An <see cref="ITextBufferReader"/> that is reading a text source.</param>
        /// <param name="ch">The first character of the identifier.</param>
        /// <returns>The ID of the token that was matched.</returns>
        protected virtual int ParseIdentifier(ITextBufferReader reader, char ch)
        {
            // Get the entire word
            int startOffset = reader.Offset - 1;

            while (!reader.IsAtEnd)
            {
                char ch2 = reader.Read();
                // NOTE: This could be improved by supporting \u escape sequences
                if ((!char.IsLetterOrDigit(ch2)) && (ch2 != '_'))
                {
                    reader.ReadReverse();
                    break;
                }
            }

            // Determine if the word is a keyword
            if (Char.IsLetter(ch))
            {
                int    value;
                String subString = reader.GetSubstring(startOffset, reader.Offset - startOffset);
                if (!caseSensitive)
                {
                    subString = subString.ToLowerInvariant();
                }

                return(keywords.TryGetValue(subString, out value) ? value : SimpleTokenId.Identifier);
            }
            else
            {
                return(SimpleTokenId.Identifier);
            }
        }
コード例 #2
0
        /// <summary>
        /// Parses an identifier.
        /// </summary>
        /// <param name="reader">An <see cref="ITextBufferReader"/> that is reading a text source.</param>
        /// <param name="ch">The first character of the identifier.</param>
        /// <returns>The ID of the token that was matched.</returns>
        protected virtual int ParseIdentifier(ITextBufferReader reader, char ch)
        {
            // Get the entire word
            int startOffset = reader.Offset - 1;

            while (!reader.IsAtEnd)
            {
                // Accept namespaced identifiers
                if (reader.Peek(1) == ':' &&
                    reader.Peek(2) == ':' &&
                    char.IsLetterOrDigit(reader.Peek(3)))
                {
                    reader.Read();
                    reader.Read();
                    reader.Read();
                    continue;
                }

                char ch2 = reader.Read();

                // NOTE: This could be improved by supporting \u escape sequences
                if ((!char.IsLetterOrDigit(ch2)) && (ch2 != '_'))
                {
                    reader.ReadReverse();
                    break;
                }
            }

            // Determine if the word is a keyword
            if (Char.IsLetter(ch))
            {
                object value = keywords[reader.GetSubstring(startOffset, reader.Offset - startOffset)];

                if (value != null)
                {
                    return((int)value);
                }
                else
                {
                    return(LuatTokenId.Identifier);
                }
            }
            else
            {
                return(LuatTokenId.Identifier);
            }
        }
コード例 #3
0
        /// <summary>
        /// Parses an identifier.
        /// </summary>
        /// <param name="reader">An <see cref="ITextBufferReader"/> that is reading a text source.</param>
        /// <param name="ch">The first character of the identifier.</param>
        /// <returns>The ID of the token that was matched.</returns>
        protected virtual int ParseIdentifier(ITextBufferReader reader, char ch)
        {
            // Get the entire word
            int startOffset = reader.Offset - 1;

            while (!reader.IsAtEnd)
            {
                char ch2 = reader.Read();
                if ((!char.IsLetterOrDigit(ch2)) && (ch2 != '_'))
                {
                    reader.ReadReverse();
                    break;
                }
            }

            // This language only has one keyword named "date"
            if (reader.GetSubstring(startOffset, reader.Offset - startOffset) == "date")
            {
                return(ParentTokenId.DateKeyword);
            }

            // Word is an identifier
            return(ParentTokenId.Identifier);
        }
コード例 #4
0
ファイル: LuatLexicalParser.cs プロジェクト: arsaccol/SLED
		/// <summary>
		/// Parses an identifier.
		/// </summary>
		/// <param name="reader">An <see cref="ITextBufferReader"/> that is reading a text source.</param>
		/// <param name="ch">The first character of the identifier.</param>
		/// <returns>The ID of the token that was matched.</returns>
		protected virtual int ParseIdentifier(ITextBufferReader reader, char ch) {
			// Get the entire word
			int startOffset = reader.Offset - 1;
			while (!reader.IsAtEnd) {
                // Accept namespaced identifiers
                if ( reader.Peek( 1 ) == ':' &&
                     reader.Peek( 2 ) == ':' &&
                     char.IsLetterOrDigit( reader.Peek( 3 ) ) )
                {
                    reader.Read();
                    reader.Read();
                    reader.Read();
                    continue;
                }

                char ch2 = reader.Read();

				// NOTE: This could be improved by supporting \u escape sequences
				if ((!char.IsLetterOrDigit(ch2)) && (ch2 != '_')) {
					reader.ReadReverse();
					break;
				}
			}

			// Determine if the word is a keyword
			if (Char.IsLetter(ch)) {
				object value = keywords[reader.GetSubstring(startOffset, reader.Offset - startOffset)];

				if (value != null)
					return (int)value;
				else
					return LuatTokenId.Identifier;
			}
			else
				return LuatTokenId.Identifier;
		}