#brackets #parse-tree #parse #tree #parser

bracket_parse

带引号和不带引号的字符串括号列表的简单解析器 -- 已弃用,推荐使用 Gobble,它能更好地完成所有这些功能

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

MIT 协议

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

无运行时依赖项