ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

Rustでnomを使ってみた

nomはrust用のパーサコンビネータです。 https://github.com/Geal/nom/

Qiitaの記事を見て使ってみましたが、小一時間ハマったので結果をメモ

元ネタ https://qiita.com/k5n/items/e95842744fc5db931d03

このサンプルが最新のnomでは動きませんでした。

Cargo.toml

[dependencies]
nom = "^4.2"

とりあえずchain!が影も形もなくて、do_parse!で置き換え、結果の受け取り方も少し変わっています。

#[macro_use]
extern crate nom;

use nom::{space, alpha};

named!(name_parser<&str>,
    do_parse!(
        tag!("Hello,") >>
        space >>
        name: map_res!(alpha, std::str::from_utf8) >>
        (name)
    )
);

fn main() {
    match name_parser("Hello, world!".as_bytes()) {
        Ok(name)  => println!("name = {:?}", name),
        _ => println!("Error")
    }
}

これを実行すると、ちゃんと動いているようです。

name = ([33], "world")