Na, das hört sich doch tatsächlich so an, als wenn der bereits von dir erwähnte `pycparser` hier gut zum Einsatz kommen kann. Das würde dir schonmal den hässlichen Teil des Parsens ersparen. Du musst dich dann sicherlich noch ein bißchen durch den vom Parser erzeugten AST wuseln, um die von dir gewünschte Funktionalität zu erhalten, aber das müsstest du ja so oder so.
Du kannst halt nicht einfach einen regulären Ausdruck schreiben, bei dem du annimmst, dass eine Funktion immer nach dem Schema "Text, runde Klammer auf, ggf Text, runde Klammer zu, geschweifte Klammer auf, Text, geschweifte Klammer zu" oder so ähnlich aufgebaut ist. Das scheitert bereits daran, dass in C-Funktionen regelmäßig weitere geschweifte Klammernpaare geöffnet werden. Da würde ein naiv geschriebener regulärer Ausdruck beim Schließen eines inneren Klammernpaares sofort denken, es wäre das Funktionsende, weil er ja auf eine geschlossene geschweifte Klammer gestoßen ist. Du müsstest das daher im gesamten Kontext betrachten und quasi die Klammernpaare mitzählen. Allein dieser Umstand geht bereits über die Möglichkeiten von regulären Ausdrücken hinaus.
Wie gesagt: Lass dir diesen Teil der Arbeit von nem Tool abnehmen. Dann hast du wenigstens mit recht hoher Wahrscheinlichkeit einen korrekten AST und kannst dich auf dein eigentliches Ziel konzentrieren.
EDIT: Ich empfehle übrigens einen Blick in die
FAQs vom `pycparser`. Da steht zum Beispiel, dass es möglich ist, einen AST automatisch wieder in Code umwandeln zu lassen. Modifikationen und die anschließende Ausgabe des angepassten C-Codes dürften daher möglich sein. Einziges Manko: Der neu erzeugte Code wird höchstwahrscheinlich nicht mehr dieselbe Formatierung haben wie das Original (falls das eine Rolle spielt).
EDIT2: Und mit
func_calls.py gibt es dort sogar ein Beispiel, wie man bestimmte Funktionsaufrufe nachverfolgen kann. Entspricht dies nicht in etwa deinem Vorhaben? Wäre zumindest ein Anfang. Achja, und in
func_defs.py wird gezeigt, wie man Funktionsdefinitionen herausfischen kann.