5 个版本 (3 个重大更新)
使用旧的 Rust 2015
0.4.0-alpha.0 | 2018年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 在 解析工具
每月下载量 23,597
在 60 个 包中使用了 (4 个直接使用)
39KB
886 行代码(不包括注释)
Peresil
Rust 中一个简单且简约的字符串解析库。
查看文档以获取快速介绍。
贡献
- 分支 ( https://github.com/shepmaster/peresil/fork )
- 创建您的功能分支 (
git checkout -b my-new-feature
) - 添加一个失败的测试。
- 添加代码以通过测试。
- 提交您的更改 (
git commit -am 'Add some feature'
) - 确保测试通过。
- 推送到分支 (
git push origin my-new-feature
) - 创建一个新的拉取请求
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);
}