Não tenho certeza do que é o "C ++ Code DOM", se é que existe. O que importa é que o MSVS está usando o front end EDG para analisar e determinar o significado dos símbolos, para oferecer suporte às ações do IDE do MSVS. EDG IIRC constrói suas próprias estruturas de dados internas representando o programa; Não tenho nenhuma razão para acreditar que essas estruturas de dados sejam o "C ++ Code DOM", ou que sejam visíveis para você ou que você possa descobrir mais sobre elas no MSDN.
O seu verdadeiro problema é que você deseja analisar o código-fonte C ++. Eu concordo, ter as informações de front-end do EDG seria uma ajuda significativa para fazer isso; você realmente realmente não quero tentar escrever seu próprio analisador C ++ (e você precisa de um monte de coisas passadas análise, google meu ensaio sobre a "vida após a análise").
Então você meio que tem as seguintes opções:
- Encontre uma porta para o maquinário EDG em MSVS. Como você não teve muita sorte e parece não haver nada documentado na MS informando que isso está disponível, você provavelmente não terá muita sorte desta forma. Se eu estivesse no lugar de MS, não tornaria isso público; seria apenas mais uma dor de cabeça de suporte, e em um software que nem é deles.
- Use o front-end EDG comercial, diretamente do EDG . Meu entendimento é que eles oferecem licenças de uso individual sem nenhum custo. (Meu entendimento pode estar errado). Desta forma, você pula quaisquer restrições que a MS possa ter no acesso ... ao preço de ter que configurar o front end EDG você mesmo. Uma desvantagem: EDG quer ser o front end de um compilador, não o front end de um analisador. Essa distinção pode parecer sutil, mas provavelmente vai incomodar você. Por exemplo, eu suspeito que EDG jogue comentários fora; os front-ends do compilador não precisam deles. Se você quiser inspecionar comentários em seu analisador, isso pode ser um problema real.
- Use o Clang . Este é um analisador C ++ de código aberto, projetado para uso em uma ampla variedade de propósitos de análise de programa, bem como para o front-end de um compilador C ++. Não tenho experiência com isso, mas parece muito bem pensado e parece oferecer muitas facilidades. Não sei se tem suporte específico para o dialeto MS do C ++.
- Use outro front-end comercial, nosso (DMS) C ++ Front-end. Sendo o arquiteto disso, tenho certeza de que está bem pensado (incluindo suporte para MS Visual C ++); há experiência específica com o uso disso para realizar tarefas complexas de análise e transformação de C ++. Ao contrário do EDG, ele é projetado para oferecer suporte a análise, transformação e geração (por exemplo, ele captura comentários e até mesmo a raiz de literais para que possam ser regenerados corretamente). A base, DMS, tem muitos maquinários integrados para apoiar a análise personalizada: AST e construção de tabelas de símbolos, gramáticas de atributos, estruturas de fluxo de dados, controle intraprocedural e análise de fluxo de dados no nível AST, gerenciamento de BDD, correspondências de padrão de origem, origem para - transformações de origem. Clang and EDG oferece AST e construção de mesa de símbolos; Clang (mas não acho que EDG) tem análise de fluxo (no nível LLVM), mas não a análise de fluxo no nível AST (AFAIK). Nem o Clang nem o EDG oferecem a capacidade de padrão / transformação de origem, portanto, o melhor depende de suas tarefas de longo prazo. Comparado com as outras opções, nosso front-end C ++ não é open source ou gratuito; pode-se obter licenças de pesquisa.