Megosztás a következőn keresztül:


A .NET Fordítóplatform SDK-modelljének ismertetése

A fordítók strukturált szabályok alapján dolgozzák fel az ön által írt kódot, amelyek gyakran eltérnek attól, ahogyan az emberek olvassák és értelmezik a kódot. A fordítók által használt modell alapszintű ismerete elengedhetetlen a Roslyn-alapú eszközök létrehozásakor használt API-k megértéséhez.

A Fordítófolyamat működési területei

A .NET Fordítóplatform SDK egy hagyományos fordítófolyamatot tükröző API-réteg biztosításával teszi elérhetővé a C# és a Visual Basic fordítók kódelemzését felhasználóként.

steps of the compiler pipeline processing source code to object code

A folyamat minden fázisa külön összetevő. Először is az elemzési fázis tokenizálja és elemzi a forrásszöveget a nyelvi nyelvtant követő szintaxisba. Másodszor, a deklarációs fázis elemzi a forrás- és importált metaadatokat, hogy névvel ellátott szimbólumokat képezzen. Ezután a kötési fázis megfelel a kódban szereplő azonosítóknak a szimbólumoknak. Végül a kibocsátó fázis egy szerelvényt bocsát ki, amely tartalmazza a fordító által összeállított összes információt.

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

Az egyes fázisoknak megfelelően a .NET Fordítóplatform SDK egy objektummodellt tesz elérhetővé, amely lehetővé teszi az adott fázis információihoz való hozzáférést. Az elemzési fázis egy szintaxisfát tesz elérhetővé, a deklarálási fázis egy hierarchikus szimbólumtáblát tesz elérhetővé, a kötési fázis a fordító szemantikai elemzésének eredményét teszi elérhetővé, a kibocsátó fázis pedig egy API, amely IL bájtkódokat állít elő.

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

Mindegyik fordító egyetlen teljes egészként egyesíti ezeket az összetevőket.

Ezek az API-k ugyanazok, amelyeket a Visual Studio használ. A kódfeltárási és formázási funkciók például a szintaxisfákat, az Object Browsert és a navigációs funkciókat használják a szimbólumtáblát, az újrabontásokat és a Definícióra ugrást a szemantikai modell használatával, a Szerkesztés és folytatás pedig mindezeket használja, beleértve az Emit API-t is.

API-rétegek

A .NET fordító SDK az API-k több rétegéből áll: fordító API-kból, diagnosztikai API-kból, szkriptelési API-kból és munkaterületi API-kból.

Fordító API-k

A fordítóréteg tartalmazza azokat az objektummodelleket, amelyek a fordítófolyamat minden fázisában közzétett információknak felelnek meg, szintaktikai és szemantikai szempontból is. A fordítóréteg egy fordító egyetlen meghívásának megváltoztathatatlan pillanatképét is tartalmazza, beleértve a szerelvényhivatkozásokat, a fordítóbeállításokat és a forráskódfájlokat. Két különböző API van, amelyek a C# nyelvet és a Visual Basic nyelvet jelölik. A két API hasonló formában van, de az egyes nyelvekhez igazodik. Ez a réteg nem függ a Visual Studio-összetevőkhöz.

Diagnosztikai API-k

Az elemzés részeként a fordító számos diagnosztikát hozhat létre, amelyek a szintaxistól, szemantikai és határozott hozzárendelési hibáktól kezdve a különböző figyelmeztetésekig és információs diagnosztikákig mindent lefednek. A Compiler API-réteg egy bővíthető API-n keresztül teszi elérhetővé a diagnosztikát, amely lehetővé teszi a felhasználó által definiált elemzők csatlakoztatását a fordítási folyamathoz. Lehetővé teszi a felhasználó által definiált diagnosztikát, például a StyleCophoz hasonló eszközök által előállított diagnosztikát a fordító által definiált diagnosztikák mellett. A diagnosztikák ily módon történő előállításának előnye, hogy természetes módon integrálható olyan eszközökkel, mint az MSBuild és a Visual Studio, amelyek olyan szolgáltatások diagnosztikáitól függenek, mint például a szabályzaton alapuló build leállítása és az élő hullámos váltások megjelenítése a szerkesztőben, és kódjavítások javasolása.

Szkriptelési API-k

Az üzemeltetési és szkriptelési API-k a fordítórétegre épülnek. A szkriptelési API-k segítségével kódrészleteket futtathat, és futásidejű végrehajtási környezetet halmozhat fel. A C# interaktív REPL (Read-Evaluate-Print Loop) ezeket az API-kat használja. A REPL lehetővé teszi a C# szkriptnyelvként való használatát, és interaktívan futtathatja a kódot írás közben.

Munkaterületek API-k

A Munkaterületek réteg tartalmazza a Workspace API-t, amely a kódelemzés és a teljes megoldások újrabontásának kiindulópontja. Segít abban, hogy a megoldás projektjeivel kapcsolatos összes információt egyetlen objektummodellbe rendezhesse, így közvetlen hozzáférést biztosít a fordítóréteg objektummodelljeihez anélkül, hogy fájlokat kellene elemeznie, beállításokat konfigurálnia vagy projektközi függőségeket kellene kezelnie.

A Munkaterületek réteg emellett olyan API-kat is felszínre hoz, amelyeket kódelemzés és újrabontási eszközök implementálásakor használnak egy gazdagépkörnyezetben, például a Visual Studio IDE-ben. Ilyenek például az Összes hivatkozás keresése, a Formázás és a Kódgenerálás API-k.

Ez a réteg nem függ a Visual Studio-összetevőkhöz.