如何使用 Haskell 从 C++ 头文件中提取函数
how to extract the functions from a c++ header file with haskell?
我需要使用 Haskell(不仅是方法只有函数)从 C++ 头文件中获取所有函数,我需要输入参数和返回类型以及方法名称。
我怎么能意识到这一点? OLNY 与正则表达式? 还是我必须编写一个完整的解析器(自下而上或自上而下)?
要从头文件中提取所有函数声明,您需要一个解析器,而不是正则表达式。C++的解析器很难获得,但幸运的是我们有一些:
- Language.C,用于解析 C 文件
- LibClang,用于解析C++文件
使用其中任何一个,您将能够可靠地处理 C 或 C++ 标头,并将声明提取为 Haskell 数据类型,以便进一步处理。
如果你决定解析它们,我建议你使用Parsec,并尝试看看是否有其他人已经这样做了。
但是,已经有许多C++解析器了 - 我建议您使用其中一个并与其输出接口。
我编写了一个名为 cgen 的程序,它生成 C 绑定到C++库,它解析C++标头(使用 Parsec)并收集函数数据,就像你描述的那样。它远不是一个完整的C++解析器,但它可以解析一些简单的头文件 - 就像这个例子一样。
不过,它不是一个库,所以你可能需要调整代码以满足你的需求(如果你有任何改进,请给我一个补丁)。你可以在github上找到相关的代码,特别是模块HeaderParser和HeaderData。
相关文章:
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 如何从也包含C++字母的文本文件中提取某些数字?
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- JPG-如何从ICC配置文件部分APP2读取/提取数据
- 遍历对象向量,并找到与从文本文件中提取的对象匹配的变量
- 如何使用 WINAPI 和 C++ 提取可执行文件的文件描述?
- 查找并提取文件中的某个值
- 如何从txt文件c++中提取括号之间的数字
- 在Linux Mint 19下,从哪里提取wxWidgets的源代码(.cpp文件)用于步骤内部调试
- 如何将ASCII数字转换为从文件中提取的整数
- 帧提取 使用OpenCV的视频文件开头只有几秒钟
- 从 C++ 中的文件路径中提取文件名
- 将文本文件数据读入字符数组时提取运算符的歧义
- 从.o目标文件中提取函数的原始机器代码?
- 有谁知道ziplib是否能够在不实际提取所有文件的情况下验证zip库
- 是否可以为给定的静态库人为地诱导对象文件提取
- C++将.reg文件提取到注册表
- c++文件提取检查是否为int
- 使用文件提取操作符读取int或string