【发布时间】:2011-07-15 09:59:58
【问题描述】:
我在 Pragmatic-Programmer 类型的代码生成方面有一些经验:指定平台中立格式的数据结构,并为代码生成器编写模板,这些模板使用这些数据结构文件并生成将原始字节提取到特定语言的代码数据结构,对数字数据进行缩放,打印出数据等。实用的(TM)想法是(a)我可以通过修改我的规范文件并重新生成源(这是 DRY 和所有这些)来更改数据结构) 和 (b) 我可以添加额外的功能,只需修改我的模板即可为我的所有结构生成这些功能。
我使用的是一个名为 Jeeves 的 Perl 脚本,它可以工作,但它是通用的,以及我想编写的任何函数来操作我从头开始编写的数据。
是否有任何框架非常适合为结构化二进制数据创建解析器? 我读到的 Antlr 表明这有点矫枉过正。我目前感兴趣的目标语言是 C#、C++ 和 Java,如果重要的话。
一如既往的感谢。
编辑:我会悬赏这个问题。如果有任何我应该关注的领域(要搜索的关键字)或您自己开发的其他解决此问题的方法,我很想听听。
【问题讨论】:
-
不是一个现成的框架,但至少有一些值得思考的地方:okmij.org/ftp/Scheme/binary-parse.scm - 可以在 C# 中应用相同的方法。
-
我不知道您为什么认为 ANTLR(或任何解析器生成器)是矫枉过正。你需要有某种方法来定义你的数据,这需要一种规范语言,在某个地方必须有一个解析器;为此目的编写一个完全临时的解析器没有什么意义。您还需要某种解析器来解析原始二进制数据;传统的解析器生成器通常用于处理文本,但您很容易滥用它们来处理二进制数据。现在,为了解析二进制数据,规则就足够了;可能不需要完整的 CFG。
-
@Ira:关于规范语言的要点。我的 Jeeves 工作中有一个,我只是使用它而不是添加或设计它。
-
...(我评论的最后一句中的错字)“现在,对于解析二进制数据,正则表达式 (FSA) 可能就足够了;可能不需要完整的 CFG”。
标签: parsing code-generation binary-data