Function chumsky::primitive::take_until
source · [−]pub fn take_until<A>(until: A) -> TakeUntil<A>
Expand description
A parser that accepts any number of inputs until a terminating pattern is reached.
The output type of this parser is (Vec<I>, O)
, a combination of the preceding inputs and the output of the
final patterns.
Examples
let single_line = just::<_, _, Simple<char>>("//")
.then(take_until(text::newline()))
.ignored();
let multi_line = just::<_, _, Simple<char>>("/*")
.then(take_until(just("*/")))
.ignored();
let comment = single_line.or(multi_line);
let tokens = text::ident()
.padded()
.padded_by(comment
.padded()
.repeated())
.repeated();
assert_eq!(tokens.parse(r#"
// These tokens...
these are
/*
...have some
multi-line...
*/
// ...and single-line...
tokens
// ...comments between them
"#), Ok(vec!["these".to_string(), "are".to_string(), "tokens".to_string()]));