Partage
  • Partager sur Facebook
  • Partager sur Twitter

analyser un code C++

Sujet résolu
29 janvier 2011 à 10:30:14

bonjour,

J'aimerais écrire un programme en C++ qui me permette d'analyser un code complexe :
j'aurai besoin de détecter toutes les classes, leurs membres, leur classes parents et filles, afin de dessiner un diagramme de classe par la suite.
pour ce qui est du dessin du diagramme de classe, c'est pas un probleme.
mais je ne sais pas trop quelle approche aborder pour analyser le code : c'est tres compliqué, il y a des 100aines de fichiers sources différents et surtout, de nombreux types et classes sont definis via des macros du style :
#define Créertype(typeinitial) typedef TemplateQuelconque<typeinitial> typeinitial##Special;

ma question est donc la suivante :
comment faut t il s'y pendre pour créer un analyseur lexical et syntaxique simple ?
j'ai bien trouvé quelques pistes en passant par lex et Yacc/Bison, mais j'aimerais pouvoir faire ca en C++
Savez vous ou je pourrai trouver un tuto ou une breve initiation a ces techniques ?

ce travail a un double but :
- J'aimerais m'initier au techniques de compilation
- J'aimerais pouvoir dresser rapidement un diagramme de classe, complet, et dans une forme que j'aurai choisie moi meme.

Merci beaucoup
  • Partager sur Facebook
  • Partager sur Twitter
29 janvier 2011 à 13:04:23

Ben commence par créer un préprocesseur...
  • Partager sur Facebook
  • Partager sur Twitter
29 janvier 2011 à 13:48:18

Lorsqu'il s'agit de parser du C++, les gouts et les couleurs changent beaucoup. IMHO a l'heure actuelle, les solutions les plus viables sont gcc-xml et clang.
Une recherche google t'en dira plus.
  • Partager sur Facebook
  • Partager sur Twitter
29 janvier 2011 à 14:14:28

boost::spirit en C++ pour ce qui est de faire un parser.

Sinon je ne connais pas assez pour discuter des meilleurs options, mais il y a aussi un outil présenté par Emmanuel Deloget sur son blog qui peut servir à ca (Cacao de mémoire, je te laisse chercher sur son blog). Et il doit en exister d'autre du même genre.
  • Partager sur Facebook
  • Partager sur Twitter
FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
Anonyme
29 janvier 2011 à 16:07:09

Pourquoi vouloir tout refaire à la main depuis zéro alors que doxygen le fait très bien ?
  • Partager sur Facebook
  • Partager sur Twitter
29 janvier 2011 à 17:35:26

merci, mais je ne cherche pas a utiliser un truc tout fait
j'ai justement précisé que je cherchais a m'initier aux techniques de compilation.
j'ai quelques notions, j'ai entendu parler de analyse lexicale (token), puis d'analyse syntaxique, et j'ai déjà créé une sorte de mini compilateur il y a quelques années a l'école en utilisant lex pour l'analyse lexicale et Bison pour l'analyse syntaxique (le but était, a l'époque, de simplifier le langage C).

ce que je voudrais faire, c'est implémenter un analyseur lexical et syntaxique, mais en C++. le problème, c'est que je ne sais pas vraiment comment démarrer (lex et Bison font tout, tout seuls)

a la question "pourquoi faire ?", c'est un petit peu comme si je voulais apprendre a cuisiner et qu'on me disait "t'as un micro ondes, pourquoi t'achètes pas des plats instantanés ?" :lol:

aussi, j'utilise très peu de lib : j'aime comprendre ce que je fais
alors oui, au boulot, j'utilise la STL et les outils imposés, mais quand je programme pour moi, je part de zero, je ne dépend de rien, j'ai pas de mauvaises surprises et je peux connaitre de façon fiable la complexité algorithmique de mes fonctions/méthodes

je m'interesse surtout a la théorie

Je vais jetter un coup d'oeil a ce que boost peux faire, mais je risque, au final, de tout reimplémenter moi meme de toutes facons

merci a vous
  • Partager sur Facebook
  • Partager sur Twitter
29 janvier 2011 à 17:39:35

Et bha regardes le code de boost tu sauras comment faire, ou achète un bouquin sur le sujet (dragoon book comme référence).
  • Partager sur Facebook
  • Partager sur Twitter
FaQ : Fr | En 1 2 | C++11 | Template || Blog : Deloget | C++|Boost--Dev | C++Next | GotW || Installer Boost
Anonyme
29 janvier 2011 à 18:01:18

Parser du C++ pour débuter est une idée des plus mauvaise qu'il soit. La grammaire du C++ est relativement compliquée, vouloir écrire un parseur de C++ comme premier travail revient à vouloir écrire un OS après 2 semaines de cours de C.

Remarques en vrac:

Citation

a la question "pourquoi faire ?", c'est un petit peu comme si je voulais apprendre a cuisiner et qu'on me disait "t'as un micro ondes, pourquoi t'achètes pas des plats instantanés ?"


Dans ce cas pourquoi tu vas pas chasser et ramasser ton bois pour faire ton feu ?

Citation


Alors oui, au boulot, j'utilise la STL et les outils imposés, mais quand je programme pour moi, je part de zero, je ne dépend de rien, j'ai pas de mauvaises surprises et je peux connaitre de façon fiable la complexité algorithmique de mes fonctions/méthodes


Vouloir comprendre les outils qu'on utilise quand on a le niveau pour, c'est bien. Mais il faut aussi accepter d'utiliser ces outils. Je ne suis pas contre de recoder pour apprendre, je suis contre de recoder pour ensuite utiliser.

Citation

je m'interesse surtout a la théorie


Théorie des langages, théorie des compilateur, Dragon book, tu as de lecture en prévision ....

Tu as beaucoup de travail avant de sortir un analyseur C++ complet. Quand je vois le temps que ca a prit a Scalpel pour arriver là où il en est, tu as du chemin à faire
  • Partager sur Facebook
  • Partager sur Twitter
6 février 2011 à 20:31:38

bon, pour information, j'ai trouvé ce que je cherchais sur developpez.com.
  • Partager sur Facebook
  • Partager sur Twitter
16 mars 2024 à 16:19:16 - Message modéré pour le motif suivant : Merci d’utiliser le bouton code pour insérer un code sur le forum


16 mars 2024 à 16:41:55

@WadiaSouiki Bonjour, merci de ne pas squatter le sujet résolu des autres, créer votre propre sujet dans le respect des règles du forum à savoir qu'un message commence par des règles de politesses (Un bonjour ou des salutations à la communauté et se termine par des remerciements par avances pour les futures réponses), la description de votre problème et le code que vous avez écrit inséré sur le forum à l'aide de l'outil d'intégration de code soit le bouton code </>.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Liens conseillés

Je ferme ici.

  • Partager sur Facebook
  • Partager sur Twitter