a <|> b tries to parse a, and if a fails without
consuming any input, backtracks and tries
to parse b, otherwise it fails as a.
See try_ to ensure a does not consume anything (but it is best
to avoid wrapping large parsers with try_).
a <?> msg behaves like a, but if a fails without
consuming any input, it fails with msg
instead. Useful as the last choice in a series of <|>:
a <|> b <|> c <?> "expected a|b|c".