2 个版本
使用旧的 Rust 2015
0.1.1 | 2017 年 3 月 17 日 |
---|---|
0.1.0 | 2017 年 2 月 14 日 |
#3 in #refined
18KB
338 行
RDDL
精炼数据描述语言 (RDDL) 基于 OpenDDL,主要用 Rust 中的相同名称替换原始数据类型名称和字面量语法。
RDDL 的优点
- 简洁的文本
- 可读性和可编辑性
- 存储任意数据
- 强类型
RDDL 适用于描述数据库模式、RPC 协议、3D 模型、游戏对象和神经网络等。
示例
VertexArray
{
f32
{
{1.0, 2.0, 3.0},
{0.5, 0.0, 0.5},
{0.0, -1.0, 4.0}
}
}
Person $chuck
{
Name {str "Charles"}
Friends
{
ref {$alice, $bob}
}
}
Person $alice { Name {str "Alice"} }
Person $bob { Name {str "Bob"} }
语法
RDDL 的语法可以用 PEG 表达
data_file = data_item+
data_item = primitive_item | custom_item
primitive_item = primitive_type name? primitive_data
primitive_data = primitive_value | vector | matrix
vector = '{' (primitive_value (',' primitive_value)*)? '}'
matrix = '{' (vector (',' vector)*)? '}'
custom_item = identifier name? properties? '{' data_item* '}'
property = identifier '=' primitive_value
properties = '(' (property (',' property)*)? ')'
identifier = [A-za-z_][0-9A-za-z_]*
name = ('$' | '%') identifier
primitive_type = "bool" | "u8" | "u16" | "u32" | "u64" |
"i8" | "i16" | "i32" | "i64" | "f32" | "f64" |
"str" | "ref" | "type"
primitive_value = bool | integer | float | string | reference | primitive_type
bool = "true" | "false"
integer = '-'? (hexical | octal | binary | decimal )
hexical = "0x" [0-9A-Fa-f]+ ('_' [0-9A-Fa-f]+)*
octal = "0o" [0-7]+ ('_' [0-7]+)*
binary = "0b" [01]+ ('_' [01]+)*
decimal = [0-9]+ ('_' [0-9]+)*
float = '-'? ([1-9][0-9]* | '0') ('.' [0-9]+)? ([eE] [+-]? [0-9]+)?
string = '"' ([^\\"] | escape_sequence | hex_char | unicode_char)* '"'
escape_sequence = '\\' ('\\' | '"' | '0' | 'n' | 'r' | 't')
hex_char = "\\x" [0-9A-Fa-f][0-9A-Fa-f]
unicode_char = "\\u{" [0-9A-Fa-f]{1,6} '}'
reference = name ('%' identifier)*
space = [ \t\r\n]*
space
可以插入其他标记之间。
依赖项
~175KB