5 个版本 (3 个重大更新)

使用旧的 Rust 2015

0.4.0-alpha.02018年4月22日
0.3.0 2016年1月15日
0.2.1 2015年8月19日
0.2.0 2015年4月23日
0.1.0 2015年2月22日

排名第 153解析工具

Download history 6561/week @ 2024-04-08 6425/week @ 2024-04-15 6423/week @ 2024-04-22 7035/week @ 2024-04-29 7291/week @ 2024-05-06 6939/week @ 2024-05-13 7373/week @ 2024-05-20 7228/week @ 2024-05-27 7647/week @ 2024-06-03 6969/week @ 2024-06-10 5241/week @ 2024-06-17 5792/week @ 2024-06-24 4988/week @ 2024-07-01 5704/week @ 2024-07-08 7377/week @ 2024-07-15 5286/week @ 2024-07-22

每月下载量 23,597
60 包中使用了 (4 个直接使用)

MIT 许可协议

39KB
886 行代码(不包括注释)

Peresil

Build Status

Rust 中一个简单且简约的字符串解析库。

查看文档以获取快速介绍。

贡献

  1. 分支 ( https://github.com/shepmaster/peresil/fork )
  2. 创建您的功能分支 (git checkout -b my-new-feature)
  3. 添加一个失败的测试。
  4. 添加代码以通过测试。
  5. 提交您的更改 (git commit -am 'Add some feature')
  6. 确保测试通过。
  7. 推送到分支 (git push origin my-new-feature)
  8. 创建一个新的拉取请求

lib.rs:

一个简单且简约的解析库

示例

#[macro_use]
extern crate peresil;

use peresil::{ParseMaster,Progress,Recoverable,Status,StringPoint};

type DemoMaster<'a> = ParseMaster<StringPoint<'a>, DemoError>;
type DemoProgress<'a, T> = Progress<StringPoint<'a>, T, DemoError>;
enum DemoError {
    ExpectedGreeting,
    ExpectedWhitespace,
    ExpectedObject,
}

impl Recoverable for DemoError {
    fn recoverable(&self) -> bool { true }
}

fn parse_basic<'a>(pm: &mut DemoMaster<'a>, pt: StringPoint<'a>)
                  -> DemoProgress<'a, (&'a str, &'a str)>
{
    let tmp = pm.alternate(pt)
        .one(|_, pt| pt.consume_literal("goodbye").map_err(|_| DemoError::ExpectedGreeting))
        .one(|_, pt| pt.consume_literal("hello").map_err(|_| DemoError::ExpectedGreeting))
        .finish();
    let (pt, greeting) = try_parse!(tmp);

    let (pt, _) = try_parse!(pt.consume_literal(" ").map_err(|_| DemoError::ExpectedWhitespace));

    let tmp = pm.alternate(pt)
        .one(|_, pt| pt.consume_literal("world").map_err(|_| DemoError::ExpectedObject))
        .one(|_, pt| pt.consume_literal("moon").map_err(|_| DemoError::ExpectedObject))
        .finish();
    let (pt, object) = try_parse!(tmp);

    Progress::success(pt, (greeting, object))
}

fn main() {
    let mut pm = ParseMaster::new();
    let pt = StringPoint::new("hello world");

    let result = parse_basic(&mut pm, pt);
    let (greeting, object) = match pm.finish(result) {
        Progress { status: Status::Success(v), .. } => v,
        Progress { status: Status::Failure(..), .. } => panic!("Did not parse"),
    };

    println!("Parsed [{}], [{}]", greeting, object);
}

无运行时依赖项

功能