src/Parsley/Grammar.cs
/// <summary>
/// Choice() always fails without consuming input.
/// 
/// Choice(p) is equivalent to p.
/// 
/// For 2 or more inputs, parsers are applied from left
/// to right.  If a parser succeeds, its reply is returned.
/// If a parser fails without consuming input, the next parser
/// is attempted.  If a parser fails after consuming input,
/// subsequent parsers will not be attempted.  As long as
/// parsers conume no input, their error messages are merged.
///
/// Choice is 'predictive' since p[n+1] is only tried when
/// p[n] didn't consume any input (i.e. the look-ahead is 1).
/// This non-backtracking behaviour allows for both an efficient
/// implementation of the parser combinators and the generation
/// of good error messages.
/// </summary>
Choice() always fails without consuming input.

Choice(p) is equivalent to p.

For 2 or more inputs, parsers are applied from left
to right.  If a parser succeeds, its reply is returned.
If a parser fails without consuming input, the next parser
is attempted.  If a parser fails after consuming input,
subsequent parsers will not be attempted.  As long as
parsers conume no input, their error messages are merged.

Choice is 'predictive' since p[n+1] is only tried when
p[n] didn't consume any input .
This non-backtracking behaviour allows for both an efficient
implementation of the parser combinators and the generation
of good error messages.
Choice () always fails without consuming input . Choice ( p ) is equivalent to p . For 2 or more inputs parsers are applied from left to right . If a parser succeeds its reply is returned . If a parser fails without consuming input the next parser is attempted . If a parser fails after consuming input subsequent parsers will not be attempted . As long as parsers conume no input their error messages are merged . Choice is ' predictive ' since p [ n + 1 ] is only tried when p [ n ] didn ' t consume any input . This non - backtracking behaviour allows for both an efficient implementation of the parser combinators and the generation of good error messages .
public static Parser<T> Choice<T>(params Parser<T>[] parsers)
        {
            if (parsers.Length == 0)
                return Fail<T>();
            return new ChoiceParser<T>(parsers);
        }
public static Parser < T > Choice < T > ( params Parser < T > [ ] parsers ) { if ( parsers . Length == 0 ) return Fail < T > ( ) ; return new ChoiceParser < T > ( parsers ) ; }
Choice() always fails without consuming input.
Choice () always fails without consuming input .