J'ai besoin d'une bonne, stable et, peut-être, une bibliothèque d'analyseurs C ++ avec une interface C / C ++ (C est préférable).
J'entends que Cint est bon interprète C ++. Puis-je l'utiliser (ou une partie de celui-ci) à cette fin?
Toute suggestion? P>
8 Réponses :
Je ne sais pas pour cint, mais j'ai entendu des gens d'utiliser GCC-XML pour cela. P >
Je cherche également une bonne bibliothèque autonome, mais je n'ai trouvé aucun. p>
Voir: http://clang.llvm.org/ Il a à la fois une interface C ++ et une interface C (libllang). P>
Malheureusement, il n'y a pas encore d'accès au CLARE C (et aucun envisage de la mettre en œuvre).
Je pense qu'il devrait être possible de marcher à travers l'Ast à travers libllang. Voir par exemple << a href = "http://llvm.org/devmtg/2010-11/gregor-libclang.pdf" rel = "nofollow noreferrer"> llvm.org/devmtg/2010-11/gregor-libclang.pdf a >>.
Merci pour des réponses, je vais tester Clang maintenant. Semble, ça peut être la solution ...
CAVEZER: Examinez de près le support C ++ 0X, un certain nombre de cas ne sont pas encore traités (bien que si vous n'avez besoin que de l'AST, les choses sont claires). Et bien sûr, le fait que la communauté soit réactive est un bon bonus.
libllang est une API C ++; Les wrappers CLARE C sont rudimentaires.
L'analyse C ++ est célèbre. AFAIK Il n'y a que trois analyseurs acceptables par les normes actuelles: EDG (largement utilisé comme frontend dans les compilateurs populaires C ++), GCC et Microsoft. Et apparemment, Microsoft a commencé à utiliser l'analyseur d'Edg à VS2010, pour IntelliSense. P>
Lorsque vous regardez les options libres, vous êtes à peu près bloqué chez GCC. Il peut produire XML, cependant, donc la partie facile est là. (Facile par des normes d'analyse C ++, c'est-à-dire) p>
Clang fait un peu de travail. Si les détails manquants sont trop pour considérer que acceptables i> ou non est laissé comme un exercice pour le lecteur :)
"Analyse boost" est ma norme personnelle. Et je comprends que Clang n'est pas encore là.
@Msalters, le projet Clang prétend être capable de compiler Boost maintenant, mais ne peut que compiler partiellement Qt, donc ils y arrivent, mais je ne pense pas que j'aimerais essayer de compiler le code de production avec elle. clang.llvm.org/cxx_status.html
@Msalters: Il y a beaucoup de différence entre pouvoir produire une AST et pouvoir le compiler. Clang analyse une amende aussi loin que je sache.
@Msalters, Clang n'est pas seulement capable d'analyser Boost, il passe même la plupart de ses tests: blog.llvm.org/2010/05/clang-builds-boost.html
Clang a un analyseur moderne qui bat GCC sur la plupart des disciplines C ++ 03 que j'ai essayées.
Clang est l'option la plus à jour et la plus mature, avec une API décente C ++ (mais pas la plaine C). Elsa est un peu obsolète et stimulé, mais toujours un choix utilisable. Les deux pourraient être utilisés comme des bibliothèques ainsi que la touche XML autonome. P>
"Clang implémente actuellement l'ensemble de la norme ISO C ++ 1998 (y compris les défauts adressés dans la norme ISO C ++ 2003), à l'exception de" exportation "(qui a été supprimé du projet C ++ '0x) et est considéré comme un compilateur C ++ de qualité de production" Date: 2011-07-27 clang.llvm.org/cxx_status.html - Grzegorz Wierzowiecki
Si vous vous sentez courageux les liens dans la réponse à " y a-t-il une grammaire C ++ Yacc+? " pourrait être utile. GCC-XML et Clang ont déjà été suggérées et Swig dispose également d'une sortie XML qui dépend de sur ce que vous essayez d'atteindre pourrait être pertinent. P>
"Se sentir courageux" serait le mauvais terme. Vous devez sentir Olympian de prendre une tâche comme un analyseur complet C ++.
Si vous voulez analyser le code C ou C ++, certaines options: http://bellard.org/tcc/ http://students.ceid.upatras.gr/~sxanth/ncc/ p>
Si vous souhaitez créer un analyseur à l'aide de C / C ++, vous pouvez essayer: http://boost-spirit.com/home/ http://dinosaure.compilerTools.net/ lex et yacc http://www.codeguru.com/cshaarp/.net /net_general/patterns/article.php/c12805 Flex et Bison P>
Je n'ai pas essayé, mais je pense que le meilleur choix obtiendra des modules pour analyser un compilateur open source populaire comme GCC pour C ++; P>
Peut-être que vous trouverez quelque chose d'intéressant ici http://www.nobugs.org/developer/parsingcpp / p>
Notre C ++ Front End est capable d'analyser une variété de dialectes C ++ ( ANSI, GCC, MSVS), crée automatiquement des asts dont les nœuds sont marqués avec des positions de source précises et sont décorées avec n'importe quel texte de commentaire à proximité et construit une table de symboles complète. (Modifier Jan 2013: l'extrémité frontale C ++ a été capable de gérer C ++ 11 pendant un certain temps maintenant). P>
L'extrémité frontale C ++ est construite sur notre Toolkit de réengagement logiciel DMS , Technologie de compilateur généralisée pour l'analyse et la transformation du programme, conçues pour soutenir le bâtiment de l'outil personnalisé. L'extrémité avant C ++ comprend un préprocesseur dans lequel les directives de préprocesseur peuvent être étendues ou non collectivement ou individuellement, le cas échéant pour la tâche. Il inclut également la construction de symboles complètes avec tous les vêtements Nasty Koenig Recherche. P>
DMS accepte les définitions de langage explicites (c'est comme ça qu'il comprend C ++; il y a aussi des extrémités fronales pour C, C #, Java, Cobol et Varieuses autres langues). DMS fournit une analyse générale, un bâtiment de la table de symboles, des machines d'analyse de flux, des API de procédure pour la navigation d'arborescence / l'inspection / la modification, la transformation source-à-source et la régénération du texte AST-à-source, y compris les commentaires originaux, les randices numériques, etc. Ces capacités sont disponibles pour une utilisation par l'extrémité avant C ++. P>
DMS est également conçu pour gérer l'échelle requise pour des tâches sérieuses. Souvent, vous n'avez pas besoin de une unité de compilation em> (qui est ce que GCC vous donnera au mieux) mais l'accès à un ensemble complet. DMS a été utilisé pour analyser / transformer des milliers d'unités de compilation C ++ et littéralement des dizaines de milliers d'unités de compilation C (sur une application de 25 millions de lignes). P>
"Bibliothèque facile à utiliser" est un oxymoron en matière d'outils de manipulation de programme. Les Langauges eux-mêmes sont complexes (C ++ étant l'un des plus difficiles et aggravent avec C ++ 0x) et qui induit la complexité de la nature des questions que vous pouvez poser et quelles sont les réponses (par exemple, existe-t-il des instantanées de modèle qui Peut modifier la variable locale X dans la méthode y dans la classe C dans n'importe quel espace de noms n? "). Les questions elles-mêmes sont difficiles. P>
Ce que vous voulez est une bibliothèque avec la complexité nécessaire em> pour vous permettre de réaliser votre tâche. DMS est en développement continu depuis 15 ans pour fournir cette complexité nécessaire. Si vous souhaitez effectuer un traitement de programme sérieux, je prétends que vous aurez besoin d'informations. P>
Comme preuve, DMS a été utilisé pour effectuer une réingénierie automatisée massive du logiciel d'avionics missionnaire basé sur C ++ pour Boeing. Je ne crois pas qu'il y ait d'autres outils qui peuvent faire cela. (Clang semble essayer, mais uniquement pour C ++. YMMV). P>
Ceci est un produit d'entreprise; La tarification dépend de la configuration et du déploiement planifié. Contactez l'équipe de vente.
La vraie question est: «Quel est votre but?». Pour des tâches très simples, CINT pourrait être utile. Pour toute analyse sophistiquée, vous aurez besoin de l'équivalent d'une extrémité frontale complète de compilateur C ++ (résolution de nom pour C ++ est une chienne). Pour toute tentative de transformer i> le code, vous aurez besoin d'outils pouvant aller aller à la source, et il y en a d'autres.
@Ira:
cint code> est i> un compliqué complet C ++ ... il peut fonctionner dans un mode de génération de code natif ainsi que d'interprétation. Que ce soit bien structuré pour les besoins d'Artem ou non, je ne pouvais pas vous dire.
@DMCKEE: Il semble donc que CINT a probablement une résolution de nom / type complet, et cela peut suffire pour Artem, et ce n'est peut-être pas. Il doit encore être clair sur son but avant que quiconque puisse être clair sur la solution réelle pour lui.