namespace Parsley.Primitives { internal class AttemptParser : Parser { private readonly Parser parse; public AttemptParser(Parser parse) { this.parse = parse; } public Reply Parse(TokenStream tokens) { var start = tokens.Position; var reply = parse.Parse(tokens); var newPosition = reply.UnparsedTokens.Position; if (reply.Success || start == newPosition) return reply; return new Error(tokens, ErrorMessage.Backtrack(newPosition, reply.ErrorMessages)); } } }