Crates.io | parser-combinators |
lib.rs | parser-combinators |
version | 0.7.1 |
source | src |
created_at | 2015-01-26 11:43:05.37346 |
updated_at | 2017-04-12 06:58:20.384808 |
description | **DEPRECEATED** Parser combinators based on the Haskell library parsec. This library has been renamed to combine. See https://crates.io/crates/combine for more recent versions **DEPRECEATED** |
homepage | |
repository | https://github.com/Marwes/parser-combinators |
max_upload_size | |
id | 887 |
size | 107,285 |
An implementation of parser combinators for Rust, inspired by the Haskell library Parsec. As in Parsec the parsers are LL(1) by default but they can opt-in to arbitrary lookahed using the try combinator.
A parser combinators is, broadly speaking, a function which takes several parsers as arguments and returns a new parser, created by combining those parsers. For instance, the many parser takes one parser, p
, as input and returns a new parser which applies p
zero or more times.
The library is mostly stable but a few parts of the internals may still change. If you end up trying it I welcome any feedback from your experience with it.
##Example
extern crate parser_combinators;
use parser_combinators::{many, Parser};
use parser_combinators::char::letter;
let result = many(letter()).parse("hello world");
assert_eq!(result, Ok(("hello".to_string(), " world")));
There is an additional crate which has parsers to lex and parse programming languages in parser-combinators-language.
Here is a list containing most of the breaking changes in older versions of parser-combinators.
Stream::uncons
changed its signature to allow it to return errors. Return Error::end_of_input()
instead of ()
if you implemented Stream
.Parser::parse_lazy
, should not break anything but I can't say for certain.any_char
-> any
, uncons_char
-> uncons
Positioner
trait which needs to be implemented on an custom token types.satisfy
is moved to the combinators
module and made generic, might cause type inference issues.any_char
is no longer a free function but returns a parser when called as all parser functions (and its called any
after 0.5.0)Cow
is replaced by Info
in the error messages.Error
which can hold any kind of ::std::error::Error
choice_vec
and choice_slice
is replaced by just choice
from_iter
functionIf you have trouble updating to a newer version feel free to open an issue and I can take a look.