level 5
dwing大神开始自创语言了么?
■ 高级用法
(待续...)
2009年03月01日 05点03分
2
level 13
■ 简介
ToB 包含语言规范和编译器两部分.
ToB 语言严格来说不是一种编程语言, 而是一种描述性质的脚本语言, 它不负责对脚本的解释和执行.
ToB 编译器是用于从 ToB 语言转换为二进制格式的工具, 这种二进制格式可广泛用于其它软件的应用.
如果需要从二进制格式到 ToB 语言的转换, 就需要自行编写合适的“反编译器”.
目前 ToB 主要用于解析和编辑未知二进制格式的脚本和数据, 并通过编译器生成所需的二进制格式.
■ 基本用法
ToB 语言没有关键字, 主要通过一些符号, 定义常量和标签, 表达式, 以及直接的文本和数据来描述.
其中符号必须都是半角符号.
● 输出数据和文本
这是最直接的输出方法, 一般用于未知意义的不会影响其它脚本的数据和文本.
格式例子是(分号后面是注释):
[01 23 45 67 89 AB CD EF] ;十六进制编码, 输出8个字节数据
"abcd中文字符" ;固定GBK编码, 字符串结尾固定加上一个字节'00', 共输出13个字节
'abcd中文字符' ;同上, 区别只是不在结尾加'00', 共输出12个字节
数据和字符串中间都可以随意换行和加 tab 控制符, 不影响输出.
十六进制字符可以用小写, 之间的空格可以省略和增加.
字符串中可以用过转义符输出特殊的符号. 例如:
'\0\1\2...\e\f\"\'\r\n\t\\' ;等同于输出[00 01 02 2E 2E 2E 0E 0F 22 27 0D 0A 09 5C]
● 定义常量
@bin [01 02 03] ;定义常量 bin 为一段二进制数据
@str "常量字符串" ;定义常量 str 为一段字符串, 也可以用单引号
@num_i 12345 ;定义常数 num_i 为一个整数 12345, 用于后面介绍的表达式
@num_f 3.14 ;定义常数 num_f 为一个浮点数 3.14, 用于后面介绍的表达式
bin ;后面引用常量时就相当于输出 [01 02 03] 三个字节
可以命名的常量是字母, 数字, 下划线和点. 其中第一个字符只能是字母或下划线. 大小写区分.
常量只能定义文件的前面, 不能在输出的语句之后定义.
● 定义标签
在脚本文件的任意位置都可以定义标签, 表示定义标签的值为当前已输出二进制数据的字节长度. 如:
#pos001 ;定义标签 pos001, 用于后面介绍的表达式
标签命名规则和常量相同.
2009年03月01日 06点03分
4
level 13
● 表达式输出
表达式语句使用 () 来包围, 其中包含一组表达式, 表达式之间用逗号分隔. 例如:
(1234, bin, str) ;输出三个表达式, 表达式其中可以包含数值, 数据, 字符串, 常量, 标签
(num_i+987, num_f+2.72) ;可以使用 + 和 - 做运算, 运算符两端必须类型相同, 整数和浮点数不能混合运算
(num_i+123:s) ;像这样可以加 : 和字符表示输出数值的字节数,
;其中 b/s/t/i 分别表示 1/2/3/4 字节长, 也可以用 1/2/3/4 来表示
(num_f
+3
.5:d) ;对于浮点数, f/d 分别表示 4/8 字节长
(@ , @ - 123 : b) ;表达式中可以使用 @ 表示表达式语句结尾的输出位置, 即圆括号结尾的位置
可以在脚本前面定义特殊常量 _DEFI 和 _DEFF 来表示默认的整数和浮点数输出字节数, 输出的数值固定为小端.
还有个特殊常量 _FILE, 用来定义脚本文件默认的输出文件名.
按照一般的脚本语言规则, 下划线开头的常量名一般保留给系统使用, 所以尽量不要用于自定义常量.
● 完整例子
; 语句之间使用空格, tab 控制符, 换行符来间隔, 符号的两端不必有间隔
@_FILE "test.bin"
@_DEFI 4
@_DEFF 4
@nop [00]
@call [ca 11]
@str "str"
@num 12
@pi 3.14
call(p001 - num + 123 - @:s, pi:d)
"AAA"
'abc def\n'
nop
#p001
[12 cd 00]
; 编译以上脚本输出为:
; CA 11 7C 00 1F 85 EB 51 B8 1E 09 40 41 41 41 00
; 61 62 63 20 64 65 66 0A 00 12 CD 00
■ 高级用法
(待续...)
2009年03月01日 06点03分
5
level 0
看起来大致上是To Binary~
有这样的编译程序,可简化二进制文件输出,如游戏脚本。
同类型的有用于XML的XLS。另外MKV网站发过一个“EBML”不知算是啥……
2009年03月01日 07点03分
7
level 13
是. 不过已经不再开发了, 而是改用了更好的替代方案.
2011年07月03日 05点07分
9
level 13
没见过bml文件, 如果是公开格式, 就应该有相关资料.
2011年07月06日 02点07分
11