10

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

这是对ANTLR的好用吗?

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

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

谢谢。

丹芬卡内

4

3 回答 3

16

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

于 2009-04-11T15:44:47.810 回答
10

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

于 2009-02-05T18:03:22.853 回答
4

在我看来,掌握语法会让你大有帮助。

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

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

于 2009-02-05T17:54:17.380 回答