C++ 解析c++;使用GNU工具链从文件中获取函数头
我需要解析SWIG使用的.I文件中的函数头,该文件包含函数头旁边的各种垃圾。(最终输出将是函数声明列表)C++ 解析c++;使用GNU工具链从文件中获取函数头,c++,parsing,gcc,swig,C++,Parsing,Gcc,Swig,我需要解析SWIG使用的.I文件中的函数头,该文件包含函数头旁边的各种垃圾。(最终输出将是函数声明列表) 对我来说,最好的选择是使用GNU工具链(GCC、Binutils等)来实现这一点,但我可能缺少使用SWIG实现这一点的简单方法。如果我是,请告诉我 谢谢:] 编辑:我也不知道如何使用GCC工具链来实现这一点,如果你有想法的话,这将非常棒。从垃圾(即C头文件)中提取函数decls的最佳方法是替换掉最难闻的垃圾:宏。您可以通过以下方式实现: cpp - The C Preprocessor
对我来说,最好的选择是使用GNU工具链(GCC、Binutils等)来实现这一点,但我可能缺少使用SWIG实现这一点的简单方法。如果我是,请告诉我
谢谢:]
编辑:我也不知道如何使用GCC工具链来实现这一点,如果你有想法的话,这将非常棒。从垃圾(即C头文件)中提取函数decls的最佳方法是替换掉最难闻的垃圾:宏。您可以通过以下方式实现:
cpp - The C Preprocessor
我们提供通用程序解析、分析和转换功能。它有多种语言的前端,包括C++。
已用于分析和转换非常复杂的C++程序及其头文件。
您不清楚在“解析函数头”之后将做什么;通常人们想要提取一些信息或制作另一个工件。具有C++前端的DMS可以进行解析;您可以将DMS配置为执行自定义操作 实际上,这通常不是一个下午的练习;DMS是一种复杂的动物,因为它必须处理复杂的动物,如C++。我希望你面对任何一种能够处理C++的工具都面临同样的复杂性。GCC工具链可以清楚地处理C++,因此您可能能够做到这一点(在相同的复杂性级别),但GCC被设计成编译器,而IMO则会发现它是一个战斗,以使其满足您的需要。您的“输出函数声明”目标不明确。你只需要函数名吗?你想要一个函数签名吗?您想要函数所依赖的所有类型声明吗?如果函数所依赖的所有类型声明都不存在于要使用的现有include文件中,那么您需要这些类型声明吗?我会尝试从或获取抽象语法树的XML转储。从那里,您可以轻松提取感兴趣的函数声明。这对我没有帮助。宏等可能占文件的1%,我需要更强大的东西。我需要得到函数签名。它看起来确实是一个很棒的软件,但不幸的是我需要解决开源\免费的问题。为什么不需要支持函数签名的类型的类型声明呢?在我们使用DMS的大多数应用程序中,您希望生成代码来实例化/调用此类函数,您需要这些信息,否则无法获得可编译代码。我可以仅使用函数签名来获得可编译代码,因为我可以创建一个空指针,指向函数正在使用的类型,并使用*ptr作为对象。这是一种欺骗,但它肯定会编译,这就是我现在所需要的。谢谢你的回答!