2 个版本

使用旧的 Rust 2015

0.1.1 2017 年 3 月 17 日
0.1.0 2017 年 2 月 14 日

#3 in #refined

MIT 许可证

18KB
338

RDDL

Crates.io Build Status

精炼数据描述语言 (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