2011-03-14 67 views
9

我有语用编程器型代码生成一些经验:在一个代码生成器,消费这些数据结构,文件和产生拉原始字节到特定语言的数据代码提供了平台无关的格式和写作模板指定的数据结构结构,对数字数据进行缩放,打印出数据等。好的实用性(TM)思想是(a)我可以通过修改规范文件和重新生成源文件(干燥文件和所有文件)来更改数据结构,和(b)我可以通过修改我的模板添加可以为我的所有结构生成的附加功能。构建结构化二进制数据解析器的框架?

我曾经使用过一个名为Jeeves的Perl脚本,它可以工作,但它是通用的,并且我想编写的任何函数都可以用来处理我从头开始编写的数据。

是否存在一些非常适合用于创建结构化的二进制数据解析器任何框架?我读过的Antlr表明,这是过度的。我感兴趣的目标语言是C#,C++和Java,如果它很重要的话。

感谢一如既往。

编辑:我把一个赏金对这一问题。如果我有任何需要查看的地方(搜索关键词)或其他攻击你自己开发的问题的方法,我很乐意听到他们的消息。

+0

不准备使用的框架,但至少有一些食物认为:http://okmij.org/ftp/Scheme/binary-parse.scm - 可以在C#中应用相同的方法。 – 2011-03-18 16:58:49

+3

我不知道你为什么认为ANTLR(或任何解析器生成器)是矫枉过正。你需要有一些方法来定义你的数据,这需要一种规范语言,对此,必须有一个解析器;为此写一个完全临时解析器是没有意义的。您还需要某种解析器来解析原始二进制数据;传统的解析器生成器通常用于处理文本,但您可以轻松滥用它们来处理二进制数据。现在,为了解析二进制数据,一个正则表达式必须足够;完整的CFG可能不是必需的。 – 2011-03-18 17:03:51

+0

@Ira:关于规范语言的好处。我的Jeeves工作有一个,我只是用它而不是添加或设计它。 – John 2011-03-23 16:58:45

回答

2

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

New Jersey Machine Toolkit实际上集中在对应于指令集的二进制数据流,但我认为这只是二进制流的超集。它具有非常好的工具,可以根据位串来定义字段,并自动生成访问器和这样的生成器。如果你的二进制数据结构包含指针到数据流的其他部分,这可能是特别有用的 。

+0

非常感谢您的帮助! (125) – John 2011-03-24 21:05:08

3

你也可以期待一个相对较新的项目开泰结构,它提供了实现这一目的的语言,也有不错的IDE: Kaitai.io