如何使用 Haskell 从 C++ 头文件中提取函数

how to extract the functions from a c++ header file with haskell?

本文关键字:文件 提取 函数 C++ 何使用 Haskell      更新时间:2023-10-16

我需要使用 Haskell(不仅是方法只有函数)从 C++ 头文件中获取所有函数,我需要输入参数和返回类型以及方法名称。

我怎么能意识到这一点? OLNY 与正则表达式? 还是我必须编写一个完整的解析器(自下而上或自上而下)?

要从头文件中提取所有函数声明,您需要一个解析器,而不是正则表达式。C++的解析器很难获得,但幸运的是我们有一些:

  • Language.C,用于解析 C 文件
  • LibClang,用于解析C++文件

使用其中任何一个,您将能够可靠地处理 C 或 C++ 标头,并将声明提取为 Haskell 数据类型,以便进一步处理。

如果你决定解析它们,我建议你使用Parsec,并尝试看看是否有其他人已经这样做了。

但是,已经有许多C++解析器了 - 我建议您使用其中一个并与其输出接口。

我编写了一个名为 cgen 的程序,它生成 C 绑定到C++库,它解析C++标头(使用 Parsec)并收集函数数据,就像你描述的那样。它远不是一个完整的C++解析器,但它可以解析一些简单的头文件 - 就像这个例子一样。

不过,它不是一个库,所以你可能需要调整代码以满足你的需求(如果你有任何改进,请给我一个补丁)。你可以在github上找到相关的代码,特别是模块HeaderParser和HeaderData。