使用 python libclang

问题描述

我遇到了问题。我有一个使用(古老的)clang-3.4 设置的 python 脚本,它接收头文件 (.h),解析它们并在定义之后获取所有宏 (#define) 和注释同一行。

例如解析了完整的以下行:

#define SOME_DEFINE 10 /* IN_SomeDefine */

问题是,使用较新版本的 clang(在我的情况下,clang-11),这不再起作用,我想以某种方式移植它。

脚本中的相关代码部分是:

index = Index.create()
tu = index.Parse(None,[filename] + args,options=TranslationUnit.PARSE_DETAILED_PROCESSING_RECORD)

macro_defs = [m for m in tu.cursor.get_children()
              if m.kind in (CursorKind.MACRO_INSTANTIATION,CursorKind.MACRO_DEFinitioN)]

for macro in macro_defs:
    tokens = list(macro.get_tokens())
    # process tokens here

以前,“宏”光标具有宏定义行中的所有标记,因此标记为:#defineSOME_DEFINE/* IN_SomeDefine */。 现在,使用最新的 clang 版本,令牌只有:#defineSOME_DEFINE。问题是我需要在光标中解析整行。

我需要将宏值和注释“值”配对...基本上,从我的示例来看,我将有:key = 10 和 value = IN_SomeDefine。

任何帮助将不胜感激 - 我已经四处搜索,但似乎没有找到任何解决问题的方法

在“index.parse”指令中传递的“args”是一些包含指令(“-I”)和一些定义指令(“-D”)。附注我也尝试过传递“-fparse-all-comments”、“-CC”、“-C”——这些似乎不起作用。

我还要提一下,我在 python virtual env 中工作,python 版本是 2.7 。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)