namespace Parsley.Primitives { internal class LabeledParser : Parser { private readonly Parser parser; private readonly ErrorMessageList errors; public LabeledParser(Parser parser, string expectation) { this.parser = parser; errors = ErrorMessageList.Empty.With(ErrorMessage.Expected(expectation)); } public Reply Parse(TokenStream tokens) { var start = tokens.Position; var reply = parser.Parse(tokens); var newPosition = reply.UnparsedTokens.Position; if (start == newPosition) { if (reply.Success) reply = new Parsed(reply.Value, reply.UnparsedTokens, errors); else reply = new Error(reply.UnparsedTokens, errors); } return reply; } } }