12个版本

0.2.7 2023年3月16日
0.2.6 2021年1月9日
0.2.5 2020年7月13日
0.2.4 2019年12月11日
0.1.2 2019年2月24日

#198编码

Download history 977/week @ 2024-03-13 853/week @ 2024-03-20 746/week @ 2024-03-27 816/week @ 2024-04-03 673/week @ 2024-04-10 849/week @ 2024-04-17 792/week @ 2024-04-24 1579/week @ 2024-05-01 982/week @ 2024-05-08 904/week @ 2024-05-15 1220/week @ 2024-05-22 1545/week @ 2024-05-29 2168/week @ 2024-06-05 1618/week @ 2024-06-12 1900/week @ 2024-06-19 1447/week @ 2024-06-26

7,477 每月下载量
用于 25 个crate (8 直接)

MIT/Apache

275KB
5.5K SLoC

lexpr: Rust的S表达式 最新版本 Rustc 版本 1.45+

你可能还想要

S表达式是Lisp语言族中代码和数据的可读文本表示。 lexpr旨在提供工具来

  • 使用sexp宏将S表达式数据嵌入Rust程序中

    use lexpr::sexp;
    
    let address = sexp!(((name . "Jane Doe") (street . "4026 Poe Lane")));
    
  • 使用功能齐全的API构建和分解S表达式数据

    use lexpr::Value;
    
    let names = Value::list(vec!["Alice", "Bob", "Mallory"]);
    println!("The bad guy is {}", names[2].as_str().unwrap());
    
  • 将S表达式数据从其文本表示形式解析和序列化。

  • 将S表达式用作配置文件格式或其他领域特定语言(DSL)的表面语法。 lexpr允许获取解析数据的源位置信息,因此当源作为S表达式数据成功解析时,可以提供指向检测到问题的确切位置的错误消息,但如果解析的数据不符合您的DSL的要求,则解析的数据不满足要求。

要更好地了解lexpr的发展方向,您可能想查看待办事项"为什么"文档。

Rust版本要求

lexpr已在Rust的当前稳定、beta和nightly通道上进行了CI测试。此外,还确保代码在Rust 1.45.0上仍然可以编译。然而,没有对该构建进行测试。

支持的Lisp方言

目前,lexpr主要关注Scheme,主要基于R6RS和R7RS语法,并有一些扩展,以及Emacs Lisp。

以下列出了特定于方言的省略,包括计划在未来修复的省略和故意的省略。如果您缺少尚未列出的功能,请[提交问题]!

方案

  • 与Scheme的数值层次结构相比,当前对数值语法的支持相当有限。尽管如此,整数(包括十六进制、八进制和二进制表示)以及浮点值应该可以正常工作。
  • 对于字符串,尚未实现续行语法(使用尾随斜杠)。
  • 块注释。
  • 尚未实现指令,如#!fold-case#!no-fold-case。不清楚是否将会实现。

Emacs Lisp

  • lexpr仅支持Emacs Lisp的一个子集的主要领域是字符串和字符。您可以查看详细信息
  • 尚未支持任意基数(基数)的整数字面量。

许可

lexpr crate中的代码和文档是自由软件,您可以选择以下任一许可协议:MIT或Apache-2.0。

lexpr存储库包含从以下项目改编的代码和文档

  • serde_json,也采用MIT/Apache-2.0许可。
  • sexpr,版权所有2017 Zephyr Pellerin,采用相同的许可。

依赖关系

~160KB