¿Cómo puedo analizar macros en código C ++, utilizando CLANG como analizador y Python como lenguaje de scripting?

Si tengo la siguiente macro en algún código de C ++:

<code>_Foo(arg1, arg2)
</code>

Me gustaría usar Python para encontrar todas las instancias y extensiones de esa macro usando Clang y los enlaces de Python que se proporcionan con cindex.py. No quiero usar una expresión regular de Python en el código directamente porque eso me lleva al 99% del camino, pero no al 100%. Me parece que para llegar al 100%, necesitas usar un analizador de C ++ real como Clang para manejar todos los casos en que las personas hacen cosas tontas que son sintácticamente correctas y compilan, pero no tienen sentido para una expresión regular. Necesito manejar el 100% de los casos y ya que usamos Clang como uno de nuestros compiladores, tiene sentido usarlo también como analizador para esta tarea.

Dado el siguiente código de Python, puedo encontrar lo que parecen ser tipos predefinidos que los enlaces de python de Clang conocen, pero no las macros:

<code>def find_typerefs(node):
    ref_node = clang.cindex.Cursor_ref(node)
    if ref_node:
        print 'Found %s Type %s DATA %s Extent %s [line=%s, col=%s]' % (
            ref_node.spelling, ref_node.kind, node.data, node.extent, node.location.line, node.location.column)

# Recurse for children of this node
for c in node.get_children():
    find_typerefs(c)

index = clang.cindex.Index.create()
tu = index.parse(sys.argv[1])
find_typerefs(tu.cursor)
</code>

Lo que creo que estoy buscando es una forma de analizar el AST en bruto para el nombre de mi macro_FOO(), pero no estoy seguro. ¿Puede alguien proporcionar algún código que me permita pasar el nombre de una Macro y recuperar la extensión o los datos de Clang?

Respuestas a la pregunta(2)

Su respuesta a la pregunta