public TokenTagCollection Match(SnapshotSpan span)
        {
            var tokenTags = new TokenTagCollection(span);

            string token    = span.GetText();
            int    position = span.Start + token.Length;

            if (_builtInTokens.Contains(token))
            {
                tokenTags.SetClassifierTag(BUILT_IN_TOKEN_TYPE);
            }
            else if (IsFloatingConstant(token))
            {
                tokenTags.SetClassifierTag(FLOAT_TOKEN_TYPE);
            }
            else if (IsIntegerConstant(token))
            {
                var isFloat = false;

                // Now that we have matched with an integer, look ahead to see if we are followed by a decimal
                if (span.Snapshot.GetText(span.End, 1) == ".")
                {
                    var nConsumed = 1;
                    var text      = span.Snapshot.GetText();

                    for (var i = span.End.Position + 1; i < text.Length; i++)
                    {
                        if (char.IsNumber(text[i]))
                        {
                            isFloat = true;
                            nConsumed++;
                        }
                        else if (text[i] == 'f' || text[i] == 'F')
                        {
                            nConsumed++;
                            break;
                        }
                        else if (text[i] == 'l')
                        {
                            if (text[i + 1] == 'f' || text[i + 1] == 'F')
                            {
                                nConsumed += 2;
                            }
                            else
                            {
                                isFloat = false;
                            }

                            break;
                        }
                        else
                        {
                            break;
                        }
                    }

                    if (isFloat)
                    {
                        tokenTags.ClassifierTagSpan = new TagSpan <GLSLClassifierTag>(span.Extended(nConsumed), new GLSLClassifierTag(FLOAT_TOKEN_TYPE));
                    }
                }

                if (!isFloat)
                {
                    tokenTags.SetClassifierTag(INT_TOKEN_TYPE);
                }
            }

            return(tokenTags);
        }