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>()); }
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)); } }
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; } } }
protected override IEnumerable <ParseResult> OnParse(ParseContext ctx) { yield return(ctx.Parse(_inner)); }