代码之家  ›  专栏  ›  技术社区  ›  faceclean

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

  •  2
  • faceclean  · 技术社区  · 15 年前

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

    协议在C头文件中以C的形式定义。 结构 . 通常,我会使用vim做一些替换,将这个文件转换成python代码。但这意味着每次修改协议时,我都必须手动执行此操作。

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

    有什么建议吗?谢谢。


    编辑:

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

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

    我也不想找 已经存在C分析器 . 我之所以问这个问题,是因为我正在读的一本书谈到了解析器生成器,它启发我学习如何使用真正的解析器生成器。


    再次编辑:

    在进行系统设计时,我建议使用google协议缓冲区、zeroc-ice或其他多语言网络编程中间件来消除实现协议的任务。

    然而,并不是每个程序员都能阅读英文文档并愿意尝试新事物,特别是当他们有丰富的经验做它的时候。 古朴 但有点笨拙。

    4 回复  |  直到 15 年前
        1
  •  3
  •   unwind    15 年前

    另一个可能从一开始就觉得有点过于雄心勃勃,但从长远来看也可能为您提供非常好的解决方案是:

    • 用一些高级语言重新定义协议,例如一些自定义XML
    • 生成 二者都 C结构定义 来自同一源的任何必需的python版本。
        2
  •  1
  •   FogleBird    15 年前

    我会亲自使用PLY:

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

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

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

        3
  •  1
  •   hughdbrown    15 年前

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

    那你就可以随心所欲了。大多数解析器生成器将IDL作为示例语法。

        4
  •  0
  •   Douglas Leeder    15 年前

    C结构不太可能是可移植的,足以在机器之间发送。不同的endian、不同的单词大小、不同的编译器都会改变结构映射到字节的方式。

    最好使用为通信而设计的适当的可移植二进制格式。