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 在 编码
7,477 每月下载量
用于 25 个crate (8 直接)
275KB
5.5K SLoC
lexpr: Rust的S表达式
你可能还想要
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