8个版本
0.4.4 | 2023年6月27日 |
---|---|
0.4.3 | 2023年6月27日 |
0.3.0 | 2023年6月16日 |
0.2.1 | 2023年6月11日 |
#67 in 解析工具
每月 45 次下载
72KB
2K SLoC
transduce
: 零拷贝同构解析
你的代码应该看起来像它所解析的内容。
请参见 lib.rs
中的此示例
let parser = exact(&b'(') >> verbatim() << exact(&b')');
let input = b"(*)";
assert_eq!(
parser.parse(input),
Ok(&b'*'), // Reference to the region of input inside parentheses
);
// Or, equivalently:
assert_eq!(
parenthesized(verbatim).parse(input),
Ok(&b'*'),
);
这确实做了它看起来要做的。
等价于:
assert_eq!(parenthesized(verbatim()).parse(rawstr.chars()), Ok('*'))
美观的打印错误
parse
方法自动定位错误(甚至对于用户定义的解析器)并打印出精美的、带有颜色的Rust风格错误
(exact(b'?') >> exact(b'?')).parse_or_panic(b"???");
...| Error while parsing:
1 | ???
| ^ Unparsed input remains after parsing what should have been everything
(verbatim() & verbatim() & verbatim() & verbatim()).parse_or_panic(b"???");
...| Error while parsing:
1 | ???
| ^ Reached end of input but expected an item
(verbatim() << exact(b'!')).parse_or_panic(b"???")
...| Error while parsing:
1 | ???
| ^ Expected 33 but found 63
依赖项与 no_std
这个crate没有依赖项。它也是完全的 no_std
;甚至不需要 std
版本。
如果你(出于某种原因?)想在微控制器上运行此程序或者不需要堆分配,可以禁用 alloc
功能。整个核心仍然可以工作,但 base
中的某些解析器(涉及编译时长度未知的向量,例如 comma_separated
)将不可用。
感谢
向UPenn的CIS 194和Haskell的194课程中学到的高阶解析库表示敬意。