macro_rules! call {
($i:expr, $fun:expr $(, $args:expr)*) => { ... };
}Expand description
Invoke the given parser function with the passed in arguments.
-
Syntax:
call!(FUNCTION, ARGS...)where the signature of the function is
fn(&str, ARGS...) -> IResult<&str, T> -
Output:
T, the result of invoking the functionFUNCTION
#[macro_use] extern crate synom;
use synom::IResult;
// Parses any string up to but not including the given character, returning
// the content up to the given character. The given character is required to
// be present in the input string.
fn skip_until(input: &str, ch: char) -> IResult<&str, &str> {
if let Some(pos) = input.find(ch) {
IResult::Done(&input[pos..], &input[..pos])
} else {
IResult::Error
}
}
// Parses any string surrounded by tilde characters '~'. Returns the content
// between the tilde characters.
named!(surrounded_by_tilde -> &str, delimited!(
punct!("~"),
call!(skip_until, '~'),
punct!("~")
));
fn main() {
let input = "~ abc def ~";
let inner = surrounded_by_tilde(input).expect("surrounded by tilde");
println!("{:?}", inner);
}