Exemple #1
0
        protected override IEnumerable <ParseResult> OnParse(ParseContext ctx)
        {
            if (Definition == null)
            {
                throw new Exception(String.Format("LateDefined \"{0}\" Not yet defined.", Name));
            }

            var match = ctx.Parse(Definition);

            if (!match.Success)
            {
                return(Single(match.Error.Priority < 0 ? ctx.Expected(this) : match));
            }

            return(!_collapse?Single(match) : Enumerable.Empty <ParseResult>());
        }
Exemple #2
0
        protected override IEnumerable <ParseResult> OnParse(ParseContext ctx)
        {
            var result = ctx.Parse(_parser);

            if (result.Success)
            {
                if (result.Length == 0)
                {
                    yield break;
                }
                yield return(result);
            }
            else
            {
                yield return(new ParseResult(result.Error, false));
            }
        }
Exemple #3
0
        protected override IEnumerable <ParseResult> OnParse(ParseContext ctx)
        {
            SymbolExpectedError tailError = null;

// ReSharper disable once ConvertClosureToMethodGroup
            foreach (var result in Parsers.Select(x => ctx.Parse(x)))
            {
                if (result.Success || tailError == null)
                {
                    if (tailError != null)
                    {
                        result.TailError = ctx.Expected(result.TailError, tailError);
                    }

                    yield return(result);

                    tailError = result.TailError;
                }
                else
                {
                    var error = result.Error as SymbolExpectedError;
                    if (error != null)
                    {
                        yield return(ctx.Expected(tailError, error));
                    }
                    else
                    {
                        yield return(result);
                    }
                }

                if (!result.Success)
                {
                    yield break;
                }
            }
        }
Exemple #4
0
 protected override IEnumerable <ParseResult> OnParse(ParseContext ctx)
 {
     yield return(ctx.Parse(_inner));
 }