如何解决使用 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
以前,“宏”光标具有宏定义行中的所有标记,因此标记为:#define
、SOME_DEFINE
和 /* IN_SomeDefine */
。
现在,使用最新的 clang 版本,令牌只有:#define
和 SOME_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 举报,一经查实,本站将立刻删除。