构建结构化二进制数据解析器的框架?

Joh*_*ohn 9 parsing code-generation binary-data

我有一些Pragmatic-Programmer类型代码生成的经验:以平台中立格式指定数据结构,并为代码生成器编写模板,这些代码生成器使用这些数据结构文件并生成将原始字节拉入特定于语言的数据结构的代码,对数字数据进行缩放,打印出数据等.很好的实用(TM)思想是(a)我可以通过修改我的规范文件和重新生成源(这是DRY和所有这些)来改变数据结构和( b)我可以通过修改模板添加可以为我的所有结构生成的其他函数.

我使用的是一个名为Jeeves的Perl脚本,但它是通用的,我想编写的任何函数来操作我从头开始编写的数据.

是否有任何框架非常适合为结构化二进制数据创建解析器? 我读过的Antlr表明这太过分了.我目前感兴趣的目标语言是C#,C++和Java,如果重要的话.

一如既往地谢谢.

编辑: 我会在这个问题上给予赏金.如果有任何我应该看的区域(搜索的关键词)或其他攻击你自己开发的问题的方法,我很乐意听到它们.

Ira*_*ter 2

您可能会发现ASN.1很有趣,因为它提供了一种抽象方式来描述您可能正在处理的数据。如果您使用 ASN.1 来抽象地描述数据,则需要一种方法将该抽象数据映射到具体的二进制流,对此ECN(编码控制表示法)可能是正确的选择。

New Jersey Machine Toolkit实际上专注于与指令集相对应的二进制数据流,但我认为这只是二进制流的超集。它具有非常好的设施,可以根据位字符串定义字段,并自动生成此类的访问器和生成器。如果您的二进制数据结构包含指向数据流其他部分的指针,这可能特别有用。