11 个稳定版本

使用旧的 Rust 2015

2.2.3 2017年7月6日
2.2.1 2017年7月5日
2.1.3 2017年6月26日
1.1.4 2017年6月23日

#2436解析器实现

36 每月下载量

MIT 许可证

63KB
1K SLoC

Atoms

crates.io docs.rs Build Status

该存储库目前正在大力建设中,将在 v2.0.0 版本之前进行重大更改;请勿使用此 crate,直到 v2.0.0 版本。

一个小型、简单、自包含的 s-表达式解析器和美化打印器,由 sexp 分支而来。

文档

请参阅 API 文档


lib.rs:

一个轻量级、自包含的 s-表达式解析器和数据格式。使用 parse 从字符串表示形式获取 s-表达式,并使用 Display 特性进行序列化,可以通过执行 sexp.to_string() 来实现。

Atoms 是一个基本的 S表达式解析器。它解析字符串并生成由 Cons 单元和离散类型的原子值组成的树。目前,只有以下原始类型可用,并用 Value 枚举 表示

  • 空值
  • Cons
  • 符号
  • 字符串
  • 整数
  • 浮点数

这些树由预期的 Cons 单元形成。

解析

解析表达式需要将解析器附加到给定的字符串。

use atoms::{Parser, StringValue};
let text = "(this is a series of symbols)";
let parser = Parser::new(&text);
let parsed = parser.parse_basic().unwrap();
assert_eq!(
    StringValue::into_list(
        vec!["this", "is", "a", "series", "of", "symbols"], 
        |s| StringValue::symbol(s).unwrap()
    ),
    parsed
);

可以较容易地定义符号的自定义解析,允许使用具有解析错误的受限符号集。有关更多信息,请参阅 Parser::parse

渲染

要渲染 S表达式,只需使用 ToString 或直接显示即可。

use atoms::StringValue;
let value = StringValue::cons(
    StringValue::symbol("this").unwrap(),
    StringValue::cons(
        StringValue::string("is"),
        StringValue::cons(
            StringValue::int(4),
            StringValue::symbol("s-expression").unwrap(),
        )
    )
);
assert_eq!(value.to_string(), "(this \"is\" 4 . s-expression)");

依赖项