我需要读写八位字节流,通过各种网络发送,与智能电表进行通信.ANSI标准ANSI C12.19描述了二进制数据格式.虽然数据格式不是太复杂,但标准非常大(500多页),因为它描述了许多不同的类型.该标准由EBNF语法完整描述.我正在考虑利用ANTLR来读取EBNF语法或它的修改版本,并创建可以读写八位字节流的C#类.
这是一个很好的使用ANTLR?
如果是这样,我需要做些什么才能使用ANTLR 3.1?从搜索新闻组档案看来,我似乎需要实现一个可以读取字节而不是字符的新流.是全部还是我必须实现Lexer衍生物?
如果ANTLR可以帮助我读取/解析流,它还可以帮助我编写流吗?
谢谢.
丹芬卡
你可以看看Ragel.它是一个状态机编译器/词法分析器,可用于实现线上协议.我已经阅读了报告,它生成了非常快的代码.如果您不需要解析器和模板引擎,ragel的开销比ANTLR少.如果你需要一个完整的解析器,AST和漂亮的模板引擎支持,ANTLR可能是更好的选择.
这个主题不时出现在ANTLR邮件列表中.答案通常是否定的,因为二进制文件格式非常规则,并且不值得花费.