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