Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os compiladores processam o código que você escreve seguindo regras estruturadas que geralmente diferem da maneira como os humanos leem e entendem o código. Uma compreensão básica do modelo usado pelos compiladores é essencial para entender as APIs que você usa ao criar ferramentas baseadas em Roslyn.
Áreas funcionais do pipeline do compilador
O SDK do .NET Compiler Platform expõe a análise de código dos compiladores C# e Visual Basic para você como consumidor, fornecendo uma camada de API que espelha um pipeline de compilador tradicional.
Cada fase desse fluxo de trabalho é um componente separado. Primeiro, a fase de análise cria tokens do texto de origem e o analisa na sintaxe que segue a gramática da linguagem. Em segundo lugar, a fase de declaração analisa a origem e os metadados importados para formar símbolos nomeados. Em seguida, a fase de associação corresponde os identificadores no código aos símbolos. Por fim, a fase de emissão emite um assembly com todas as informações criadas pelo compilador.
Correspondente a cada uma dessas fases, o SDK da Plataforma do Compilador .NET expõe um modelo de objeto que permite o acesso às informações nessa fase. A fase de análise expõe uma árvore de sintaxe, a fase de declaração expõe uma tabela de símbolos hierárquica, a fase de associação expõe o resultado da análise semântica do compilador e a fase de emissão é uma API que produz códigos de bytes IL.
Cada compilador combina esses componentes como um único todo de ponta a ponta.
Essas APIs são as mesmas usadas pelo Visual Studio. Por exemplo, os recursos de estrutura e formatação de código usam as árvores de sintaxe, o Pesquisador de Objetos e os recursos de navegação usam a tabela de símbolos, as refatorações e Ir para Definição usam o modelo semântico, e Editar e Continuar usa todos esses, incluindo a Emit API.
Camadas de API
O SDK do compilador .NET consiste em várias camadas de APIs: APIs do compilador, APIs de diagnóstico, APIs de script e APIs de workspaces.
APIs de Compilador
A camada do compilador contém os modelos de objeto que correspondem às informações expostas em cada fase do pipeline do compilador, sintactica e semântica. A camada do compilador também contém um instantâneo imutável de uma única invocação de um compilador, incluindo referências de assembly, opções do compilador e arquivos de código-fonte. Há duas APIs distintas que representam a linguagem C# e a linguagem Visual Basic. As duas APIs são semelhantes em forma, mas personalizadas para garantir alta fidelidade a cada idioma. Essa camada não tem dependências em componentes do Visual Studio.
APIs de diagnóstico
Como parte de sua análise, o compilador pode produzir um conjunto de diagnósticos que abrange tudo, desde sintaxe, semântica e erros de atribuição definidos até vários avisos e diagnóstico informativo. A camada de API do Compilador expõe o diagnóstico por meio de uma API extensível que permite que analisadores definidos pelo usuário sejam conectados ao processo de compilação. Ele permite que diagnósticos definidos pelo usuário, como aqueles produzidos por ferramentas como o StyleCop, sejam produzidos junto com o diagnóstico definido pelo compilador. Essa forma de produção de diagnóstico tem o benefício da integração natural a ferramentas como o MSBuild e o Visual Studio, que dependem do diagnóstico para experiências como interrupção de um build com base na política, exibição de textos sublinhados em tempo real no editor e sugestão de correções de código.
APIs de script
As APIs de hospedagem e script são criadas sobre a camada do compilador. Você pode usar as APIs de script para executar snippets de código e acumular um contexto de execução de runtime. O REPL (Loop de Leitura-Avaliação-Impressão) interativo do C# usa essas APIs. O REPL permite que você use C# como uma linguagem de script, executando o código interativamente enquanto você o escreve.
APIs dos workspaces
A camada Workspaces contém a API do Workspace, que é o ponto de partida para fazer análise de código e refatoração em soluções inteiras. Ele ajuda você a organizar todas as informações sobre os projetos em uma solução em um único modelo de objeto, oferecendo acesso direto aos modelos de objeto de camada do compilador sem a necessidade de analisar arquivos, configurar opções ou gerenciar dependências projeto a projeto.
Além disso, a camada Workspaces apresenta um conjunto de APIs usadas ao implementar ferramentas de análise de código e refatoração que funcionam em um ambiente de host como o IDE do Visual Studio. Os exemplos incluem as APIs Localizar Todas as Referências, Formatação e Geração de Código.
Essa camada não tem dependências em componentes do Visual Studio.