Zero-dependency library with no-std support for writing parsers in a concise functional style & with rich error-reporting.
The library's structure can be represented as the trinity of
- [
Input] - [
Pattern] All patterns live in the [pattern] module - [
Parser] All parsers live in the [parser] module
The basic form of a parser is
use ;
If the parser is infallible, i.e. never returns an unrecoverable error, it's customary to make it generic over the reason type, to make combining it easier.
Kinds of errors are distinguished via a user-defined Reason type, which signals what did
a parser expect.
A [ParsingError] can also have no reason, which will mean that the error is recoverable.
The distinction between recoverable & fatal errors is important for parsers that need to try multiple options.
Error reporting with precise location in the source is facilitated by
constructing a [FullParsingError] with methods such as
[Parser::with_full_error], [ParsingError::with_src_loc]