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