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
- 引入了需要自定义标记类型实现
Positioner
trait。 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,我可以看看。