2010-12-12 33 views
1

Je travaille sur un projet et je veux faire de la réflexion en C++ donc après recherche j'ai trouvé que le meilleur moyen est d'analyser les fichiers d'en-tête pour obtenir l'arbre de syntaxe abstraite au format XML et l'utiliser en réflexion. J'ai essayé de nombreux outils mais aucun d'entre eux n'est compatible avec Visual C++ 2008 ou Visual C++ 2010 comme Coco, Cint, gccxml. veuillez rejouer bientôtComment analyser une collection de fichiers d'en-tête C++?

Répondre

2

Visual Studio analyse déjà tout le code de votre projet (fonction IntelliSense). Vous pouvez utiliser Visual C++ Code Model pour l'accès.

2

Notre C++ front end est capable d'analyser de nombreux dialectes de C++, y compris GNU et MS. Il construit des structures de données de compilateur pour les AST et les tables de symboles avec le type d'information nécessaire pour "faire la réflexion" pour C++. Il est plutôt trivial d'exporter l'arbre d'analyse en tant que document XML. Les informations de la table de symboles peuvent être exportées en XML en parcourant la structure des symboles. Les gens semblent toujours vouloir les données de la table AST et des tables de symboles au format XML, en supposant qu'ils peuvent le lire dans une structure DOM ou le manipuler avec XSLT. Il y a deux failles sérieuses à cette idée: 1) le volume des données XML est énorme, et générer/relire cela ajoute simplement beaucoup de temps 2) que ces structures disponibles rendra "facile" à faire ... quelque chose

Ce que nous pensons que les gens veulent vraiment faire est d'analyser le code, et/ou de transformer le code (généralement basé sur une analyse). Cela exige que l'outil, quel qu'il soit, permette l'accès à la structure du programme d'une manière qui soit «plus facile» à analyser et à transformer. Par exemple, si vous décidez de modifier l'AST, comment allez-vous régénérer le texte source?

Nous avons construit le DMS Software Reengineering Toolkit pour fournir exactement le type de support général pour analyser, analyser, transformer, prettyprint ("régénérer la source"). DMS a des frontaux pour une grande variété de langages (C++, C, Java, COBOL, Python, ...) et fournit l'ensemble des services standards utiles pour construire des analyseurs/transformations personnalisés sur le code. Au risque d'être audacieux, nous avons longuement réfléchi à la possibilité de mettre en œuvre des mécanismes utiles pour couvrir cet ensemble de tâches, de la même manière que MS a longtemps déterminé ce qu'il devrait y avoir dans Windows. Vous pouvez essayer de reproduire ce mécanisme mais attendez-vous à un coût énorme (nous travaillons sur DMS depuis 15 ans), ou vous pouvez fermer les yeux et prétendre que vous pouvez pirater assez pour faire ce que vous imaginez devoir faire (surtout ce que vous découvrirez, c'est que ce n'est pas suffisant en pratique).

En raison de ce besoin général de "services de manipulation de programme", notre frontal C++ est hébergé sur DMS. Les DMS avec l'interface frontale C++ ont été utilisés pour créer divers outils standard d'ingénierie logicielle (couverture de test, profileurs) ainsi que pour apporter des modifications massives au code (un document sur le site Web explique comment le DMS a été utilisé). logiciel de mission d'avion massivement rearchitect).

EDIT 7/8/2014: Notre front end gère désormais le C++ 11 complet et des parties de C++ 14, y compris le contrôle et le flux de données pour les fonctions/procédures/méthodes.