我正在开发一个包含两个服务器的项目,一个用python编写,另一个用C语言编写。为了最大化服务器的容量,我们定义了一个二进制专有协议,通过这个协议,这两个服务器可以相互通信。 / p>
协议在C头文件中以C struct 的形式定义。通常,我会使用VIM进行一些替换以将此文件转换为Python代码。但这意味着我必须在每次修改协议时手动执行此操作。
因此,我认为可以解析C头文件的解析器是更好的选择。但是,至少有a dozen of Python parser generator。所以我不知道哪一个更适合我的特定任务。
有什么建议吗?非常感谢。
编辑:
当然我要求任何人给我写代码....
代码已经完成。我将头文件转换为构造形式的Python代码,一个可以解析二进制数据的python库,可以识别。
我也不是在找一些已经存在的C解析器。我问的是这个问题,因为我正在阅读的一本书谈论解析器生成器,这让我学会了如何使用真正的解析器生成器。
再次编辑:
当我们进行系统设计时,我建议使用Google Protocol Buffer,ZeroC ICE或任何多语言网络编程中间件来消除实现协议的任务。
然而,并非每个程序员都能阅读英文文档,并且想尝试新事物,特别是当他们有很多经验时,可以用古老而简单的来做一些笨拙的事情。
答案 0 :(得分:3)
作为一种替代解决方案,从一开始就可能感觉有点过于雄心勃勃,但也可能长期为您服务,是:
答案 1 :(得分:1)
答案 2 :(得分:1)
如果我这样做,我会使用IDL作为结构定义语言。使用C结构时遇到的主要问题是C有指针,特别是字符串的char *。使用IDL会限制数据类型并强加一些语义。
然后你可以做任何你想做的事。大多数解析器生成器都将IDL作为示例语法。
答案 3 :(得分:0)
C结构不太可能足够便携,无法在计算机之间发送。不同的字节序,不同的字大小,不同的编译器都会改变结构映射到字节的方式。
最好使用专为通信设计的适当的便携式二进制格式。