Share 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.

steps of the compiler pipeline processing source code to object code

Varje fas i den här pipelinen är en separat komponent. Först parsar och parsar fasen källtext till syntax som följer språk grammatiken. 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 genererar fasen emit en sammansättning med all information som kompilatorn har skapat.

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

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.

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

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 upplevelser som att stoppa ett bygge baserat på policy och visa live-squiggles i redigeraren och föreslå kodkorrigeringar.

Api:er för skript

Värd- och skript-API:er bygger på kompilatorlagret. Du kan använda API:er för skriptkörning för att köra kodfragment och ackumulera 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.