Condividi tramite


Informazioni sul modello .NET Compiler Platform SDK

I compilatori elaborano il codice scritto seguendo regole strutturate che spesso differiscono dal modo in cui gli esseri umani leggono e conoscono 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 all'utente come consumer fornendo un livello API che rispecchia una pipeline del compilatore tradizionale.

passaggi dell'elaborazione del codice sorgente della pipeline del compilatore nel codice oggetto

Ogni fase di questa pipeline è un componente separato. Prima di tutto, la fase di analisi tokenizza e analizza il testo di origine seguendo la sintassi della grammatica della lingua. In secondo luogo, la fase di dichiarazione analizza i metadati di origine e importati per formare simboli denominati. Successivamente, la fase di associazione associa gli identificatori nel codice ai simboli. Infine, la fase di emissione genera un assembly con tutte le informazioni compilate dal compilatore.

L'API della pipeline del compilatore fornisce l'accesso a ogni passaggio che fa parte della pipeline del compilatore

Corrispondente a ognuna 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 dei simboli gerarchica, la fase di associazione espone il risultato dell'analisi semantica del compilatore e la fase di emissione è un'API che produce codici di byte IL.

i servizi del linguaggio disponibili dall'API del compilatore in ogni passaggio della pipeline del compilatore

Ogni compilatore combina questi componenti in un unico sistema integrato.

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

Livelli 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 sintattica che semantica. Il livello del compilatore contiene anche uno snapshot non modificabile di una singola chiamata di un compilatore, inclusi riferimenti all'assembly, opzioni del compilatore e file di codice sorgente. Esistono due API distinte che rappresentano il linguaggio C# e il linguaggio Visual Basic. Le due API sono simili in forma, ma personalizzate per la massima fedeltà a ogni singolo linguaggio. Questo livello non ha dipendenze dai componenti di Visual Studio.

API di diagnostica

Nell'ambito dell'analisi, il compilatore può produrre un set di diagnostica che copre tutti gli elementi, dalla sintassi, dalla semantica e dagli errori di assegnazione definiti a vari avvisi e diagnostica informativa. Il livello API del compilatore espone la diagnostica tramite un'API estendibile che consente l'inserimento di analizzatori definiti dall'utente nel processo di compilazione. Consente la diagnostica definita dall'utente, ad esempio quelle prodotte da strumenti come StyleCop, da produrre insieme alla diagnostica definita dal compilatore. La produzione di diagnostica in questo modo offre il vantaggio dell'integrazione naturale con strumenti come MSBuild e Visual Studio, che dipendono dalla diagnostica per esperienze quali l'interruzione di una compilazione in base ai criteri, la visualizzazione di linee ondulate in tempo reale nell'editor e il suggerimento di correzioni del codice.

API di scripting

Le API di hosting e scripting sono costruite sopra il livello del compilatore. È possibile usare le API di scripting per eseguire frammenti di codice e accumulare un contesto di esecuzione di runtime. Il ciclo REPL interattivo C# (Read-Evaluate-Print Loop) usa queste API. REPL consente di usare C# come linguaggio di scripting, eseguendo il codice in modo interattivo durante la scrittura.

API delle aree di lavoro

Il livello Aree di lavoro contiene l'API Area di lavoro, che rappresenta 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 l'accesso diretto ai modelli a oggetti del livello del compilatore senza dover analizzare i file, configurare le opzioni o gestire le dipendenze da progetto a progetto.

Inoltre, il livello Aree di lavoro espone un set di API usate per l'implementazione di strumenti di analisi del codice e refactoring che funzionano all'interno di un ambiente host come l'IDE di Visual Studio. Gli esempi includono le API Trova tutti i riferimenti, Formattazione e Generazione di codice.

Questo livello non ha dipendenze dai componenti di Visual Studio.