我需要读取和写入八位位流,以便通过各种网络与智能电表通信。有一个描述二进制数据格式的ANSI标准ANSI C12.19。虽然数据格式并不太复杂,但标准非常大(500+页面),因为它描述了许多不同的类型。该标准完全由EBNF语法描述。我正在考虑使用ANTLR来读取EBNF语法或其修改版本,并创建可以读取和写入八位位组流的C#类。
这是ANTLR的好用法吗?
如果是这样,我需要做什么才能使用ANTLR 3.1?通过搜索新闻组档案,我似乎需要实现一个新的流,它可以读取字节而不是字符。这就是全部吗?或者我还需要实现一个词法分析器派生函数?
如果ANTLR可以帮助我读取/解析流,那么它也可以帮助我写流吗?
谢谢。
丹·菲努卡恩
发布于 2009-02-05 18:03:23
这个话题经常出现在ANTLR邮件列表中。答案通常是否定的,因为二进制文件格式是非常规则的,这是不值得开销的。
发布于 2009-04-11 15:44:48
你可以看看Ragel。它是一个状态机编译器/词法分析器,对于实现在线协议非常有用。我读过一些报道,说它能生成非常快的代码。如果你不需要解析器和模板引擎,ragel比ANTLR有更少的开销。如果需要完整的解析器、AST和良好的模板引擎支持,ANTLR可能是更好的选择。
发布于 2009-02-05 17:54:17
在我看来,掌握语法会给你很大的帮助。
ANTLR3.1具有独立于解析/词法分析的StringTemplate和代码生成功能,因此您可以通过这种方式分解问题。
在我看来是个赢家,值得一试。
https://stackoverflow.com/questions/517004
复制相似问题