Yap: Yet another (rust) parsing library
This crate helps you to parse input strings and slices by building on the Iterator interface.
The aim of this crate is to provide transparent, flexible and easy to understand parsing utilities which work on arbitrary slices and strings. Some goals of this library are:
- Be simple but flexible. The entire interface is visible on the
Tokenstrait, and everything used internally to implement those functions can be used by you, too. - Do the obvious thing where possible. For this library, that generally means using backtracking functions which won't consume any input unless they successfully parse it.
- Make it possible to return custom error and location information anywhere you might need it.
- Work with standard language features by offering an iterator based interface, rather than requiring specific combinators for control flow and such.
Have a look at the Tokens trait for all of the parsing methods, and examples for each.
Example
use ;
// Step 1: convert our input into something implementing `Tokens`
// ================================================================
let mut tokens = "10 + 2 x 12-4,foobar".into_tokens;
// Step 2: Parse some things from our tokens
// =========================================
// The `Tokens` trait builds on `Iterator`, so we get a `next` method.
// We also get other useful functions..
// As well as combinator functions like `sep_by_all` and `surrounded_by`..
let op_or_digit = tokens.sep_by_all;
// Now we've parsed our input into OpOrDigits, let's calculate the result..
let mut current_op = Plus;
let mut current_digit = 0;
for d in op_or_digit
assert_eq!;
// Step 3: do whatever you like with the rest of the input!
// ========================================================
// This is available on the concrete type that strings
// are converted into (rather than on the `Tokens` trait):
let remaining = tokens.remaining;
assert_eq!;