nomパーサのシリーズを適用し、一致する完全な&str
を返します。私はa+bc+
の形式の文字列に一致させたい。私はかなり近い取得することができ、既存のchain!
macroを使用する:連続一致した入力全体をノームでキャプチャします
named!(aaabccc <&[u8], &str>,
map_res!(
chain!(
a: take_while!(is_a) ~
tag!("b") ~
take_while!(is_c) ,
|| {a}
),
from_utf8
));
fn is_a(l: u8) -> bool {
match l {
b'a' => true,
_ => false,
}
}
fn is_c(l: u8) -> bool {
match l {
b'c' => true,
_ => false,
}
}
たちは、入力として 'aaabccc' を持っていると言うところ。上記パーサーは入力と一致しますが、 'aaa'だけが返されます。私がしたいのは元の入力である 'aaabccc'を返すことです。
chain!
はこれに適したマクロではありませんが、もっと正しいように見える別のマクロはありませんでした。これを行う最善の方法は何でしょうか?私はNOM 1.2.2
とrustc 1.9.0-nightly (a1e29daf1 2016-03-25)
を使用しています。この記事の執筆時点では
。
ああ、私は誤解していました。ありがとうございました! – troutwine
「<&[u8], &str>」ではなく、「<&str, &str>」があればどうなりますか? 'エラー:現在のスコープ内に\'&str \ '型の\' offset \ 'という名前のメソッドは見つかりませんでした。 – Sergey