Ejemplo n.º 1
0
        public static bool ParseWhen(this IParsingContextStream source, Func <char, bool> predicate, bool accept = false)
        {
            if (source.HasNext && predicate.Invoke(source.Next))
            {
                source.MoveNext();

                if (accept)
                {
                    source.Accept();
                }

                return(true);
            }

            return(false);
        }
Ejemplo n.º 2
0
        public static bool ParseChar(this IParsingContextStream source, char ch1, char ch2, bool accept = false)
        {
            if (source.HasNext && source.Next == ch1 || source.Next == ch2)
            {
                source.MoveNext();

                if (accept)
                {
                    source.Accept();
                }

                return(true);
            }

            return(false);
        }
Ejemplo n.º 3
0
        public static bool ParseOneOf(this IParsingContextStream source, ISet <char> charSet, bool accept = false, IEqualityComparer <char> charComparer = null)
        {
            if (source.HasNext && source.Next.IsContainedBy(charSet, charComparer))
            {
                source.MoveNext();

                if (accept)
                {
                    source.Accept();
                }

                return(true);
            }

            return(false);
        }
Ejemplo n.º 4
0
        public static int ParseDigits(this IParsingContextStream source, bool accept = false)
        {
            var count = 0;

            while (source.HasNext && char.IsDigit(source.Next))
            {
                count++;
                source.MoveNext();
            }

            if (accept && count > 0)
            {
                source.Accept();
            }

            return(count);
        }
Ejemplo n.º 5
0
        public static int ParseWhileOneOf(this IParsingContextStream source, ISet <char> charSet, bool accept = false, IEqualityComparer <char> charComparer = null)
        {
            var count = 0;

            while (source.HasNext && source.Next.IsContainedBy(charSet, charComparer))
            {
                count++;
                source.MoveNext();
            }

            if (accept && count > 0)
            {
                source.Accept();
            }

            return(count);
        }
Ejemplo n.º 6
0
        public static int ParseWhile(this IParsingContextStream source, Func <char, bool> predicate, bool accept = false)
        {
            var count = 0;

            while (source.HasNext && predicate.Invoke(source.Next))
            {
                count++;
                source.MoveNext();
            }

            if (accept && count > 0)
            {
                source.Accept();
            }

            return(count);
        }
Ejemplo n.º 7
0
        public static bool ParseChar(
            this IParsingContextStream source,
            char ch,
            bool accept = false,
            IEqualityComparer <char> charComparer = null)
        {
            if (source.HasNext && Equals(source.Next, ch, charComparer))
            {
                source.MoveNext();

                if (accept)
                {
                    source.Accept();
                }

                return(true);
            }

            return(false);
        }
Ejemplo n.º 8
0
        public static bool ParseText(this IParsingContextStream source, IEnumerable <char> text, IEqualityComparer <char> charComparer = null, bool accept = false)
        {
            foreach (var ch in text)
            {
                if (!source.MoveNext())
                {
                    return(false);
                }

                var cur = source.Current;

                if (!(charComparer?.Equals(ch, cur) ?? ch == cur))
                {
                    return(false);
                }
            }

            if (accept)
            {
                source.Accept();
            }

            return(true);
        }
Ejemplo n.º 9
0
 /// <inheritdoc />
 protected override IParsingProduct TryParseInternal(IParsingContextStream ctx, ParsingOptions options)
 {
     return(ctx.MoveNext() && ctx.Current.IsAny(_range)
                         ? ctx.Accept().CreateTermForAcceptedFragment(FXB.ExpressionTypes.CharTerm)
                         : null);
 }