微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 python libclang

如何解决使用 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 举报,一经查实,本站将立刻删除。