Share via


Informazioni sul modello di .NET Compiler Platform SDK

I compilatori elaborano il codice scritto seguendo regole strutturate spesso diverse dal modo in cui gli essere umani leggono e interpretano il codice. Una conoscenza di base del modello usato dai compilatori è essenziale per comprendere le API usate durante la compilazione di strumenti basati su Roslyn.

Aree funzionali della pipeline del compilatore

.NET Compiler Platform SDK espone l'analisi del codice dei compilatori C# e Visual Basic tramite un livello API che rispecchia una pipeline del compilatore tradizionale.

steps of the compiler pipeline processing source code to object code

Ogni fase della pipeline è un componente separato. Innanzitutto, la fase di analisi suddivide in token e analizza il testo di origine convertendolo in sintassi conforme alla grammatica del linguaggio. In secondo luogo, la fase di dichiarazione analizza l'origine e i metadati importati per formare simboli denominati. La fase di associazione abbina poi gli identificatori nel codice ai simboli. La fase di creazione, infine, genera un assembly con tutte le informazioni raccolte dal compilatore.

compiler pipeline api provides access to each step that is part of the compiler pipeline

In modo corrispondente a ciascuna di queste fasi, .NET Compiler Platform SDK espone un modello a oggetti che consente l'accesso alle informazioni in tale fase. La fase di analisi espone un albero della sintassi, la fase di dichiarazione espone una tabella di simboli gerarchici, la fase di associazione espone il risultato dell'analisi semantica del compilatore e la fase di emit è un'API che produce codici byte IL.

the language services available from the compiler api at each step of the compiler pipeline

Ogni compilatore combina questi componenti come singola unità completa.

Queste API sono le stesse usate da Visual Studio. Ad esempio, le funzionalità per la struttura e la formattazione del codice usano gli alberi della sintassi, le funzionalità di Visualizzatore oggetti e navigazione usano la tabella dei simboli, refactoring e Vai a definizione usano il modello semantico e Modifica e continuazione usa tutti questi elementi, inclusa l'API Emit.

Livelli delle API

.NET Compiler SDK è costituito da diversi livelli di API: API del compilatore, API di diagnostica, API di scripting e API delle aree di lavoro.

API del compilatore

Il livello del compilatore contiene i modelli a oggetti che corrispondono alle informazioni esposte in ogni fase della pipeline del compilatore, sia semantiche che sintattiche. Il livello del compilatore contiene anche uno snapshot non modificabile di una singola chiamata di un compilatore, inclusi riferimenti ad assembly, opzioni del compilatore e file del codice sorgente. Esistono due API distinte che rappresentano il linguaggio C# e il linguaggio Visual Basic. Le due API sono simili nella forma ma personalizzate su misura per offrire la massima fedeltà per ogni singolo linguaggio. Questo livello non ha dipendenze da componenti di Visual Studio.

API di diagnostica

Come parte dell'analisi, il compilatore può produrre un set di dati diagnostici relativi a tutti gli elementi: sintassi, semantica, precisi errori di assegnazione, vari avvisi e dati diagnostici informativi. Il livello dell'API del compilatore espone i dati diagnostici tramite un'API estensibile che consente di integrare analizzatori definiti dall'utente nel processo di compilazione. Consente di produrre dati diagnostici definiti dall'utente, ad esempio quelli prodotti da strumenti come StyleCop, insieme a quelli definiti dal compilatore. Questo metodo di produzione dei dati diagnostici ha il vantaggio di essere naturalmente integrabile con strumenti come MSBuild e Visual Studio, che dipendono dalla diagnostica per esperienze come l'arresto di una compilazione in base a criteri e la visualizzazione di linee a zigzag in tempo reale nell'editor con suggerimenti per la correzioni del codice.

API di scripting

Le API di hosting e scripting sono basate sul livello del compilatore. È possibile usare le API di scripting per eseguire frammenti di codice e accumulare un contesto di esecuzione di runtime. Il ciclo Read–Eval–Print (REPL) interattivo di C# usa queste API. Il ciclo REPL consente di usare C# come linguaggio di scripting, eseguendo il codice in modo interattivo mentre lo si scrive.

API delle aree di lavoro

Il livello delle aree di lavoro contiene l'API Workspace, ovvero il punto di partenza per eseguire l'analisi del codice e il refactoring su intere soluzioni. Consente di organizzare tutte le informazioni sui progetti in una soluzione in un singolo modello a oggetti, offrendo accesso diretto ai modelli a oggetti del livello del compilatore senza la necessità di analizzare i file, configurare le opzioni o gestire le dipendenze da progetto a progetto.

Inoltre, il livello delle aree di lavoro espone un set di API usate durante l'implementazione di strumenti di analisi del codice e refactoring che operano all'interno di un ambiente host come l'IDE di Visual Studio. Sono esempi le API Trova tutti i riferimenti, Formattazione e Generazione codice.

Questo livello non ha dipendenze da componenti di Visual Studio.