Java 如何将ANTLR4与二进制数据一起使用? 从主页:

Java 如何将ANTLR4与二进制数据一起使用? 从主页:,java,parsing,antlr4,binary-data,Java,Parsing,Antlr4,Binary Data,ANTLR(另一种语言识别工具)是一个强大的[…]或二进制文件解析器生成器 我已经阅读了几个小时的文档,认为我对ANTLR有了一些基本的了解,但是我很难找到任何关于处理二进制文件的参考资料。而我是看起来的那样 我需要为一些二进制数据创建一个解析器,并决定ANTLR是否有帮助 二进制数据结构 二进制数据在逻辑字段中结构化,如field1,后跟field2,后跟field3等,所有这些字段都有特殊用途。所有这些字段的长度可能不同,并且在生成解析器时可能不知道,因此,例如,我确实知道field1始终是

ANTLR(另一种语言识别工具)是一个强大的[…]或二进制文件解析器生成器

我已经阅读了几个小时的文档,认为我对ANTLR有了一些基本的了解,但是我很难找到任何关于处理二进制文件的参考资料。而我是看起来的那样

我需要为一些二进制数据创建一个解析器,并决定ANTLR是否有帮助

二进制数据结构 二进制数据在逻辑字段中结构化,如field1,后跟field2,后跟field3等,所有这些字段都有特殊用途。所有这些字段的长度可能不同,并且在生成解析器时可能不知道,因此,例如,我确实知道field1始终是4字节,field2可能只是1字节,field3可能是1到10字节,后面可能是附加的field3和n字节,这取决于数据的实际值。这是第二个问题,我知道字段在那里,例如,对于field1,我知道它是4个字节,但我不知道实际值,但这正是我感兴趣的。其他字段也是一样,我需要所有这些字段的值

我在ANTLR需要什么 对我来说,这听起来像是一些任意二进制数据的常见结构和用例,但我在ANTLR中没有看到对此类数据的任何特殊处理。所有示例都使用某种文本,我没有看到一些值提取回调之类的。此外,我认为我需要一些回调来影响解析过程本身,例如,对field3的第一个字节调用一个回调,我检查,确定需要消耗一到N个额外的字节,并且这些字节是field3的逻辑部分,并告诉解析器,这样它就能够“以某种方式”继续进行

最后,我将得到一些更高级别的“field”对象,ANTLR将提供具有回调和侦听器基础设施、行走能力等的底层解析逻辑

有没有人做过类似的事情,并且可以提供一些我似乎错过的示例或具体文档的提示?谢谢

EN 13757-3:2012 我不认为这会让理解我的问题变得更容易,但我所指的二进制数据是在标准
EN 13757-3:2012
中定义的:

仪表的远程读取和通信系统.第1部分: 3:专用应用层

该标准不再在网上免费提供(现在?),但下面的PDF可能会为您提供第4页中示例数据的概述。特别是上述字段的字节不是常数,只定义了数据报的整体结构

语法的标记将是字段,由不同数量的字节实现,但有一个值等。关于ANTLR的自我描述,我希望这样的事情能够以某种方式工作

备选方案:Kaitai.io 无论是谁,像我现在处于类似的位置,请看一看,这读起来非常有希望:


抽象地讨论这一点太难了。在任何人帮助您决定ANTLR4是否是正确的工具之前,您必须提供具体的示例。根据你的描述,这听起来好像不是正确的工具。您可能误解了解析器生成器的用途,但如果没有具体数据,我们无法判断。现有的ANTLR4解析器只是文本,因为标记是字符串。你能在角度步进前调整它吗?Uwould@bhantol我最终需要访问位和字节,所以将所有内容转换为十六进制对我没有任何好处。这是可能的,但有趣的问题是如何创建所需的语法,而不必为标记等提供具体的值。我只知道field1在那里,它是4个字节,而不是它的值。