解析二进制数据

时间:2012-03-26 12:28:15

标签: parsing antlr

我对解析器生成器感兴趣。但我没有理论背景。我只是在网上看了几件事。

目前我正在尝试用ANTLR

做点什么

所以我的问题:

我有一种特殊格式的数据框:

  • 框架的第一个字节是描述数据性质的标签
  • 第二个字节包含数据本身的长度(字节数)
  • 然后跟随数据本身
  • 数据本身可以包含数据框,数据框可以一个接一个地列出

我希望我的描述清楚。我的问题:

我可以用ANTLR创建这样一个解析器来读取帧的长度然后知道帧结束的时间吗?

在ANTLR中,我可以从生成的文件中加载我使用的不同标记吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

我对此并不是100%肯定,但是:

  • 像antlr这样的解析器生成器需要一个至少没有上下文的语法
  • 在数据中使用长度字段会使您的语法不是上下文(我认为是上下文敏感的)

后一点我不确定 - 也许你想对此进行更多的研究。

您可能必须自己编写一个数据包“解析器”(然后必须是您的上下文相关数据包语法的解析器)

或者,你可以删除长度字段,并使用类似s表达式,JSON或xml的东西;这些将由antlr生成的东西解析。

答案 1 :(得分:1)

我认为你最好创建一个手写二进制解析器而不是使用ANTLR,因为ANTLR主要用于读取和理解文本文件而不是二进制数据。词法分析器部分专注于对文本进行标记,因此试图使其读取二进制数据反而将是一场艰苦的战斗。

听起来好像你的结构需要某种递归的方式来读取数据,尽管只需要一个树形结构然后在你读取文件时填充它就可以了。