【问题标题】:Ruby/Python - generating and parsing C/C++ codeRuby/Python - 生成和解析 C/C++ 代码
【发布时间】:2023-03-16 11:01:01
【问题描述】:

我需要从存储在 db 表中的数据生成 C 结构和数组,并交替解析类似的信息。我同时使用 ruby​​ 和 python 来完成这项任务,并且想知道是否有人听说过一个模块/lib 可以为任何一种/两种语言处理这个?我可以通过一些字符串处理自己完成此操作,但想检查是否存在人们知道的已知且经过测试的解析器。谢谢。

【问题讨论】:

  • 祝你好运。 C 已经是一种不是为易于解析而设计的语言,但 C++ 更糟糕 - 假设您要解析真实代码,而不仅仅是您自己生成的代码。
  • 你为什么要这样做?
  • 我同意,您不太可能找到恰好为 Ruby 或 Python 编写的完整 C 或 C++ 解析器,任何人都没有动力去构建它。因此,您可能需要考虑自己解析它。如果您只想在标量数据类型上处理合法的基本结构,那么为 C 语言的这个子集编写语法非常简单。如果您想要处理 任意 结构(带有联合、位偏移、typedef 的定义/使用等),尤其是那些取自真实代码的结构,那么您还有很多工作要做。

标签: python ruby parsing code-generation lexical-analysis


【解决方案1】:

查看开源软件工具SWIG(简化的包装器和接口生成器)。网页介绍的第一句话:

SWIG 是一种软件开发工具 连接用 C 编写的程序 和 C++ 的各种高级 编程语言。使用 SWIG 使用不同类型的语言 包括常见的脚本语言 例如 Perl、PHP、Python、Tcl 和 红宝石。

非常成熟(根据 Wikipedia 于 1996 年 2 月首次发布),并且有很多教程、文档和帮助。

【讨论】:

    【解决方案2】:

    pyparsing wiki 上有一个基本的 C 结构解析器 here。 Pyparsing 是一个 Python 模块,用于通过将单独的解析构建块组装在一起来创建解析器。 (不过,对于问题的 Ruby 部分没有帮助。)

    【讨论】:

      【解决方案3】:

      我自己没用过,但 CAST 可能值得一看:

      http://cast.rubyforge.org/

      【讨论】:

        猜你喜欢
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多