10 个版本 (重大变更)
0.8.7 | 2019年12月21日 |
---|---|
0.8.3 |
|
0.7.2 | 2019年12月19日 |
0.7.0 |
|
#88 in 解析工具
78 每月下载量
用于 etch
70KB
1.5K SLoC
Glue v0.8
Glue 是一个用于解析基于文本格式的解析器组合框架,易于使用,且相对较快。
使用方法
使用 test
方法检查您的输入是否与解析器匹配
use glue::prelude::*;
if take(1.., is(alphabetic)).test("foobar") {
println!("One or more alphabetic characters found!");
}
使用 parse
方法从您的输入中提取信息
use glue::prelude::*;
assert_eq!(take(1.., is(alphabetic)).parse("foobar"), Ok((
ParserContext {
input: "foobar",
bounds: 0..6,
},
"foobar"
)))
编写您自己的解析器函数
use glue::prelude::*;
#[derive(Debug, PartialEq)]
enum Token<'a> {
Identifier(&'a str),
}
fn identifier<'a>() -> impl Parser<'a, Token<'a>> {
move |ctx| {
take(1.., is(alphabetic)).parse(ctx)
.map_result(|token| Token::Identifier(token))
}
}
assert_eq!(identifier().parse("foobar"), Ok((
ParserContext {
input: "foobar",
bounds: 0..6,
},
Token::Identifier("foobar")
)));
速查表
查找器
用于匹配任意类型的解析器组合器。
find(重复:RangeBounds,parser: impl Parser)
运行解析器至少指定次数,最多指定次数,并捕获其结果。
请参阅 API 文档。
find_all((impl Parser, ...))
按指定顺序运行提供的每个解析器,并返回所有结果。
请参阅 API 文档。
find_any((impl Parser, ...))
运行提供的每个解析器,并返回第一个成功的解析器。
请参阅 API 文档。
find_until(谓词: impl Parser, parser: impl Parser)
运行解析器,直到达到谓词,并捕获其结果。
请参阅 API 文档。
find_separated(重复:RangeBounds,parser:Parser,分隔符:Parser)
解析由分隔符分隔的多个解析器组成的结构。
请参阅 API 文档。
find_when(谓词:Parser,parser:Parser)
运行解析器,如果成功,则运行另一个解析器并返回其结果。
请参阅 API 文档。
find_when_not(谓词:Parser,结果:Parser)
运行解析器,如果不成功,则运行另一个解析器并返回其结果。
请参阅 API 文档。
获取器
字符串匹配的解析组合器。
take(重复:RangeBounds,parser: impl Parser)
运行解析器至少指定次数,最多指定次数,并捕获它解析的输入。
请参阅API 文档。
take_all((impl Parser, ...))
按指定顺序运行提供的每个解析器,并返回所有匹配的输入。
请参阅API 文档。
take_any((impl Parser, ...))
运行提供的每个解析器,直到其中一个成功,并返回它解析的输入。
请参阅API 文档。
take_until(重复:RangeBounds,谓词: impl Parser, parser: Parser)
运行解析器,直到达到谓词,并捕获它解析的输入。
请参阅API 文档。
匹配器
用于匹配字面量的解析组合器。
empty()
匹配无内容并始终成功,在元组中用作占位符。
请参阅API 文档。
eoi()
匹配输入的结束。
请参阅API 文档。
is(test: impl Tester)
使用字符串或字符字面量、回调或实现 Tester
的实例进行匹配。
请参阅下面的 Testers[测试器] 或 API 文档。
isnt(test: impl Tester)
使用字符串或字符字面量、回调或实现 Tester
的实例进行否定匹配。
请参阅下面的 Testers[测试器] 或 API 文档。
one_of(test: &str)
将下一个字符与这些字符之一进行匹配。
请参阅下面的 Testers[测试器] 或 API 文档。
soi()
匹配输入的开始。
请参阅API 文档。
映射器
将一种事物映射到另一种事物的解析组合器。
map_error(parser: impl Parser, map: FnMut)
运行解析器并将它返回的错误映射到不同的错误。
请参阅API 文档。
map_result(parser: impl Parser, map: FnMut)
运行解析器并将它返回的数据映射到成功。
请参阅API 文档。
optional(parser: impl Parser)
运行解析器,在成功时返回 Some
,在失败时返回 None
。
请参阅API 文档。
结构
用于匹配结构的解析组合器。不是默认预置的一部分,需要手动包含这些组合器
use glue::combinators::structures::*;
delimited(prefix: impl Parser, parser: impl Parser, suffix: impl Parser)
匹配由平衡分隔符包围的结构。
请参阅API 文档。
left_delimited(prefix: impl Parser, parser: impl Parser)
匹配带有左侧分隔符的结构。
请参阅API 文档。
right_delimited(parser: impl Parser, suffix: impl Parser)
匹配带有右侧分隔符的结构。
请参阅API 文档。
separated(left: impl Parser, 分隔符: impl Parser, right: impl Parser)
匹配由另一个解析器分隔的两个解析器组成的结构。
请参阅API 文档。
空白符
用于处理空白符的解析器组合器。不是默认引言的一部分,需要手动包含这些组合器。
use glue::combinators::whitespace::*;
space(重复:RangeBounds)
匹配空白字符的缩写。
请参阅API 文档。
trim(parser: impl Parser)
从解析器中去除前后空白。
请参阅API 文档。
字符
实现 Tester
的字符匹配方法,用于与 is
和 isnt
解析器组合器一起使用。
any
匹配任何字符。
one_of("abc")
或 "abc".chars()
将下一个字符与这些字符之一进行匹配。
alphabetic
匹配任何字母字符。
alphanumeric
匹配任何字母数字字符。
numeric
匹配任何数字字符。
digit
匹配任何十进制数字。
hex_digit
匹配任何十六进制数字。
whitespace
匹配任何空白字符。
依赖项
~27KB