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 :

[C/C++] Parser un code source


Sujet :

C++

  1. #21
    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 : 51
    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
    Visual C++ gère aussi les regex depuis plusieurs années. Globalement, ce compilateur à tendance à être assez lent pour le support du langage, mais rapide pour le support des bibliothèques.
    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.

  2. #22
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    Oui, enfin à l'heure actuelle les regex, ce n'est plus une affaire de bibliothèque mais une partie intégrante du langage. Même si certains compilateurs tardent encore un peu à intégrer cet aspect de la nouvelle norme C++11, c'est en cours, et cela ne devrait plus guère tarder, sachant que pour l'instant Clang dame le pion aux autres compilateurs pour cet aspect des choses.

  3. #23
    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 : 51
    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
    Citation Envoyé par ptyxs Voir le message
    Oui, enfin à l'heure actuelle les regex, ce n'est plus une affaire de bibliothèque mais une partie intégrante du langage. Même si certains compilateurs tardent encore un peu à intégrer cet aspect de la nouvelle norme C++11, c'est en cours, et cela ne devrait plus guère tarder, sachant que pour l'instant Clang dame le pion aux autres compilateurs pour cet aspect des choses.
    Je parlais de la gestion des regex en tant qu'éléments de la bibliothèque standard. Je ne sais pas trop ce que tu appelles partie intégrante du langage, mais les regex restent et resteront une affaire de la biblitohèque standard. Elle ne demandent aucune modification au "core language" lui-même.

    Les regex ont été introduites dans TR1 (publié en 2007 officiellement, bien que n'étant pas un standard en tant que tel). Visual C++ les as supportées à partir de visual C++2008 SP1. Elles ont ensuite été confirmées en C++11 (et basculées de std::tr1:: vers std:: ), et visual C++ les a immédiatement supportées.

    Et donc Clang ne dame le pion à personne pour cet aspect (je ne dis pas qu'il n'est pas bon, loin de là, c'est juste que je n'aime pas entendre encensé un compilateur sur les aspects où il n'a rien de remarquable, et que ce soient Clang ou gcc, aucun des deux n'est particulièrement remarquable sur les aspects support de la bibliothèque standard, ce qui est d'autant plus surprenant que ce sont généralement des aspects simples à intégrer... ).
    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.

  4. #24
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Vous êtes sûrs que c’est une bonne idée de partir sur les regex ?
    Je pense pareil: les regex sont notablement connu pour etre une tres mauvaise idee pour parser tout ce qui est language ou turing complete...

  5. #25
    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 : 51
    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
    Citation Envoyé par Klaim Voir le message
    Je pense pareil: les regex sont notablement connu pour etre une tres mauvaise idee pour parser tout ce qui est language ou turing complete...
    Si le but était effectivement d'analyser du code C ou C++ quelconque, les regex ne suffiraient effectivement pas (et faire un parseur pour du C++ reste une tâche non triviale).

    Mais là, il semblerait que le but soit de reconnaitre des motifs dans du code spécifique écrit d'une manière bien précise. Dans ce cadre, les regex me semblent appropriées.
    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.

  6. #26
    Membre Expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Par défaut
    Un conseil, pour les regex, à moins d'être maso, il est plus que très recommandé d'utiliser les raw string (http://cpp.developpez.com/redaction/...s/cpp11/#LIV-C).

  7. #27
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Hello guys

    Si vous voulez analyser du code source C++, le mieux est quand même d'utiliser l'api C++ de LLVM/Clang. Vous aurez un véritable AST C++ analysable sur tous les aspects voulus.

    C'est un peu overkill au vu du sujet de base car il y a un coût d'apprentissage, mais la solution une fois mise en place est à mon avis très simple.

  8. #28
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Si le but était effectivement d'analyser du code C ou C++ quelconque, les regex ne suffiraient effectivement pas (et faire un parseur pour du C++ reste une tâche non triviale).

    Mais là, il semblerait que le but soit de reconnaitre des motifs dans du code spécifique écrit d'une manière bien précise. Dans ce cadre, les regex me semblent appropriées.
    Par experience, je suis mefiant du cas ou on veut chercher des motifs dans du code. Generalement il est impossible definir ces motifs correctement simplement parceque si il sagit de semantique du langage, il ne sagit plus de motifs. Ici on parle de noms de variables, ce qui m'apparait just suffisamment complexe pour que les regex soient un piege (qui ne se voit qu'apres avoir passe trop de temps ici).

    (une legere note humoristique plus ou moins a ce sujet, voir la reponse la: http://stackoverflow.com/questions/1...contained-tags )

  9. #29
    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 : 51
    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
    Disons que c'était juste la phrase "toujours à gauche de la fonction "load_bitmap"." qui me laisse penser qu'on est peut-être dans un cas assez cadré pour que ça passe. Et la différence de temps entre les deux implémentation mérite peut-être de le tenter.

    Ce qui est clair, c'est que je ne ferais ça que pour du code "local", pas forcément du code livré à un client ayant pour but d'être utilisé de longues années...
    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.

  10. #30
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 11
    Par défaut
    J'aurais plutôt conseiller Flex(++) et Bison(++) qui sont les outils les plus puissants que je connaisse dans le domaine de l'analyse lexicale (automate à état fini, regex) et syntaxique (analyse LR ou plutôt LALR) - sinon, il y a l'OCaml avec ocamllex et menhir, encore plus puissant mais bon le choix a déjà été fait.

    Après, tout ceci semble un peu bourrin pour la petite problématique que tu veux faire. À savoir si tu veux faire ça proprement (cf. les outils plus hauts) ou de façon tricky. Sinon, la documentation est très bien faite sur ces deux outils qui sont largement répandus. et ça m'étonnerait pas de voir déjà sur internet les fichiers correspondant à un lexer/parser C et C++ (j'ai bien trouvé PHP).

  11. #31
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    Hello guys

    Si vous voulez analyser du code source C++, le mieux est quand même d'utiliser l'api C++ de LLVM/Clang. Vous aurez un véritable AST C++ analysable sur tous les aspects voulus.

    C'est un peu overkill au vu du sujet de base car il y a un coût d'apprentissage, mais la solution une fois mise en place est à mon avis très simple.
    Je pense aussi que c'est 100x plus simple. Même s'il y a un coût ça sera toujours moindre que d'essayer de faire des regex ou d'apprendre la syntaxe moisie de Bison/Flex.

    Et les fonctions de parsing/ast/compilation de clang sont disponibles avec des bindings python en plus de l'API C et C++.

Discussions similaires

  1. [C#] Parser code source C avec regex
    Par Aspic dans le forum C#
    Réponses: 10
    Dernier message: 25/12/2013, 11h50
  2. parser code source jave pour obtenir un AST
    Par cdm1024 dans le forum Général Java
    Réponses: 1
    Dernier message: 10/08/2009, 09h19
  3. Contribuez à la FAQ et aux CODES SOURCE XML
    Par Community Management dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 21/04/2008, 20h52
  4. Je cherche le code-source d'un interface de Windows
    Par Robert A. dans le forum Windows
    Réponses: 5
    Dernier message: 02/06/2003, 09h45
  5. [VB6] Code source pour modifier MsgBox
    Par khany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 25/02/2003, 15h13

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