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.

a fordítófolyamat forráskódjának objektumkódra történő feldolgozásának lépései

A folyamat minden fázisa külön komponens. 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 összekapcsolja a kódban szereplő azonosítókat a szimbólumokkal. 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.

A compiler pipeline API hozzáférést biztosít a fordítófolyamat részét képező minden egyes lépéshez

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

a fordítói api-ból elérhető nyelvi szolgáltatások a fordítófolyamat minden egyes lépésénél

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ó felépítésű, de magas hűséggel, személyre szabottan igazodik az egyes nyelvekhez. 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 diagnosztikákra támaszkodnak az olyan funkciókhoz, mint például a szabályzaton alapuló build leállítása, valamint az élő hibajelölések 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 elérhetővé tesz egy API-készletet, amelyet kódelemző és kód átalakító eszközök implementálásakor használnak olyan gazdagépkörnyezetben, mint például a Visual Studio IDE. 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.