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.