Compartir a través de


Descripción del modelo del SDK de .NET Compiler Platform

Los compiladores procesan el código que escribe siguiendo reglas estructuradas que a menudo difieren de la forma en que los humanos leen y comprenden el código. Un conocimiento básico del modelo usado por los compiladores es esencial para comprender las API que se usan al compilar herramientas basadas en Roslyn.

Áreas funcionales de canalización del compilador

El SDK de .NET Compiler Platform expone el análisis de código de los compiladores de C# y Visual Basic al usuario, al proporcionar una capa API que refleja un pipeline tradicional de compilador.

Pasos del código fuente de procesamiento de canalización de compilador a código de objeto

Cada fase de esta canalización es un componente independiente. En primer lugar, la fase de análisis acorta y analiza el texto de origen en la sintaxis que sigue la gramática del lenguaje. En segundo lugar, la fase de declaración analiza los metadatos de origen e importados para formar símbolos con nombre. A continuación, la fase de enlace asocia los identificadores del código con los símbolos. Por último, la fase de emisión emite un ensamblado con toda la información compilada por el compilador.

La API de canalización del compilador proporciona acceso a cada paso que forma parte de la canalización del compilador.

Correspondiente a cada una de esas fases, el SDK de .NET Compiler Platform expone un modelo de objetos que permite el acceso a la información en esa fase. La fase de análisis expone un árbol de sintaxis, la fase de declaración expone una tabla de símbolos jerárquica, la fase de enlace expone el resultado del análisis semántico del compilador y la fase de emisión es una API que genera códigos de bytes IL.

los servicios de lenguaje disponibles desde la API del compilador en cada paso de la canalización del compilador

Cada compilador combina estos componentes como un único conjunto de un extremo a otro.

Estas API son las mismas que usa Visual Studio. Por ejemplo, las características de esquematización y formato de código usan los árboles de sintaxis, el Examinador de objetos y las características de navegación usan la tabla de símbolos, refactorizaciones y Ir a definición usan el modelo semántico, y Edit y Continue usan todos estos, incluida la API Emit.

Capas de API

El SDK del compilador de .NET consta de varias capas de API: API del compilador, API de diagnóstico, API de scripting y api de áreas de trabajo.

API del compilador

La capa del compilador contiene los modelos de objetos que corresponden a la información expuesta en cada fase de la canalización del compilador, tanto sintáctica como semántica. La capa del compilador también contiene una instantánea inmutable de una sola invocación de un compilador, incluidas las referencias de ensamblado, las opciones del compilador y los archivos de código fuente. Hay dos API distintas que representan el lenguaje C# y el lenguaje Visual Basic. Las dos API son similares en forma, pero adaptadas para alta fidelidad a cada idioma individual. Esta capa no tiene dependencias en los componentes de Visual Studio.

API de diagnóstico

Como parte de su análisis, el compilador puede producir un conjunto de diagnósticos que abarcan todo, desde errores de sintaxis, semántica y asignación definitiva a varias advertencias e diagnósticos informativos. El nivel de API del compilador expone diagnósticos a través de una API extensible que permite conectar analizadores definidos por el usuario al proceso de compilación. Permite que los diagnósticos definidos por el usuario, como los generados por herramientas como StyleCop, se produzcan junto con los diagnósticos definidos por el compilador. La generación de diagnósticos de este modo tiene la ventaja de integrarse de forma natural con herramientas como MSBuild y Visual Studio, que dependen de diagnósticos de experiencias como detener una compilación según una directiva y mostrar subrayados ondulados activos en el editor y sugerir correcciones de código.

API de scripting

Las API de hospedaje y scripting se basan en la capa del compilador. Es posible usar las API de scripting para ejecutar fragmentos de código y acumular un contexto de ejecución de runtime. RePL interactivo de C# (bucle read-Evaluate-Print) usa estas API. REPL le permite usar C# como lenguaje de scripting, ejecutando el código de forma interactiva a medida que lo escribe.

API de áreas de trabajo

La capa Áreas de trabajo contiene workspace API, que es el punto de partida para realizar análisis de código y refactorización en soluciones completas. Le ayuda a organizar toda la información sobre los proyectos de una solución en un único modelo de objetos, lo que le ofrece acceso directo a los modelos de objetos de capa del compilador sin necesidad de analizar archivos, configurar opciones o administrar dependencias de proyecto a proyecto.

Además, la capa Áreas de trabajo expone un conjunto de API que se usan al implementar herramientas de análisis de código y refactorización que funcionan dentro de un entorno de host, como el IDE de Visual Studio. Entre los ejemplos se incluyen las API Buscar todas las referencias, formato y generación de código.

Esta capa no tiene dependencias en los componentes de Visual Studio.