ToB 0.30 公开发布
dwing吧
全部回复
仅看楼主
level 13
dwing 楼主
可以在这里下载到源代码,可执行程序,以及简易手册.
http://code.google.com/p/tob/
2009年03月01日 05点03分 1
level 5
dwing大神开始自创语言了么?
■ 高级用法
(待续...)
2009年03月01日 05点03分 2
level 13
dwing 楼主
ToB (Text of Binary) 语言简易手册 [by dwing]
■ 前言
这只是一个简单的教程, 由于语言的简单, 我不想把它的用法叙述的很复杂.
因此需要懂得一些计算机的基础知识, 如十六进制编码, ASCII编码, GBK编码, 最好有少量C语言基础.
在用法上我分为"基本用法"和"高级用法",
一般情况下只需了解基本用法就可以上手, 并足够大部分应用了;
高级用法只在为了全面了解语言细节准备的, 当然还有很多的细节需要通过读取源码来了解.
ToB 语言和编译器还有很多不成熟的地方, 而且编译器还未做足够的测试,
所以欢迎与 ToB 有关的任何 bug 报告和建议, 联系方式:
dwing#163.com
https://tieba.baidu.com/f?kw=dwing
http://wex.cn/dwing
http://www.geocities.jp/dwingj
http://dwing.51.net
2009年03月01日 06点03分 3
level 13
dwing 楼主
■ 简介
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
dwing 楼主
● 表达式输出
表达式语句使用 () 来包围, 其中包含一组表达式, 表达式之间用逗号分隔. 例如:
(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 5
这种二进制格式可广泛用于其它软件的应用. 
例如?
2009年03月01日 06点03分 6
level 0
看起来大致上是To Binary~
有这样的编译程序,可简化二进制文件输出,如游戏脚本。
同类型的有用于XML的XLS。另外MKV网站发过一个“EBML”不知算是啥……
2009年03月01日 07点03分 7
level 6
这是dwing自己写的么?
2011年07月03日 02点07分 8
level 13
dwing 楼主
是. 不过已经不再开发了, 而是改用了更好的替代方案.
2011年07月03日 05点07分 9
level 13
dwing 楼主
没见过bml文件, 如果是公开格式, 就应该有相关资料.
2011年07月06日 02点07分 11
level 6
2011年07月06日 04点07分 12
1