2个不稳定版本
| 0.1.0 | 2023年11月16日 |
|---|---|
| 0.0.0-reserve.0 | 2023年3月28日 |
#1009 在 解析器实现
449 每月下载次数
用于 3 crate
255KB
6.5K SLoC
Rsn - Rusty Notation
此crate处于非常早期的开发阶段。请将任何问题报告到我们的GitHub。
基于UTF-8的文本格式,看起来与有效的Rust代码非常相似。此格式严格遵循Rust的词法规则
no_std 支持
此crate支持支持 alloc crate 的 no_std 目标。
数据类型
ExampleStruct {
integers: [42, 0xFF, 0o77, 0b101],
floats: [42., 3.14, 1e10],
bools: [true, false],
chars: ['a', '\''],
string: "Hello, World!",
raw_string: r#"I said, "Hello, World!""#,
bytes: [b'a', b'\''],
byte_string: b"Hello, World!",
raw_byte_string: br#"I said, "Hello, World!""#,
named_map: StructLike {
field: 42,
},
named_tuple: TupleLike(42),
r#raw_identifiers: true,
array: [1, 2, 3],
tuple: (1, 2, 3),
map: {
"a": 1,
"b": 2,
},
}
-
整数 (
42,0xFF,0o77,0b101) -
浮点数 (
42.,3.14) -
布尔值 (
true,false) -
字符 (
'a','\'') -
字节 (
b'a',b'\'') -
字符串 (
"hello, world") -
原始字符串 (
r#"They said, "Hello World!""#) -
字节字符串 (
b"hello, world") -
命名
- 标识符或原始标识符 (
r#foo) - 映射或元组
- 标识符或原始标识符 (
-
映射
- 由逗号分隔的键值对列表
<值>: <值> - 尾随逗号是可选的
- 由逗号分隔的键值对列表
-
元组(空元组 = 单位)
- 由逗号分隔的
<Value>列表 - 尾随逗号是可选的
- 由逗号分隔的
-
数组
- 由逗号分隔的
<Value>列表 - 尾随逗号是可选的
- 由逗号分隔的
-
注释
// 和/* */ -
通过 #[] 语法进行潜在扩展
- 半严格逗号分隔的列表
#[foo(...), bar = ...,]- 所有花括号/括号/括号必须正确配对吗?
其他相关项目
为什么不选择 Ron?
Ron 是一个很好的格式。有一些设计决策导致了这种非常相似但又不完全相同的格式的发明。
ron区分元组和列表,而rsn将所有序列视为相同。ron使用不同的语法来表示结构和映射。rsn使用相同的语法来表示这两个概念。ron对Option<T>提供了特殊支持。rsn将Option<T>视为任何其他枚举。ron的解析规则与 Rust 相近但不同,而rsn尝试匹配实现。- Unicode 空白符和标识符(在 ron-rs/ron#444 中添加)
- Rust 允许浮点字面量中使用
_ - Rust 允许在字符串字面量中转义原始行结束符。
- Rust 支持字节字符串和字节字面量,而 Ron 选择使用
base64编码的字符串来表示字节值。
Rust 语法和 Rsn 之间的差异
语法与有效 Rust 代码不同
- 映射字面量。Rust 没有映射字面量的语法。
- 枚举变体未使用类型名称使用 --
Red与Color::Red- 如果存在
use Color::*,则这是技术上有效的 Rust 语法。
- 如果存在
- 无穷大和 NaN 浮点数表示为
+inf/-inf/+NaN/-NaN。- 为了与 Rust 语法兼容,正在考虑支持
f64::INFINITY。
- 为了与 Rust 语法兼容,正在考虑支持
字面量解析的规则应尽可能接近 Rust 的规则。
依赖项
~115–360KB