Le code DOM VC ++ est-il accessible depuis les addons VS?

100

Visual Studio IntelliSense pour VC ++ inclut l' analyseur EDG C ++ «complet» (également utilisé par Intel et d'autres). Puisque le DOM de code C # est accessible aux addons (corrigez-moi si je me trompe), le DOM de code C ++ est-il également accessible? Cela peut-il être utilisé pour analyser un projet VC ++ ouvert dans l'environnement VS?

Le flash
la source
25
Je viens de ton autre fil ; C'est une bonne question.
Qix - MONICA A ÉTÉ BRUYÉ
81
Encore une fois, "vous ne savez pas ce que vous demandez?" - vraiment les gens? «Je ne sais rien de la prémisse de cette question» ne signifie pas «Je ne sais pas ce que vous demandez».
Tim Post
9
@Dave - J'ai ajouté une réponse pour prouver que les non-employés MS peuvent également résoudre ce problème. Il y a des gens qui ont fait des choses proches de ce que je voulais.
TheFlash
55
@DaveHillier Si c'est sur le sujet, c'est parfaitement le bienvenu ici. Il n'y a pas de discussion au-delà de cela. Si nous commençons à entrer dans "Quelqu'un ici peut-il même répondre à cela?" alors nous abordons rapidement ce genre d'angoisse collante où tout ce qui est difficile est potentiellement sans réponse. À moins que nous n'ouvrions réellement la question pour obtenir des réponses , nous n'avons franchement aucune idée concrète de qui pourrait y répondre. C'est tout l'intérêt de demander en premier lieu.
Tim Post
49
@bmargulies Quel mal cette question fait-elle simplement parce qu'elle existe? C'est sur le sujet, c'est intéressant, et quelqu'un pourrait y répondre. Heck, quelqu'un de MS pourrait voir cela et y répondre, et puis c'est un excellent ajout au site. Veuillez arrêter de chercher quelque chose de potentiellement négatif à propos d'une question avant d'essayer de voir quelque chose de positif.
Tim Post

Réponses:

22

L' extension de refactoring Visual C ++ est capable de renommer un membre à l'échelle du projet. Il est construit par MS, mais ils ont évidemment utilisé le code DOM interne pour y parvenir. C'est donc possible, je ne sais pas encore comment.

L' extension CppLister est capable de lire les bases de données intellisense créées par VS pour lister les différents membres d'une classe.

Vous pouvez toujours utiliser l'analyseur open source Clang C ++ (en fait un compilateur) et lire l'AST dans un modèle d'objet C #. Consultez CppSharp et ClangSharp pour les liaisons C # à Clang.

Le flash
la source
8

Je ne suis pas sûr de ce qu'est le "DOM Code C ++", s'il existe même. Ce qui compte, c'est que MSVS utilise l'interface EDG pour analyser et déterminer la signification des symboles, afin de prendre en charge les actions MSVS IDE. EDG IIRC construit ses propres structures de données internes représentant le programme; Je n'ai aucune raison de croire que ces structures de données sont le "DOM de code C ++", ou qu'elles sont visibles pour vous ou que vous pourriez les découvrir sur MSDN.

Votre véritable problème est que vous souhaitez analyser le code source C ++. Je suis d'accord, avoir les informations de début EDG serait une aide importante pour ce faire; vous ne voulez vraiment vraiment pas essayer d'écrire votre propre analyseur C ++ (et vous avez besoin de beaucoup de choses après l'analyse, google mon essai sur "la vie après l'analyse").

Vous avez donc en quelque sorte les choix suivants:

  • Trouvez une porte dans les machines EDG dans MSVS. Puisque vous n'avez pas eu beaucoup de chance et qu'il semble n'y avoir rien de documenté de MS indiquant que cela est disponible, vous n'aurez probablement pas beaucoup de chance de cette façon. Si j'étais à la place de MS, je ne le rendrais pas public; ce serait juste un autre casse-tête de support, et sur un logiciel qui n'est même pas le leur.
  • Utilisez le frontal commercial EDG, directement à partir d' EDG . Je crois comprendre qu'ils offrent des licences d'utilisation individuelle sans frais. (Ma compréhension peut être erronée). De cette façon, vous évitez toutes les restrictions que MS peut avoir sur l'accès ... au prix d'avoir à configurer vous-même le front-end EDG. Un inconvénient: EDG veut être le frontal d'un compilateur, pas le frontal d'un analyseur. Cette distinction peut sembler subtile mais elle vous mordra probablement. Par exemple, je soupçonne EDG de jeter les commentaires; Les frontaux du compilateur n'en ont pas besoin. Si vous souhaitez inspecter les commentaires dans votre analyseur, cela peut être un réel problème.
  • Utilisez Clang . Il s'agit d'un analyseur C ++ open source, conçu pour une grande variété de fins d'analyse de programme ainsi que pour le front-end d'un compilateur C ++. Je n'ai aucune expérience avec cela, mais cela semble assez bien pensé et semble offrir de nombreuses installations. Je ne sais pas s'il a un support spécifique pour le dialecte MS de C ++.
  • Utilisez un autre frontal commercial, notre (DMS) C ++ Front End. Étant l'architecte de ceci, je suis à peu près sûr qu'il est bien pensé (y compris le support de MS Visual C ++); il existe une expérience spécifique de son utilisation pour effectuer des tâches complexes d'analyse et de transformation C ++. Contrairement à EDG, il est conçu pour prendre en charge l'analyse, la transformation et la génération (par exemple, il capture les commentaires et même la base des littéraux afin qu'ils puissent être régénérés correctement). La fondation, DMS, dispose de nombreuses machines intégrées pour prendre en charge l'analyse personnalisée: construction AST et de table de symboles, grammaires d'attributs, cadres de flux de données, contrôle intraprocédural et analyse de flux de données au niveau AST, gestion BDD, correspondances de modèles de source, source-à -source transformations. Clang et EDG proposent la construction d'AST et de tables de symboles; Clang (mais je ne pense pas qu'EDG) a une analyse de flux (au niveau LLVM), mais pas l'analyse de flux au niveau AST (AFAIK). Ni Clang ni EDG n'offrent la capacité de modèle / transformation source, donc ce qui est le mieux dépend de vos tâches à long terme. Comparé aux autres options, notre frontal C ++ n'est ni open source ni gratuit; on peut obtenir des licences de recherche.
Ira Baxter
la source
2
"DOM" est un langage HTML pour un AST, en gros. Cela suppose cependant qu'il existe une syntaxe canonique, alors que les compilateurs C ++ utilisent généralement des syntaxes légèrement différentes. (Par exemple, pour créer de meilleurs messages d'erreur.).
MSalters
3
DOM en C # signifie "AST avec une mauvaise résolution" utilisé pour la génération de code. Vous ne pouvez pas analyser de manière réaliste les programmes C ++ avec le type de résolution proposé par C # dom.
Ira Baxter
Voir inévitablesoftware.com /Products.aspx pour ce qu'un bon codedom C # offre
TheFlash
@Geotarget: et qu'est-ce qu'un C # Dom a à voir avec la question?
Ira Baxter
@IraBaxter - Ce que je cherche quand je dis "Code DOM" - beaucoup de gens ont commenté qu'ils ne comprennent pas ce qu'est un code DOM et / ou qu'ils le confondent avec le DOM HTML JS. Bien sûr, je ne suis pas un expert C ++ (comme je l'ai déjà dit), donc je ne sais pas ce qui pourrait être nécessaire dans un code DOM C ++, même si je comprends que Inevitablesoftware fournit un code DOM très simple et facile à utiliser, et je suis à la recherche d'un DOM de code C ++ avec une API similaire.
TheFlash