12个版本 (稳定)
2.6.0 | 2021年1月21日 |
---|---|
2.5.0 | 2020年12月27日 |
2.4.0 | 2020年1月24日 |
2.3.0 | 2019年9月18日 |
0.1.0 | 2018年12月19日 |
#1173 在 解析器实现
用于 goban
44KB
977 行
SGF解析器
Rust的SGF解析器。支持所有SGF属性和树分支。
注意 将GameTree
转换为字符串时,我们将所有字符集令牌转换为UTF-8,因为这是Rust中所有字符串的编码。
使用pest
进行实际的解析部分。
开发
通过在每次提交上运行cargo clippy
和cargo fmt
来确保代码质量。
所有代码也应进行单元测试。
示例用法
use sgf_parser::*;
let sgf_source = "(;C[comment]EV[event]PB[black]PW[white];B[aa])";
let tree: Result<GameTree, SgfError> = parse(sgf_source);
let tree = tree.unwrap();
let unknown_nodes = tree.get_unknown_nodes();
assert_eq!(unknown_nodes.len(), 0);
let invalid_nodes = tree.get_invalid_nodes();
assert_eq!(invalid_nodes.len(), 0);
tree.iter().for_each(|node| {
assert!(!node.tokens.is_empty());
});
let sgf_string: String = tree.into();
assert_eq!(sgf_source, sgf_string());
依赖项
~3MB
~59K SLoC