IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Lister les fonctions d'un fichier source


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut Lister les fonctions d'un fichier source
    Bonjour à tous.
    Je souhaite savoir une chose :
    Existe une méthode pour lister toutes les fonctions d'un fichier .cpp ?
    Car pour le moment , pour faire ceci , je pense me tourner vers la lecture du fichier ligne par ligne dans un array de string et ensuite passer chaque case de l'array aux regex suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {template <.*>}? {const}? [a-zA-Z0-9_]+ &? [a-zA-Z0-9_]+(.*) //fonction libre/template libre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {const}? [a-zA-Z0-9_]+ &? [a-zA-Z0-9_]+::[a-zA-Z0-9_]+(.*) {const}? //fonction de classe normale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    template<.*> {const}? [a-zA-Z0-9_]+ &? [a-zA-Z0-9_]+<.*>::[a-zA-Z0-9_]+(.*) {const}? //fonction classe template
    Pensez vous que j'utilise la bonne méthode ?
    Si oui , est ce que mes regex son correctes ?

    Edit: je sait qu'il manque les destrcuteurs/constructeur mais se sont les plus facile a faire.
    Edit ² :Je vais developper avec wxWidgets.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  2. #2
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    Si tu fais du c++ je te conseil d'utiliser un vector<std::string>. es-tu sur que une declaration de methode est contenue sur une et une seule ligne?

    Apres tu code sous quelle plateforme, tu fais ceci en console, GUI, ....?

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Pour info:
    Je vais coder avec wxWidgets.
    Pour lire le fichier , j'utilise wxtextfile.html

    Ensuite pour regexiser , j'utiliserai wxregex

    Es-tu sur que une declaration de methode est contenue sur une et une seule ligne
    Non mais je ne vois pas comment faire si l'expression est définie sur plusieurs ligne am moins que j'écrive mon propre parseur .

    La plateforme serat linux,win et sans doute mac.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    Je ne sais pas tres bien comment ca marche mais regarde peut etre du cote de doxygen, le systeme te parse les fichiers ....

    DOXYGEN

    Pas plus d'idées

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Est ce que lex/yacc (flex/bison) pourrai m'être utile ?
    Car a vrai dire je ne sais pas comment il marche .

    Edit : doxygen ca ne scanne pas que les fichier .h ?
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Déjà, rien n'oblige une déclaration de fonction à être monoligne. Certains auteurs écrivent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    template<class T>
    int
    f(
      T t
    )
    {
    }
    Ensuite, selon le contexte,

    Peut être une déclaration de fonction f prenant un argument de type B et retournant un A, ou bien une déclaration de variable f de type A, avec B comme valeur passée au constructeur.

    Donc c'est probablement voué à l'échec de partir sur de simples regex. Il existe des outils (ctags ou etags, je crois) qui font ce genre de chose, et produisent un format de sortie facile à parser.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. lister les fonctions d'un fichier
    Par NicoO_O dans le forum Langage
    Réponses: 7
    Dernier message: 03/07/2007, 10h51
  2. Lister les fonctions d'une DLL
    Par alexadvance dans le forum Visual C++
    Réponses: 3
    Dernier message: 19/03/2007, 12h19
  3. Réponses: 2
    Dernier message: 05/12/2006, 18h12
  4. Réponses: 2
    Dernier message: 10/05/2005, 10h58
  5. |VB6] Comment Lister les liens vers des fichiers d'une page web
    Par Mayti4 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/01/2005, 18h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo