5 个版本
使用旧的 Rust 2015
0.1.4 | 2020年6月11日 |
---|---|
0.1.3 | 2018年8月3日 |
0.1.2 | 2018年8月3日 |
0.1.1 | 2018年8月2日 |
0.1.0 | 2018年8月2日 |
在 解析器实现 中排名第1882
16KB
410 行
Bracket Parse
此功能旨在将括号化的 Lisp/Prolog 类型的字符串转换为树,其中每个括号被视为某种类型的父节点
即将在 v0.1.4 中推出
处理 Jsonish 对象 - 可能需要另一个变体
0.1.3 版本中的更改
在 &Bracket 上实现迭代器
0.1.2 版本中的更改
添加了 tail_n 以跳过尾链,因为 tail().tail() 会丢弃借用。还添加了 tail_h 以实现 tail(n),再次避免借用丢失。
为 Bracket 实现了 Display //TODO 安全地转义字符串
lib.rs
:
Bracket Parse
解析括号列表和字符串集合的实用工具。
它现在已被弃用,因为 Gobble 可以更好地完成所有这些功能。这是我早期的 Rust 项目之一,这也体现了出来。
这是一种相对懒散的方式来解析括号字符串中的项目
"hello(peter,dave)" 对它来说很容易处理,嵌套括号也是如此。
上述代码将生成类似以下内容
Branch[Leaf("hello"),Branch[Leaf("peter"),Leaf("dave")]]
目前它并不是特别易于扩展,尽管欢迎贡献。
列表也可以通过使用链式构建类型方法相对简单地构建
use bracket_parse::{Bracket,br};
use bracket_parse::Bracket::{Leaf,Branch};
use std::str::FromStr;
let str1 = Bracket::from_str("hello(peter,dave)").unwrap();
//Standard Build method
let basic1 = Branch(vec![Leaf("hello".to_string()),
Branch(vec![Leaf("peter".to_string()),
Leaf("dave".to_string())])]);
//Chaining Build method
let chain1 = br().sib_lf("hello")
.sib(br().sib_lf("peter").sib_lf("dave"));
assert_eq!(str1,basic1);
assert_eq!(str1,chain1);
它还可以处理带有转义的字符串输入。引号将被移除,字符串项目被视为单个 Leaf 值;
use bracket_parse::{Bracket,br,lf};
use std::str::FromStr;
let bk = Bracket::from_str(r#""hello" 'matt"' "and \"friends\"""#).unwrap();
let chn = br().sib_lf("hello").sib_lf("matt\"").sib_lf("and \"friends\"");
assert_eq!(bk,chn);