19个版本
使用旧的Rust 2015
| 0.7.1 | 2017年4月12日 |
|---|---|
| 0.7.0 | 2015年7月17日 |
| 0.6.0 | 2015年7月9日 |
| 0.2.5 | 2015年3月27日 |
#15 in #ll
69 每月下载量
用于 2 个crate(通过 seax_scheme)
89KB
1.5K SLoC
parser-combinators 
Rust的解析器组合器实现,受Haskell库Parsec的启发。与Parsec一样,解析器默认是LL(1),但可以通过使用try组合器选择性地使用任意前瞻。
广义上讲,解析器组合器是一个函数,它接受多个解析器作为参数,并返回一个新的解析器,该解析器通过组合这些解析器创建。例如,many 解析器接受一个解析器 p 作为输入,并返回一个新的解析器,该解析器将 p 应用零次或多次。
该库主要稳定,但内部的一些部分可能仍然会发生变化。如果您尝试使用它,我欢迎您对它的任何反馈。
##示例
extern crate parser_combinators;
use parser_combinators::{many, Parser};
use parser_combinators::char::letter;
let result = many(letter()).parse("hello world");
assert_eq!(result, Ok(("hello".to_string(), " world")));
链接
额外
在parser-combinators-language中有一个额外的crate,其中包含用于在编程语言中进行词法和解析的解析器。
重大更改
以下是parser-combinators较旧版本中大多数重大更改的列表。
0.7.0
Stream::uncons改变了其签名,以便它可以返回错误。如果实现了Stream,则返回Error::end_of_input()而不是()。
0.6.0
- 添加了
Parser::parse_lazy,应该不会破坏任何东西,但我不能肯定。
0.5.0
any_char->any,uncons_char->uncons- 引入了需要自定义标记类型实现
Positionertrait。 satisfy已移动到combinators模块,并使其泛型化,可能会引起类型推断问题。
0.4.0
any_char不再是一个自由函数,而是一个在调用时返回解析器的函数(从0.5.0版本开始,它被称为any)。- 错误信息中将
Cow替换为Info。
0.3.2 / 0.3.0
- 在
Error中添加了一个可以持有任何类型::std::error::Error的变体。 choice_vec和choice_slice被替换为单一的choice。
0.2.6
- 迭代器不能直接用作流,但必须使用
from_iter函数包装。
如果您在更新到新版本时遇到困难,请随意打开一个issue,我可以看看。