2个版本

0.0.2 2020年7月13日
0.0.1 2020年7月11日

#2344 in 编码

MIT/Apache

110KB
3K SLoC

bmx - 二进制建模表达式

bmx 允许将二进制数据与预期的数据格式树形描述进行匹配。以下称为“语法树”的数据描述具有外部表示,旨在紧凑,同时便于人类和机器产生和消费。

bmx 的当前状态是胚胎状且高度实验性的,或者更简洁地说,它目前是一个PoC。以下(已经工作的)示例将让您了解其用途,请记住,目前代码只是一个粗略的框架。

例如,您可以这样描述一个简单的类似Logo的二进制语言的指令

(root Command
  (fields (tag u8 hidden)))

(branch Command.PencilDown
  (condition (= tag 0)))

(branch Command.PencilUp
  (condition (= tag 1)))

(branch Command.Turn
  (condition (= tag 2))
  (fields (angle u32)))

(branch Command.Move
  (condition (= tag 3))
  (fields (amount u32)))

(branch Command.Loop
  (condition (= tag 4))
  (fields (n-iterations u32)
          ;; TODO: Allow command list
          (command Command)))

bmx上述语法,您可以提供任意输入数据以进行解码。例如,以下数据以十六进制编码、忽略空格的格式给出

00
02 00002710
03 00000710
01
00
04 00000004
02 0000003c
01

将按以下方式解码

% cargo run -- -l examples/simple.scm -f chex < examples/simple.chex
[...]
decoded 8 bits at 0 as PencilDown
decoded 40 bits at 8 as Turn { angle: 10000 }
decoded 40 bits at 48 as Move { amount: 1808 }
decoded 8 bits at 88 as PencilUp
decoded 8 bits at 96 as PencilDown
decoded 80 bits at 104 as Loop { n-iterations: 4, command: Turn { angle: 60 } }
decoded 8 bits at 184 as PencilUp

依赖关系

~425KB