Parsing ANTLR是序列化/反序列化二进制数据格式的合适工具吗?

Parsing ANTLR是序列化/反序列化二进制数据格式的合适工具吗?,parsing,antlr,generator,ebnf,ragel,Parsing,Antlr,Generator,Ebnf,Ragel,我需要读写八进制数据流,通过各种网络发送数据,以便与智能电表通信。ANSI标准ANSI C12.19描述了二进制数据格式。虽然数据格式不太复杂,但标准非常大(500多页),因为它描述了许多不同的类型。该标准完全由EBNF语法描述。我正在考虑使用ANTLR来读取EBNF语法或其修改版本,并创建能够读写八位字节流的C#类 这是ANTLR的一个很好的用途吗 如果是这样,我需要做什么才能使用ANTLR 3.1?从搜索新闻组档案来看,似乎我需要实现一个新的流,它可以读取字节而不是字符。这就是全部,还是我也

我需要读写八进制数据流,通过各种网络发送数据,以便与智能电表通信。ANSI标准ANSI C12.19描述了二进制数据格式。虽然数据格式不太复杂,但标准非常大(500多页),因为它描述了许多不同的类型。该标准完全由EBNF语法描述。我正在考虑使用ANTLR来读取EBNF语法或其修改版本,并创建能够读写八位字节流的C#类

这是ANTLR的一个很好的用途吗

如果是这样,我需要做什么才能使用ANTLR 3.1?从搜索新闻组档案来看,似乎我需要实现一个新的流,它可以读取字节而不是字符。这就是全部,还是我也必须实现Lexer派生

如果ANTLR可以帮助我读取/解析流,它也可以帮助我写入流吗

谢谢


dan finucane在我看来,掌握语法能给你极大的提升

ANTLR 3.1具有与解析/词法分析分离的StringTemplate和代码生成功能,因此您可以通过这种方式分解问题


对我来说似乎是个赢家,值得一试。

这个主题不时出现在ANTLR邮件列表上。答案通常是否定的,因为二进制文件格式非常规则,不值得花费这么多开销。

您可以看看。它是一个状态机编译器/lexer,用于实现在线协议。我读过报告说它生成的代码非常快。如果不需要解析器和模板引擎,ragel的开销比ANTLR小。如果您需要全面的解析器、AST和良好的模板引擎支持,ANTLR可能是更好的选择。

我以前从未听说过Ragel。这听起来很有趣,可能对我的问题有用。谢谢。如果您需要递归规则,那么使用Ragel可能会遇到一些麻烦。如果不是的话,它可能是你工作的一个很好的工具。有500页的标准主题(?!)经常出现在ANTLR邮件列表上?机器开销必须很大,才能超过使用大型解析器生成器正确实现标准的好处。