#parser-combinator #parser #combinator #ll

parser-combinators

已过时 基于Haskell库parsec的解析器组合器。此库已重命名为combine。有关较新版本,请参阅https://crates.io/crates/combine 已过时

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

Download history 32/week @ 2024-03-28 4/week @ 2024-04-04 1/week @ 2024-05-16

69 每月下载量
用于 2 个crate(通过 seax_scheme

MIT 许可证

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")));

文档和示例

crates.io

额外

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 -> anyuncons_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_vecchoice_slice被替换为单一的choice

0.2.6

  • 迭代器不能直接用作流,但必须使用from_iter函数包装。

如果您在更新到新版本时遇到困难,请随意打开一个issue,我可以看看。

无运行时依赖。