internal override bool Parse(ParseContext context, ParseRule rule, out Token result) { OrderedChoiceMemento state; if (context.Recovering) state = (OrderedChoiceMemento)context.Recover(); else state = new OrderedChoiceMemento(context); context.BeginExpression(state); // Parse each subexpression until the first match for (; state.index < ExpressionCount; ++state.index) { var expr = Expression(state.index); Token t; // Parsing succeeded on a subexpression - return the result if (expr.Parse(context, rule, out t)) { context.EndExpression(); result = t; return true; } context.Offset = state.offset; } context.EndExpression(); return context.Reject(rule, this, out result); }