More expression parsing
diff --git a/src/helper.rs b/src/helper.rs
index bccdd42..2a429e9 100644
--- a/src/helper.rs
+++ b/src/helper.rs
@@ -25,8 +25,8 @@
macro_rules! option {
($i:expr, $submac:ident!( $($args:tt)* )) => {
match $submac!($i, $($args)*) {
- ::nom::IResult::Done(i, o) => ::nom::IResult::Done(i, Some(o)),
- ::nom::IResult::Error => ::nom::IResult::Done($i, None),
+ $crate::nom::IResult::Done(i, o) => $crate::nom::IResult::Done(i, Some(o)),
+ $crate::nom::IResult::Error => $crate::nom::IResult::Done($i, None),
}
};
@@ -38,14 +38,31 @@
macro_rules! opt_vec {
($i:expr, $submac:ident!( $($args:tt)* )) => {
match $submac!($i, $($args)*) {
- ::nom::IResult::Done(i, o) => ::nom::IResult::Done(i, o),
- ::nom::IResult::Error => ::nom::IResult::Done($i, Vec::new()),
+ $crate::nom::IResult::Done(i, o) => $crate::nom::IResult::Done(i, o),
+ $crate::nom::IResult::Error => $crate::nom::IResult::Done($i, Vec::new()),
}
};
}
macro_rules! epsilon {
($i:expr,) => {
- value!($i, ())
+ $crate::nom::IResult::Done($i, ())
+ };
+}
+
+macro_rules! tap {
+ ($i:expr, $name:ident : $submac:ident!( $($args:tt)* ) => $e:expr) => {
+ match $submac!($i, $($args)*) {
+ $crate::nom::IResult::Done(i, o) => {
+ let $name = o;
+ $e;
+ $crate::nom::IResult::Done(i, ())
+ }
+ $crate::nom::IResult::Error => $crate::nom::IResult::Error,
+ }
+ };
+
+ ($i:expr, $name:ident : $f:expr => $e:expr) => {
+ tap!($i, $name: call!($f) => $e);
};
}