Crate peresil [−] [src]
A simple and simplistic parsing library
Example
#[macro_use] extern crate peresil; use peresil::{ParseMaster,Progress,Recoverable,Status,StringPoint}; type DemoMaster<'a> = ParseMaster<StringPoint<'a>, DemoError>; type DemoProgress<'a, T> = Progress<StringPoint<'a>, T, DemoError>; enum DemoError { ExpectedGreeting, ExpectedWhitespace, ExpectedObject, } impl Recoverable for DemoError { fn recoverable(&self) -> bool { true } } fn parse_basic<'a>(pm: &mut DemoMaster<'a>, pt: StringPoint<'a>) -> DemoProgress<'a, (&'a str, &'a str)> { let tmp = pm.alternate() .one(|_| pt.consume_literal("goodbye").map_err(|_| DemoError::ExpectedGreeting)) .one(|_| pt.consume_literal("hello").map_err(|_| DemoError::ExpectedGreeting)) .finish(); let (pt, greeting) = try_parse!(tmp); let (pt, _) = try_parse!(pt.consume_literal(" ").map_err(|_| DemoError::ExpectedWhitespace)); let tmp = pm.alternate() .one(|_| pt.consume_literal("world").map_err(|_| DemoError::ExpectedObject)) .one(|_| pt.consume_literal("moon").map_err(|_| DemoError::ExpectedObject)) .finish(); let (pt, object) = try_parse!(tmp); Progress::success(pt, (greeting, object)) } fn main() { let mut pm = ParseMaster::new(); let pt = StringPoint::new("hello world"); let result = parse_basic(&mut pm, pt); let (greeting, object) = match pm.finish(result) { Progress { status: Status::Success(v), .. } => v, Progress { status: Status::Failure(..), .. } => panic!("Did not parse"), }; println!("Parsed [{}], [{}]", greeting, object); }
Macros
try_parse |
An analog to |
Structs
Alternate |
Follows the first successful parsing path. |
ParseMaster |
The main entrypoint to parsing. |
Progress |
Tracks where the parser currently is and if it is successful. |
StringPoint |
Tracks the location of parsing in a string, the most common case. |
Enums
Status |
An analog to |
Traits
Point |
A location in the parsed data |
Recoverable |
Indicate if an error should terminate all parsing. |
Type Definitions
Identifier |
Matches a literal string to a specific type, usually an enum. |