如何选择合适的Python解析器生成器来解析C结构定义?

2024-09-29 00:13:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个包含两个服务器的项目,一个是用python编写的,另一个是用C编写的。为了最大限度地提高服务器的容量,我们定义了一个二进制专有协议,通过这个协议,这两个服务器可以相互通信。在

协议在C头文件中以Cstruct的形式定义。通常,我会使用VIM做一些替换来将这个文件转换成Python代码。但这意味着每次修改协议时我都要手动执行。在

所以,我相信一个能够解析C头文件的解析器会是一个更好的选择。但是,至少有a dozen of Python parser generator。所以我不知道哪一个更适合我的特定任务。在

有什么建议吗?谢谢。在


编辑:

当然,我要求任何人给我写代码。。。。在

代码已经完成。我将头文件转换成Python代码,其格式是construct,一个可以解析二进制数据的Python库可以识别。在

我也不是在寻找一些已经存在的C解析器。我问这个问题是因为我正在读的一本关于解析器生成器的书启发了我学习如何使用真正的解析器生成器。在


再次编辑:

在设计系统时,我建议使用googleprotocol Buffer、zerocice或其他任何多语言网络编程中间件来消除实现协议的任务。在

然而,并不是每个程序员都能阅读英文文档并愿意尝试新事物,尤其是当他们有丰富的经验用旧的和简单的但有点笨拙的方式来做的时候。在


Tags: 项目代码服务器解析器编辑协议定义头文件
3条回答

作为一种可能从一开始就觉得有点过于雄心勃勃,但从长远来看可能会对您很好的替代解决方案是:

  • 用更高级的语言重新定义协议,例如一些定制的XML
  • 从同一个源代码生成所需的任何Python版本。在

我个人会使用PLY:

http://www.dabeaz.com/ply/

已经有一个用PLY编写的C解析器:

http://code.google.com/p/pycparser/

如果我这样做,我会使用IDL作为结构定义语言。做C结构的主要问题是C有指针,特别是字符串的char*。使用IDL限制了数据类型,并强加了一些语义。在

然后你可以做任何你想做的事。大多数解析器生成器都将IDL作为示例语法。在

相关问题 更多 >