dwing吧 关注:5,609贴子:87,874
  • 10回复贴,共1

ToB 0.30 公开发布

只看楼主收藏回复

可以在这里下载到源代码,可执行程序,以及简易手册.
http://code.google.com/p/tob/


IP属地:北京1楼2009-03-01 13:54回复
    dwing大神开始自创语言了么?
    ■ 高级用法
    (待续...)


    2楼2009-03-01 13:59
    回复
      ToB (Text of Binary) 语言简易手册 [by dwing]
      ■ 前言
      这只是一个简单的教程, 由于语言的简单, 我不想把它的用法叙述的很复杂.
      因此需要懂得一些计算机的基础知识, 如十六进制编码, ASCII编码, GBK编码, 最好有少量C语言基础.
      在用法上我分为"基本用法"和"高级用法",
      一般情况下只需了解基本用法就可以上手, 并足够大部分应用了;
      高级用法只在为了全面了解语言细节准备的, 当然还有很多的细节需要通过读取源码来了解.
      ToB 语言和编译器还有很多不成熟的地方, 而且编译器还未做足够的测试,
      所以欢迎与 ToB 有关的任何 bug 报告和建议, 联系方式:
      dwing#163.com
      http://tieba.baidu.com/f?kw=dwing
      http://wex.cn/dwing
      http://www.geocities.jp/dwingj
      http://dwing.51.net


      IP属地:北京3楼2009-03-01 14:02
      回复
        ■ 简介
        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, 用于后面介绍的表达式
        标签命名规则和常量相同.


        IP属地:北京4楼2009-03-01 14:03
        回复
          ● 表达式输出
          表达式语句使用 () 来包围, 其中包含一组表达式, 表达式之间用逗号分隔. 例如:
          (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
          ■ 高级用法
          (待续...)


          IP属地:北京5楼2009-03-01 14:03
          回复
            这种二进制格式可广泛用于其它软件的应用. 
            例如?


            6楼2009-03-01 14:33
            回复
              • 220.171.186.*
              看起来大致上是To Binary~
              有这样的编译程序,可简化二进制文件输出,如游戏脚本。
              同类型的有用于XML的XLS。另外MKV网站发过一个“EBML”不知算是啥……


              7楼2009-03-01 15:30
              回复
                这是dwing自己写的么?


                IP属地:广东8楼2011-07-03 10:50
                回复
                  是. 不过已经不再开发了, 而是改用了更好的替代方案.


                  IP属地:北京9楼2011-07-03 13:35
                  回复
                    没见过bml文件, 如果是公开格式, 就应该有相关资料.


                    IP属地:北京11楼2011-07-06 10:13
                    回复
                      有是有啦 不过不知道是不是 http://openebxml.sourceforge.net/realization/components/bml/documents/README_040.html


                      IP属地:江苏12楼2011-07-06 12:57
                      回复