¿Se puede acceder al DOM del código VC ++ desde los complementos de VS?

100

Visual Studio IntelliSense para VC ++ incluye el analizador "completo" EDG C ++ (también utilizado por Intel y otros). Dado que el DOM del código C # es accesible para los complementos (corríjame si me equivoco), ¿el DOM del código C ++ también es accesible? ¿Se puede usar para analizar un proyecto VC ++ abierto dentro del entorno VS?

El flash
fuente
25
Solo vino de tu otro hilo ; Esta es una buena pregunta.
Qix - MONICA FUE MALTRATADA
81
De nuevo, "¿no tienes claro lo que estás preguntando?" - ¿De verdad amigos? "No sé nada sobre la premisa de esta pregunta" no significa "No tengo claro lo que estás preguntando".
Tim Post
9
@Dave: agregué una respuesta para demostrar que los no empleados de MS también pueden resolver este problema. Hay personas que han hecho cosas cercanas a lo que quiero.
TheFlash
55
@DaveHillier Si está en el tema, es perfectamente bienvenido aquí. No hay discusión más allá de eso. Si empezamos a entrar en "¿Alguien aquí puede siquiera responder esto?" luego nos acercamos rápidamente a este tipo de angustia pegajosa donde cualquier cosa difícil es potencialmente incontestable. A menos que abramos la pregunta para obtener respuestas , francamente no tenemos una idea concreta de quién podría responderla. Ese es el objetivo de preguntar en primer lugar.
Tim Post
49
@bmargulies ¿Qué daño está haciendo esta pregunta simplemente por existir? Está relacionado con el tema, es interesante y es posible que alguien pueda responderlo. Diablos, alguien de MS puede ver esto y responder, y luego es una gran adición al sitio. Deje de buscar cualquier cosa potencialmente negativa sobre una pregunta antes de intentar ver algo positivo.
Tim Post

Respuestas:

22

La extensión de refactorización de Visual C ++ puede cambiar el nombre de un miembro en todo el proyecto. Está construido por MS pero obviamente usaron el código DOM interno para lograr esto. Entonces es posible, pero todavía no sé cómo.

La extensión CppLister puede leer las bases de datos intellisense creadas por VS para enumerar los diversos miembros dentro de una clase.

Siempre puede usar el analizador de código abierto Clang C ++ (en realidad, el compilador) y leer el AST en un modelo de objetos C #. Consulte CppSharp y ClangSharp para los enlaces de C # a Clang.

El flash
fuente
8

No estoy seguro de qué es el "C ++ Code DOM", si es que existe. Lo que importa es que MSVS está utilizando la interfaz EDG para analizar y determinar el significado de los símbolos, para admitir las acciones de MSVS IDE. EDG IIRC construye sus propias estructuras de datos internas que representan el programa; No tengo ninguna razón para creer que esas estructuras de datos son el "Código DOM de C ++", o que son visibles para usted o que podría encontrarlas en MSDN.

Su problema real declarado es que desea analizar el código fuente de C ++. Estoy de acuerdo, tener la información de la interfaz EDG sería una ayuda significativa para hacer eso; que realmente realmente no quiere intentar escribir su propio analizador C ++ (y que necesita un montón de cosas pasadas de análisis, Google mi ensayo sobre "la vida después del análisis").

Así que tienes las siguientes opciones:

  • Encuentre una puerta en la maquinaria EDG en MSVS. Como no ha tenido mucha suerte y parece que no hay nada documentado de MS que indique que esto está disponible, probablemente no tendrá mucha suerte de esta manera. Si estuviera en el lugar de MS, no lo haría público; sería simplemente otro dolor de cabeza de soporte, y en un software que ni siquiera es suyo.
  • Utilice la interfaz comercial de EDG, directamente desde EDG . Tengo entendido que ofrecen licencias de uso individual sin cargo. (Mi entendimiento puede estar equivocado). De esta manera, se salta cualquier restricción que MS pueda tener en el acceso ... al precio de tener que configurar el front-end de EDG usted mismo. Una desventaja: EDG quiere ser la parte delantera de un compilador, no la parte delantera de un analizador. Esa distinción puede parecer sutil, pero probablemente lo muerda. Por ejemplo, sospecho que EDG descarta los comentarios; Las interfaces del compilador no las necesitan. Si desea inspeccionar los comentarios en su analizador, esto podría ser un problema real.
  • Utilice Clang . Este es un analizador de C ++ de código abierto, diseñado para usarse con una amplia variedad de propósitos de análisis de programas, así como para la interfaz de un compilador de C ++. No tengo experiencia con esto, pero parece bastante bien pensado y parece ofrecer muchas facilidades. No sé si tiene soporte específico para el dialecto MS de C ++.
  • Utilice otro front-end comercial, nuestro (DMS) C ++ Front End. Siendo el arquitecto de esto, estoy bastante seguro de que está bien pensado (incluido el soporte para MS Visual C ++); Existe experiencia específica en su uso para realizar tareas complejas de análisis y transformación de C ++. A diferencia de EDG, está diseñado para admitir análisis, transformación y generación (por ejemplo, captura comentarios e incluso la base de literales para que se puedan regenerar correctamente). La base, DMS, tiene una gran cantidad de maquinaria incorporada para respaldar el análisis personalizado: construcción de tablas de símbolos y AST, gramáticas de atributos, marcos de flujo de datos, control intraprocedimiento y análisis de flujo de datos a nivel de AST, gestión de BDD, coincidencias de patrones de origen, de origen a -transformaciones de fuente. Clang y EDG ofrecen construcción de tablas de símbolos y AST; Clang (pero no creo que EDG) tenga análisis de flujo (a nivel LLVM), pero no análisis de flujo a nivel AST (AFAIK). Ni Clang ni EDG ofrecen la capacidad de transformación / patrón de origen, por lo que cuál es mejor depende de sus tareas a largo plazo. Comparado con las otras opciones, nuestro front-end C ++ no es de código abierto ni gratuito; se pueden obtener licencias de investigación.
Ira Baxter
fuente
2
"DOM" es un lenguaje HTML para un AST, básicamente. Sin embargo, asume que hay una sintaxis canónica, mientras que los compiladores de C ++ generalmente usan sintaxis ligeramente diferentes. (Por ejemplo, para crear mejores mensajes de error).
MSalters
3
DOM en C # significa "AST con mala resolución" utilizado para la generación de código. No puede analizar de manera realista los programas C ++ con el tipo de resolución que ofrece C # dom.
Ira Baxter
Visite inevitablesoftware.com/Products.aspx para conocer lo que ofrece un buen código C #
TheFlash
@Geotarget: ¿y qué tiene que ver un C # Dom con la pregunta?
Ira Baxter
@IraBaxter - Lo que estoy buscando cuando digo "Code DOM" - muchas personas han comentado que no entienden qué es un Code DOM y / o lo confunden con JS HTML DOM. Por supuesto que no soy un experto en C ++ (como he dicho antes), así que no sé qué se podría necesitar en un DOM de código C ++, aunque entiendo que Inevitablesoftware proporciona un DOM de código muy simple y fácil de usar, y yo Estoy buscando un DOM de código C ++ con una API similar.
TheFlash