使用Python LyBrCon解析C++宏行(带有注释)

2024-06-26 13:50:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个问题。我有一个python脚本,它是使用(古老的)clang-3.4设置的,它接收头文件(.h),解析它们,并在同一行上的define之后获得所有宏(#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”是一些include指令(“-I”)和一些definition指令(“-D”)。顺便说一句,我也试着传递“-fparse all comments”、“-CC”、“-C”-这些似乎不起作用

我还必须提到,我正在使用python虚拟环境,python版本是2.7


Tags: in版本脚本index指令some例子clang