Dela via


Förstå .NET Compiler Platform SDK-modellen

Kompilatorer bearbetar koden du skriver efter strukturerade regler som ofta skiljer sig från hur människor läser och förstår kod. En grundläggande förståelse av modellen som används av kompilatorer är viktig för att förstå de API:er som du använder när du skapar Roslyn-baserade verktyg.

Funktionsområden för kompilatorpipelines

.NET Compiler Platform SDK exponerar C#- och Visual Basic-kompilatorernas kodanalys för dig som konsument genom att tillhandahålla ett API-lager som speglar en traditionell kompilatorpipeline.

steg i kompilatorns pipeline som bearbetar källkod till objektkod

Varje fas i den här pipelinen är en separat komponent. Först tokeniserar och parsar fasen källtexten till en syntax som följer språkgrammatiken. För det andra analyserar deklarationsfasen källan och importerade metadata för att bilda namngivna symboler. Därefter matchar bindningsfasen identifierare i koden till symboler. Slutligen avger emit-fasen en assembly med all information som kompilatorn har skapat.

api för kompilatorpipeline ger åtkomst till varje steg som ingår i kompileringspipelinen

Som motsvarar var och en av dessa faser exponerar .NET Compiler Platform SDK en objektmodell som ger åtkomst till informationen i den fasen. Parsningsfasen exponerar ett syntaxträd, deklarationsfasen exponerar en hierarkisk symboltabell, bindningsfasen exponerar resultatet av kompilatorns semantiska analys och fasen emit är ett API som genererar IL-bytekoder.

språktjänsterna som är tillgängliga från kompilator-API:et i varje steg i kompilatorpipelinen

Varje kompilator kombinerar dessa komponenter som en enda helhet från slutpunkt till slutpunkt.

Dessa API:er är samma som används av Visual Studio. Till exempel använder kodöversättnings- och formateringsfunktionerna syntaxträden, Objektläsaren och navigeringsfunktionerna använder symboltabellen, refaktoriseringar och Gå till definition använder semantisk modell, och Redigera och fortsätt använder alla dessa, inklusive Emit-API:et.

API-lager

.NET-kompilator-SDK:et består av flera lager api:er: api:er för kompilatorer, api:er för diagnostik, api:er för skript och arbetsytor.

API:er för kompilator

Kompilatorlagret innehåller de objektmodeller som motsvarar information som exponeras vid varje fas i kompilatorpipelinen, både syntaktisk och semantisk. Kompilatorlagret innehåller också en oföränderlig ögonblicksbild av ett enda anrop av en kompilator, inklusive sammansättningsreferenser, kompilatoralternativ och källkodsfiler. Det finns två distinkta API:er som representerar C#-språket och Visual Basic-språket. De två API:erna är liknande i form men skräddarsydda för hög återgivning till varje enskilt språk. Det här lagret har inga beroenden för Visual Studio-komponenter.

Api:er för diagnostik

Som en del av analysen kan kompilatorn skapa en uppsättning diagnostik som omfattar allt från syntax, semantiska och definitiva tilldelningsfel till olika varningar och informationsdiagnostik. Api-lagret compiler exponerar diagnostik via ett utökningsbart API som gör att användardefinierade analysverktyg kan anslutas till kompileringsprocessen. Det gör att användardefinierad diagnostik, till exempel de som produceras av verktyg som StyleCop, kan skapas tillsammans med kompilatordefinierad diagnostik. Att producera diagnostik på det här sättet har fördelen att integreras naturligt med verktyg som MSBuild och Visual Studio, som är beroende av diagnostik för funktioner som att stoppa en build baserat på policy och visa live-indikeringar i redigeraren samt föreslå kodkorrigeringar.

Api:er för skript

Värd- och skript-API:er bygger på kompilatorlagret. Du kan använda skript-API:er för att köra kodfragment och samla in en körningskontext. Den interaktiva C#-REPL:en (Read-Evaluate-Print Loop) använder dessa API:er. Med REPL kan du använda C# som skriptspråk och köra koden interaktivt när du skriver den.

API:er för arbetsytor

Arbetsytelagret innehåller API:et För arbetsytor, som är startpunkten för att utföra kodanalys och omstrukturera hela lösningar. Det hjälper dig att organisera all information om projekten i en lösning i en enskild objektmodell, vilket ger dig direkt åtkomst till objektmodellerna för kompilatorns lager utan att behöva parsa filer, konfigurera alternativ eller hantera projekt-till-projekt-beroenden.

Dessutom visar arbetsytelagret en uppsättning API:er som används vid implementering av kodanalys och refaktoriseringsverktyg som fungerar i en värdmiljö som Visual Studio IDE. Exempel är API:erna Hitta alla referenser, formatering och Kodgenerering.

Det här lagret har inga beroenden för Visual Studio-komponenter.