7 个版本 (破坏性更新)
0.7.0 | 2019年1月9日 |
---|---|
0.6.0 | 2019年1月7日 |
0.5.0 | 2019年1月3日 |
0.4.0 | 2019年1月3日 |
0.1.0 | 2018年12月28日 |
#141 in 解析工具
49KB
2.5K SLoC
markab_parser
本软件包提供简单、无复制和丰富错误信息的字符串解析器组合
创建简单解析器
您可以使用 character
、character_class
和 string
创建简单解析器。
每个方法都返回一个实现 Parser
特性的类,CharacterParser
、CharacterClassParser
、StringParser
,并通过调用 parse
方法返回源字符串的切片。
use markab_parser::{
string,
Parser,
};
let src = "requirement";
let mut pos = 0;
let parser = string("requirement");
let result = parser.parse(src, &mut pos);
assert!(result.is_ok());
assert_eq!(result.ok().unwrap(), "requirement");
assert_eq!(pos, 11);
组合解析器
Parser
特性提供了解析器组合的方法。
use markab_parser::{
character,
character_class,
Parser,
};
// require "1" and return "1"
let parser = character('1');
// require "12" and return ("1","2")
let seq = parser.and_then(character('2'));
// require "1" or "2" and return Either("1","2")
let ord = character_class(false, &[], &['1'..'2']);
// require `0-9`+ and return as usize
let map = character_class(false, &[], &['0'..'9'])
.one_or_more()
.stringify()
.map(|num| num.parse::<usize>().unwrap());
创建新的解析器
如果解析器有参数,则应实现 Parser
特性。如果没有参数,则应实现 Parseable
特性。Parseable 特性提供静态方法 Parseable::parse
和 Parseable::get_parser
来获取用于组合的解析器实例
变更日志
版本 0.1.0
- 添加原始解析器。
版本 0.2.0
- 添加
AndParser
和NotParser
。
版本 0.3.0
- 为类型添加
Debug
和Display
实现。
版本 0.4.0
- 从错误类型的参数类型中删除解析器类型。
- map_parser 模块变为公共。
版本 0.5.0
- 从 MapParserError 的参数类型中删除解析器类型。
版本 0.6.0
- 简化生命周期。
- 从 Parseable 特性中删除错误类型。(以装箱成本为代价)
版本 0.7.0
- 从 MapParser/GenParser 中删除函数参数类型。
- 要求/错误类型现在需要将解析器类型作为参数。
- 将错误类型添加到 Parseable。(不再需要装箱)
- 向 OrderParser 添加合并方法。
依赖项
~46KB