2010-07-14 16 views
2

J'essaie d'en apprendre plus sur les analyseurs syntaxiques, pour les sources Python, C et C++ (par moi-même, pas pour un projet scolaire). Voici un résumé de ce que je veux faire: 1) lire les fichiers source .c/.cpp/.py en Python 2) obtenir une liste de toutes les fonctions dans les fichiers source, et la durée de leurs définitions en termes des numéros de ligne.Analyse des fichiers source .c/.cpp/.py en Python pour obtenir la liste des fonctions contenues

Donc, pour illustrer ma question, considérez le code suivant dans un fichier « helloWorld.cpp » (lire en python):

//start 
#include <iostream> 
#include <string> 
using namespace std; 

int main(int argc, char** argv) 
{ 
    string str = "Hello World"; 
    cout << str << endl; 

    return 0; 
} 
//end 

Ce que je veux quelque chose le long: liste des fonctions: int main (int argc, char ** argv) début: ligne 7 fin: ligne 12

des idées sur la façon d'y parvenir (quelques exemples de code serait grandement apprécié)?

+1

Voir [ Y at-il une bonne bibliothèque Python qui peut analyser C++? ] (http://stackoverflow.com/questions/1444961/is-there-a-good-python-library-that-can-parse-c) et [ Python - Analyser un fichier .py, lire l'AST, modifiez-le, puis réécrivez le code source modifié ] (http://stackoverflow.com/questions/768634/python-parse-a-py-file-read-the-ast-modify-it-then-write-back -le-modifié). –

Répondre

0

Pygments pourrait être un bon point de départ. C'est un surligneur de code générique écrit en python avec toutes les langues et beaucoup plus que vous essayiez d'analyser. Vous pouvez le trouver ici: http://dev.pocoo.org/projects/pygments/wiki

2

Si vous êtes vraiment intéressés à apprendre l'analyse syntaxique C, vous voudrez peut-être regarder dans pycparsing. Il est construit sur PLY, de sorte que vous pouvez probablement tirer parti de ce que vous en apprenez pour analyser beaucoup de choses.

Analyser C++, cependant, est façon plus compliqué que d'analyser C ou Python, vous pouvez donc vouloir explorer Python et C avant de commencer à creuser en C++.

0

Il est possible d'implémenter des liaisons python vers Clang, ou, en variante, vous pouvez juste analyser et analyser les dumps XML AST à partir de Clang avec Python.

0

Pour C et en particulier C++ - si vous avez un projet réel, je vous recommande de rester aussi proche que possible d'une implémentation d'analyseur canonique. L'analyse C++ n'est pas faite pour les gens légers (et généralement pas bien fait - même par les compilateurs commerciaux). J'ai utilisé gcc-xml dans le passé juste pour cette raison. Il utilise gcc pour analyser le code, puis traduit la représentation interne de gcc en une représentation XML référentielle du code qui est un peu plus facile à graver. Il peut ne pas vous apprendre à analyser, mais il vous donnera un aperçu de la grammaire de la langue dans un modèle de données XML familier. Pour le code Python, vous pouvez utiliser les modules parser et/ou ast. Je ne les ai jamais personnellement utilisés moi-même.

Questions connexes