Ist das VC ++ - Code-DOM über VS-Addons zugänglich?


100

Visual Studio IntelliSense für VC ++ enthält den "vollständigen" EDG C ++ - Parser (auch von Intel und anderen verwendet). Da das C # -Code-DOM für Addons zugänglich ist (korrigieren Sie mich, wenn ich falsch liege), ist das C ++ - Code-DOM auch zugänglich? Kann dies verwendet werden, um ein offenes VC ++ - Projekt in der VS-Umgebung zu analysieren?


25
Kam gerade von deinem anderen Thread ; Das ist eine gute Frage.
Qix - MONICA wurde am

81
Wieder "unklar, was Sie fragen?" - Wirklich Leute? "Ich weiß nichts über die Prämisse dieser Frage" bedeutet nicht "Unklar, was Sie fragen".
Tim Post

9
@ Dave - Ich habe eine Antwort hinzugefügt, um zu beweisen, dass auch Nicht-MS-Mitarbeiter dieses Problem lösen können. Es gibt Leute, die Dinge getan haben, die meinen Wünschen entsprechen.
TheFlash

55
@ DaveHillier Wenn es um das Thema geht, ist es hier sehr willkommen. Darüber hinaus gibt es keine Diskussion. Wenn wir anfangen zu "Kann hier jemand das überhaupt beantworten?" dann nähern wir uns schnell dieser Art von klebriger Angst, bei der alles, was hart ist, möglicherweise nicht beantwortet werden kann. Sofern wir die Frage nicht tatsächlich für Antworten öffnen , haben wir offen gesagt keine konkrete Vorstellung davon, wer sie beantworten könnte. Das ist der springende Punkt, um überhaupt zu fragen.
Tim Post

49
@bmargulies Was schadet diese Frage, wenn sie einfach existiert? Es ist thematisch, es ist interessant und jemand könnte es möglicherweise beantworten. Heck, jemand von MS könnte dies sehen und beantworten, und dann ist es eine großartige Ergänzung der Website. Bitte hören Sie auf, nach potenziell negativen Informationen zu einer Frage zu suchen, bevor Sie versuchen, positive Ergebnisse zu sehen.
Tim Post

Antworten:


22

Die Visual C ++ Refactoring- Erweiterung kann ein Mitglied projektweit umbenennen. Es wurde von MS erstellt, aber offensichtlich haben sie das interne Code-DOM verwendet, um dies zu erreichen. Es ist also möglich, ich weiß nur noch nicht wie.

Die CppLister- Erweiterung kann die von VS erstellten Intellisense-Datenbanken lesen, um die verschiedenen Mitglieder innerhalb einer Klasse aufzulisten.

Sie können jederzeit den Open Source Clang C ++ - Parser (eigentlich Compiler) verwenden und den AST in ein C # -Objektmodell einlesen. Siehe CppSharp und ClangSharp für C # -Bindungen an Clang.


8

Ich bin mir nicht sicher, was das "C ++ Code DOM" ist, wenn es überhaupt existiert. Entscheidend ist, dass MSVS das EDG-Frontend verwendet, um die Bedeutung von Symbolen zu analysieren und zu bestimmen und MSVS-IDE-Aktionen zu unterstützen. EDG IIRC baut seine eigenen internen Datenstrukturen auf, die das Programm repräsentieren. Ich habe keinen Grund zu der Annahme, dass diese Datenstrukturen das "C ++ Code DOM" sind oder dass sie für Sie sichtbar sind oder dass Sie sie bei MSDN herausfinden können.

Ihr eigentliches Problem ist, dass Sie C ++ - Quellcode analysieren möchten. Ich stimme zu, dass die EDG-Front-End-Informationen eine bedeutende Hilfe dafür wären. Sie möchten wirklich wirklich nicht versuchen, Ihren eigenen C ++ - Parser zu schreiben (und Sie benötigen viele Dinge nach dem Parsen, googeln Sie meinen Aufsatz über "Leben nach dem Parsen").

Sie haben also folgende Möglichkeiten:

  • Finden Sie eine Tür in die EDG-Maschinerie in MSVS. Da Sie nicht viel Glück hatten und anscheinend nichts von MS dokumentiert ist, was besagt, dass dies verfügbar ist, werden Sie auf diese Weise wahrscheinlich nicht viel Glück haben. Wenn ich in MSs Schuhen stecke, würde ich es nicht öffentlich machen; Es wäre nur ein weiterer Support-Kopfschmerz und auf einer Software, die nicht einmal ihnen gehört.
  • Verwenden Sie das kommerzielle EDG-Frontend direkt von EDG . Nach meinem Verständnis bieten sie Lizenzen für die individuelle Nutzung kostenlos an. (Mein Verständnis kann falsch sein). Auf diese Weise überspringen Sie alle Zugriffsbeschränkungen, die MS möglicherweise beim Zugriff hat ... zum Preis, dass Sie das EDG-Frontend selbst konfigurieren müssen. Ein Nachteil: EDG möchte das Frontend eines Compilers sein, nicht das Frontend eines Analysators. Diese Unterscheidung mag subtil erscheinen, aber sie wird Sie wahrscheinlich beißen. Ich vermute zum Beispiel, dass EDG Kommentare wegwirft. Compiler-Frontends brauchen sie nicht. Wenn Sie Kommentare in Ihrem Analysegerät überprüfen möchten, ist dies möglicherweise ein echtes Problem.
  • Verwenden Sie Clang . Dies ist ein Open-Source-C ++ - Parser, der für eine Vielzahl von Programmanalysezwecken sowie für das Front-End eines C ++ - Compilers entwickelt wurde. Ich habe keine Erfahrung damit, aber es scheint ziemlich gut durchdacht zu sein und scheint viele Einrichtungen zu bieten. Ich weiß nicht, ob es spezielle Unterstützung für den MS-Dialekt von C ++ hat.
  • Verwenden Sie ein anderes kommerzielles Frontend, unser (DMS) C ++ - Frontend. Als Architekt bin ich mir ziemlich sicher, dass es gut durchdacht ist (einschließlich der Unterstützung von MS Visual C ++). Es gibt spezielle Erfahrungen damit, um komplexe C ++ - Analyse- und Transformationsaufgaben auszuführen. Im Gegensatz zu EDG unterstützt es Analyse, Transformation und Generierung (z. B. erfasst es Kommentare und sogar den Radix von Literalen, damit sie korrekt neu generiert werden können). Die Stiftung DMS verfügt über zahlreiche integrierte Maschinen zur Unterstützung der benutzerdefinierten Analyse: AST- und Symboltabellenkonstruktion, Attributgrammatiken, Datenfluss-Frameworks, intraprozedurale Steuerung und Datenflussanalyse auf AST-Ebene, BDD-Verwaltung, Quellmusterübereinstimmungen, Source-to -Quelltransformationen. Clang und EDG bieten AST- und Symboltabellenkonstruktionen an. Clang (aber ich glaube nicht, dass EDG) hat es eine Flussanalyse (auf LLVM-Ebene), aber keine Durchflussanalyse auf AST-Ebene (AFAIK). Weder Clang noch EDG bieten die Quellmuster- / Transformationsfunktion. Welche also besser ist, hängt von Ihren langfristigen Aufgaben ab. Im Vergleich zu den anderen Optionen ist unser C ++ - Frontend weder Open Source noch kostenlos. man kann Forschungslizenzen bekommen.

2
"DOM" ist im Grunde genommen HTML-Sprache für einen AST. Es wird jedoch davon ausgegangen, dass es eine kanonische Syntax gibt, während C ++ - Compiler normalerweise leicht unterschiedliche Syntaxen verwenden. (ZB um bessere Fehlermeldungen zu erstellen.)
MSalters

3
DOM in C # bedeutet "AST mit schlechter Auflösung", das für die Codegenerierung verwendet wird. Sie können C ++ - Programme nicht realistisch mit der Auflösung analysieren, die C # dom bietet.
Ira Baxter

Siehe unvermeidliche Software.com/Products.aspx für das, was eine gute C # -Codedom bietet
TheFlash

@Geotarget: und was hat ein C # Dom mit der Frage zu tun?
Ira Baxter

@IraBaxter - Was ich suche, wenn ich "Code DOM" sage - viele Leute haben kommentiert, dass sie nicht verstehen, was ein Code DOM ist und / oder sie es mit dem JS HTML DOM verwechseln. Natürlich bin ich kein C ++ - Experte (wie ich bereits sagte), daher weiß ich nicht, was in einem C ++ - Code-DOM erforderlich sein könnte, obwohl ich verstehe, dass Inevitablesoftware ein sehr einfaches und benutzerfreundliches Code-DOM bietet, und ich Ich bin auf der Suche nach einem C ++ - Code-DOM mit einer ähnlichen API.
TheFlash
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.