.net visual-studio visual-c++ c++-cli codedom

.net - ¿El código DOM de VC++ es accesible desde los complementos de VS?



visual-studio visual-c++ (2)

La extensión Refactoring 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. Así que es posible, aún no sé cómo, todavía.

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

Siempre puede usar el analizador Clang C ++ de código abierto (en realidad compilador) y leer el AST en un Modelo de Objeto C #. Ver CppSharp y CppLister para enlaces C # a Clang.

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


No estoy seguro de qué es el "Código DOM C ++", si es que existe. Lo que importa es que MSVS está usando la interfaz EDG para analizar y determinar el significado de los símbolos, para admitir las acciones IDE de MSVS. 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 sean el "Código DOM de C ++", o que sean visibles para usted o que pueda averiguar sobre ellas en MSDN.

Su verdadero problema declarado es que desea analizar el código fuente de C ++. Estoy de acuerdo, tener la información del front-end de EDG sería una ayuda significativa para hacer eso; realmente no quieres intentar escribir tu propio analizador de C ++ (y necesitas muchas cosas pasadas, google mi ensayo sobre "vida después del análisis").

Entonces tienes las siguientes opciones:

  • Encuentre una puerta a la maquinaria EDG en MSVS. Como no has tenido mucha suerte y parece que no hay nada documentado por parte de MS diciendo que está disponible, probablemente no tendrás mucha suerte de esta manera. Si estuviera en los zapatos de MS, no lo haría público; simplemente sería otro dolor de cabeza de apoyo, y en una pieza de software que ni siquiera es de ellos.
  • Utilice la interfaz EDG comercial, directamente desde EDG . Según entiendo, ofrecen licencias de uso individual sin cargo. (Mi comprensión puede ser incorrecta). De esta manera, se salta cualquier restricción que pueda tener MS en el acceso ... al precio de tener que configurar la interfaz EDG usted mismo. Una desventaja: EDG quiere ser el front-end de un compilador, no el front-end de un analizador. Esa distinción puede parecer sutil, pero probablemente te morderá. Por ejemplo, sospecho que EDG descarta comentarios; los extremos del compilador no los necesitan. Si desea inspeccionar los comentarios en su analizador, esto podría ser un problema real.
  • Use Clang . Este es un analizador de C ++ de código abierto, diseñado para una amplia variedad de propósitos de análisis de programas, así como para el front end 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 ++.
  • Use 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 ++); hay experiencia específica con el uso de esto para llevar a cabo complejas tareas de análisis y transformación de C ++. A diferencia de EDG, está diseñado para admitir el análisis, la transformación y la generación (por ejemplo, captura los comentarios e incluso la raíz de los literales para que puedan regenerarse correctamente). La fundación, DMS, tiene una gran cantidad de maquinaria incorporada para soportar análisis personalizados: AST y construcción de tablas de símbolos, gramáticas de atributos, marcos de flujo de datos, control intraprocedimiento y análisis de flujo de datos en el nivel AST, gestión BDD, coincidencias de patrones fuente, fuente-a transformaciones de recursos. Clang y EDG ofrecen AST y la construcción de tablas de símbolos; Clang (pero no creo que EDG) lo tiene tiene análisis de flujo (en el nivel LLVM), pero no análisis de flujo en el nivel AST (AFAIK). Ni Clang ni EDG ofrecen el patrón fuente / capacidad de transformación, por lo que lo mejor depende de las tareas a largo plazo. En comparación con las otras opciones, nuestra interfaz de C ++ no es de código abierto o gratuito; uno puede obtener licencias de investigación.