Skip to content

Latest commit

 

History

History
103 lines (69 loc) · 2.61 KB

README.md

File metadata and controls

103 lines (69 loc) · 2.61 KB

SDDL (Structured Data Definition Language)

SDDL是一个结构化数据定义语言,可根据定义生成各种语言的数据结构和声明。

关注点:简单、快速、便于扩展和向下兼容。

语法

  • 注释

    以#开始,直到行尾
  • 引用

    最多一个引用块,必须在定义文件最顶部,以当前文件所在目录作为根目录引用其他文件(先编译引用的文件,再编译当前文件)

require {

"FILENAME"

...

}

  • 常量

    定义基本类型(整数/浮点数/字符串/布尔值)的常量符号,一处定义,多处使用,以便于修改

    局部符号(只在该文件有效,最终会直接代入值用于计算其他值,符号名字在编译后不存在,类似C/C++的宏)

local 符号名字 = 任意常量表达式(自动根据表达式类型设置符号类型)

全局符号(被其他文件引用时,在引用文件中也有效,编译后符号名仍存在)

auto 符号名字 = 任意常量表达式(自动根据表达式类型设置符号类型)

integer 符号名字 = 整数常量表达式

number 符号名字 = 浮点数常量表达式

string 符号名字 = 字符串常量表达式

boolean 符号名字 = 布尔常量表达式

整数/浮点数常量表达式支持四则运算(+ - * /)、取余(%)、乘方(^),字符串常量表达式支持连接(..)运算,布尔常量表达式支持条件且(&)、或(|)、取反(!)和整数/浮点数/字符串的比较(== != < > <= >=)判断

  • 消息

    通过基础类型定义扩展类型(亦即协议消息的载体类型),基础类型有整数(integer)/浮点数(number)/字符串(string)/布尔值(boolean)。

类型名字 {

字段类型 字段名字@字段索引 [= 默认值常量/option/array/table/delete]

...

}

同一个扩展类型里面的各字段索引不能相同

字段默认限定为必须,必须字段可以定义一个默认值,在解析协议时若没有打包该字段,则该字段取默认值

若添加option则限定为可选字段,默认值为空(无法自定义)

若添加array则限定为数组字段,默认值为空(无法自定义),可以存多个同类型的值到该字段

若添加table则限定为映射字段,默认值为空(无法自定义),可以以int为键,存多个同类型的值到该字段

若添加delete则该字段被标记为废弃,不会解析和打包该字段,也无法访问,但占用字段索引(字段索引不可重用,以便向下兼容)

  • 消息分发

    通过基础类型和扩展类型定义消息分发的参数。

消息分发组名字 [

消息分发名字@索引 = delete/null/参数类型

...

]

同一个消息分发组里面的名字和索引不能相同

若添加delete则该消息分发被标记为废弃,不会出现在生成代码中,但占用索引(索引不可重用,以便向下兼容)

若添加null则该消息分发无参数

  • 远程调用

    通过基础类型和扩展类型定义远程调用的参数和返回值。

远程调用组名字 (

远程调用名字@索引 = delete/[参数类型][ -> 返回值类型]

...

)

同一个远程调用组里面的名字和索引不能相同

若添加delete则该远程调用被标记为废弃,不会出现在生成代码中,但占用索引(索引不可重用,以便向下兼容)

参数类型和返回值类型都可以省略,此时该远程调用的没有参数和返回值