10
votes

Script Python pour imprimer toutes les définitions de la fonction d'un fichier C / C ++

Je veux un script Python à imprimer une liste de toutes les fonctions définies dans un fichier C / C ++.

E.g. abc.c définit deux fonctions comme: xxx

Je veux juste rechercher le fichier ( abc.c ) et Imprimez toutes les fonctions définies dans elle (noms de fonction uniquement). Dans l'exemple ci-dessus, j'aimerais imprimer func1 , Func2 à l'aide du script Python.


1 commentaires

Savez-vous comment identifier une fonction et vous demandez comment mettre en œuvre ou demandez-vous comment identifier une fonction C def?


4 Réponses :


2
votes

antlr est votre outil


0 commentaires

3
votes

Je suggérerais d'utiliser l'outil Ply lex / yacc. Il y a un analyseur C précuitore et l'analyseur lui-même est assez rapide. Une fois que vous avez le fichier analysé, il ne devrait pas être trop difficile de trouver toutes les fonctions.

http://www.dabeaz.com/ply/


0 commentaires

2
votes

Pour faire cela de manière fiable, vous auriez besoin d'analyser le code C ou C ++, puis de saisir les définitions de fonction de l'AST L'analyseur produit.

c est assez facile à analyser. Comme Pavpanchekha mentionne, L'analyseur pli est livré avec un analyseur C et a été utilisé pour effectuer les projets pertinents suivants:

  • PCYPARSER
  • CPHEADERPARSER

    Paysing C ++ Code est plus compliqué .. " Y a-t-il une bonne bibliothèque Python qui peut analyser C ++ " devrait être utile:

    C ++ est notoirement difficile à analyser. La plupart des gens qui essaient de le faire correctement finissent par prendre un compilateur. En fait, cela est (en partie) Pourquoi LLVM a commencé: Apple avait besoin d'une manière qu'ils pouvaient analyser C ++ pour une utilisation dans Xcode qui correspond à la manière dont le compilateur l'a analysé.

    C'est pourquoi il y a des projets tels que GCC_XML que vous pourriez combiner avec un XML Python XML Bibliothèque.

    Enfin, si votre code n'a pas besoin d'être robuste du tout, vous pouvez exécuter le code si un code-reformateur, comme indent (pour le code C) à des choses, puis utilisez des expressions régulières pour correspondre à la définition de la fonction. Oui, il s'agit d'une idée mauvaise, hacky, d'erreur d'erreur et vous trouverez probablement des définitions de la fonction dans les commentaires multilignes et telles que cela pourrait bien fonctionner suffisamment.


0 commentaires

1
votes

Cette page, analyse C ++ , mentionne quelques grammaires anti-anti-antlr pour C ++. Depuis ANTLR a une API Python Cela semble être une façon raisonnable de procéder. < / p>

Même si l'analyse peut sembler beaucoup plus complexe que les expressions régulières, c'est un cas où quelqu'un d'autre a fait presque tout le travail pour vous et que vous devez simplement vous interdire de python.

Une autre alternative, où quelqu'un d'autre a fait le travail de l'analyse C ++ pour vous, est pygccxml qui exploite GCCXML , une extension de sortie pour GCC pour produire XML de la représentation interne des compilers. Puisque Python a un excellent support XML, il vous suffit de vous extraire les informations d'intérêt pour vous.


0 commentaires