O código VC ++ DOM está acessível a partir de addons VS?

100

O Visual Studio IntelliSense para VC ++ inclui o analisador EDG C ++ "completo" (também usado pela Intel e outros). Como o DOM do código C # pode ser acessado por complementos (corrija-me se estiver errado), o DOM do código C ++ também está acessível? Isso pode ser usado para analisar um projeto VC ++ aberto dentro do ambiente VS?

O Flash
fonte
25
Acabei de vir de seu outro tópico ; Essa é uma boa pergunta.
Qix - MONICA ERA MISTURADA
81
Novamente, "não está claro o que você está perguntando?" - realmente pessoal? "Não sei nada sobre a premissa dessa pergunta" não significa "Não esteja claro o que você está perguntando".
Tim Post
9
@Dave - Adicionei uma resposta para provar que não funcionários da MS também podem resolver esse problema. Existem pessoas que fizeram coisas próximas do que eu quero.
TheFlash de
55
@DaveHillier Se estiver no assunto, é perfeitamente bem-vindo aqui. Não há discussão além disso. Se começarmos a entrar em "Alguém aqui pode responder isso?" então, rapidamente nos aproximamos desse tipo de angústia pegajosa, onde qualquer coisa difícil é potencialmente irrespondível. A menos que realmente abramos a pergunta para respostas , francamente não temos nenhuma ideia concreta de quem poderia respondê-la. Em primeiro lugar, esse é o objetivo de perguntar.
Tim Post
49
@bmargulies Que mal esta pergunta está fazendo por simplesmente existir? É sobre o assunto, é interessante e alguém poderia responder. Caramba, alguém da MS pode ver e responder, e então é uma ótima adição ao site. Pare de procurar algo potencialmente negativo sobre uma pergunta antes de tentar ver algo positivo.
Tim Post

Respostas:

22

A Refatoração Visual C ++ extensão é capaz de renomear um membro em todo o projeto. É construído pela MS, mas obviamente eles usaram o Code DOM interno para fazer isso. Então é possível, só não sei como, ainda.

A extensão CppLister é capaz de ler os bancos de dados Intellisense criados pelo VS para listar os vários membros de uma classe.

Você sempre pode usar o analisador Clang C ++ de código aberto (na verdade, o compilador) e ler o AST em um modelo de objeto C #. Consulte CppSharp e ClangSharp para vinculações C # ao Clang.

O Flash
fonte
8

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.
Ira Baxter
fonte
2
"DOM" é a linguagem HTML para um AST, basicamente. Ele assume que há uma sintaxe canônica, entretanto, enquanto os compiladores C ++ geralmente usam sintaxes ligeiramente diferentes. (Por exemplo, para criar melhores mensagens de erro.).
MSalters
3
DOM em C # significa "AST com resolução ruim" usado para geração de código. Você não pode analisar realisticamente programas C ++ com o tipo de resolução que o C # dom oferece.
Ira Baxter
Consulte inevitablesoftware.com/Products.aspx para o que um bom código C # oferece
TheFlash
@Geotarget: e o que um C # Dom tem a ver com a pergunta?
Ira Baxter,
@IraBaxter - O que procuro quando digo "Code DOM" - muitas pessoas comentaram que não entendem o que é um Code DOM e / ou o confundem com o JS HTML DOM. Claro que não sou um especialista em C ++ (como afirmei antes), então não sei o que pode ser necessário em um código DOM C ++, embora eu entenda que o software Inevitablesoftware fornece um código DOM muito simples e fácil de usar, e eu estou procurando um código C ++ DOM com uma API semelhante.
TheFlash