2个版本
0.0.2 | 2020年7月13日 |
---|---|
0.0.1 | 2020年7月11日 |
#2344 in 编码
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