SDDL是一个结构化数据定义语言,可根据定义生成各种语言的数据结构和声明。
关注点:简单、快速、便于扩展和向下兼容。
require {
"FILENAME"
...
}
-
局部符号(只在该文件有效,最终会直接代入值用于计算其他值,符号名字在编译后不存在,类似C/C++的宏)
local 符号名字 = 任意常量表达式(自动根据表达式类型设置符号类型)
全局符号(被其他文件引用时,在引用文件中也有效,编译后符号名仍存在)
auto 符号名字 = 任意常量表达式(自动根据表达式类型设置符号类型)
integer 符号名字 = 整数常量表达式
number 符号名字 = 浮点数常量表达式
string 符号名字 = 字符串常量表达式
boolean 符号名字 = 布尔常量表达式
整数/浮点数常量表达式支持四则运算(+ - * /)、取余(%)、乘方(^),字符串常量表达式支持连接(..)运算,布尔常量表达式支持条件且(&)、或(|)、取反(!)和整数/浮点数/字符串的比较(== != < > <= >=)判断
类型名字 {
字段类型 字段名字@字段索引 [= 默认值常量/option/array/table/delete]
...
}
同一个扩展类型里面的各字段索引不能相同
字段默认限定为必须,必须字段可以定义一个默认值,在解析协议时若没有打包该字段,则该字段取默认值
若添加option则限定为可选字段,默认值为空(无法自定义)
若添加array则限定为数组字段,默认值为空(无法自定义),可以存多个同类型的值到该字段
若添加table则限定为映射字段,默认值为空(无法自定义),可以以int为键,存多个同类型的值到该字段
若添加delete则该字段被标记为废弃,不会解析和打包该字段,也无法访问,但占用字段索引(字段索引不可重用,以便向下兼容)
消息分发组名字 [
消息分发名字@索引 = delete/null/参数类型
...
]
同一个消息分发组里面的名字和索引不能相同
若添加delete则该消息分发被标记为废弃,不会出现在生成代码中,但占用索引(索引不可重用,以便向下兼容)
若添加null则该消息分发无参数
远程调用组名字 (
远程调用名字@索引 = delete/[参数类型][ -> 返回值类型]
...
)
同一个远程调用组里面的名字和索引不能相同
若添加delete则该远程调用被标记为废弃,不会出现在生成代码中,但占用索引(索引不可重用,以便向下兼容)
参数类型和返回值类型都可以省略,此时该远程调用的没有参数和返回值