Udostępnij za pomocą


Omówienie modelu zestawu SDK platformy kompilatora platformy .NET

Kompilatory przetwarzają kod, który piszesz zgodnie z regułami ustrukturyzowanymi, które często różnią się od sposobu odczytywania i interpretowania kodu przez ludzi. Podstawowa wiedza na temat modelu używanego przez kompilatory jest niezbędna do zrozumienia interfejsów API używanych podczas tworzenia narzędzi opartych na platformie Roslyn.

Obszary funkcjonalne potoku kompilatora

Zestaw SDK platformy kompilatora .NET udostępnia analizę kodu kompilatorów języka C# i Visual Basic użytkownikowi, zapewniając warstwę interfejsu API, która odzwierciedla tradycyjny przepływ pracy kompilatora.

etapy przetwarzania kodu źródłowego przez potok kompilatora na kod obiektowy

Każda faza tego procesu jest oddzielnym komponentem. Najpierw faza analizowania tokenizuje i analizuje tekst źródłowy w składni, która jest zgodna z gramatyką języka. Po drugie, faza deklaracji analizuje źródło i zaimportowane metadane w celu utworzenia nazwanych symboli. Następnie faza powiązania dopasuje identyfikatory w kodzie do symboli. Na koniec faza emisji emituje zestaw ze wszystkimi informacjami utworzonymi przez kompilator.

Interfejs API potoku kompilatora zapewnia dostęp do każdego kroku będącego częścią potoku kompilatora

Odpowiadający każdej z tych faz zestaw SDK platformy kompilatora .NET uwidacznia model obiektów, który umożliwia dostęp do informacji w tej fazie. Faza analizowania uwidacznia drzewo składni, faza deklaracji uwidacznia tabelę symboli hierarchicznych, faza powiązania uwidacznia wynik semantycznej analizy kompilatora, a faza emisji jest interfejsem API, który generuje kody bajtów IL.

usługi językowe dostępne z interfejsu API kompilatora na każdym etapie procesu kompilacji

Każdy kompilator łączy te składniki razem jako całościową całość.

Te interfejsy API są tymi samymi, które są używane przez program Visual Studio. Na przykład funkcje tworzenia i formatowania kodu używają drzew składni, przeglądarka obiektów i funkcje nawigacji korzystają z tabeli symboli, refaktoryzacja i Przejdź do definicji korzystają z modelu semantycznego, a funkcja Edytuj i kontynuuj korzysta ze wszystkich tych elementów, w tym API Emit.

Warstwy interfejsu API

Zestaw SDK kompilatora platformy .NET składa się z kilku warstw interfejsów API: interfejsów API kompilatora, interfejsów API diagnostycznych, interfejsów API skryptów i interfejsów API obszarów roboczych.

API kompilatora

Warstwa kompilatora zawiera modele obiektów, które odpowiadają informacjom udostępnianym w każdej fazie potoku kompilatora, zarówno składniowego, jak i semantycznego. Warstwa kompilacji zawiera również niezmienną migawkę pojedynczego wywołania kompilatora, obejmującą referencje do bibliotek, opcje kompilacji i pliki kodu źródłowego. Istnieją dwa odrębne interfejsy API reprezentujące język C# i język Visual Basic. Dwa interfejsy API są podobne w kształcie, ale dopasowane z dużą dokładnością do każdego języka. Ta warstwa nie ma zależności od składników programu Visual Studio.

Diagnostyczne interfejsy API

W ramach analizy kompilator może utworzyć zestaw diagnostyki obejmujący wszystko, od składni, semantyki i określonych błędów przypisania do różnych ostrzeżeń i diagnostyki informacyjnej. Warstwa interfejsu API kompilatora uwidacznia diagnostykę za pośrednictwem rozszerzalnego interfejsu API, który umożliwia podłączanie analizatorów zdefiniowanych przez użytkownika do procesu kompilacji. Umożliwia ona tworzenie diagnostyki zdefiniowanej przez użytkownika, takiej jak te generowane przez narzędzia, takie jak StyleCop, wraz z diagnostyką zdefiniowaną przez kompilator. Tworzenie diagnostyki w taki sposób ma tę zaletę, że integruje się naturalnie z narzędziami, takimi jak MSBuild i Visual Studio, które są zależne od diagnostyki w sytuacjach takich jak zatrzymywanie kompilacji na podstawie zasad, pokazywanie bieżących podkreśleń błędów w edytorze oraz sugerowanie poprawek kodu.

API skryptowe

Interfejsy API hostingu i skryptów są opracowane na podstawie warstwy kompilatora. Za pomocą interfejsów API skryptów można uruchamiać fragmenty kodu i gromadzić kontekst wykonywania. Interaktywne środowisko REPL języka C# (pętla read-Evaluate-Print) używa tych interfejsów API. Funkcja REPL umożliwia używanie języka C# jako języka skryptowego, uruchamiając kod interaktywnie podczas jego pisania.

Interfejsy API przestrzeni roboczych

Warstwa Obszarów Roboczych zawiera interfejs API obszaru roboczego, który jest punktem wyjścia do wykonywania analizy kodu i refaktoryzacji w ramach całych projektów. Ułatwia ona organizowanie wszystkich informacji o projektach w rozwiązaniu w ramach pojedynczego modelu obiektów, oferując bezpośredni dostęp do modeli obiektów warstwy kompilatora bez konieczności analizowania plików, konfigurowania opcji lub zarządzania zależnościami między projektami.

Ponadto warstwa Obszary robocze przedstawia zestaw interfejsów API używanych podczas implementowania analizy kodu i refaktoryzacji narzędzi, które działają w środowisku hosta, takim jak środowisko IDE programu Visual Studio. Przykłady obejmują interfejsy API do znajdowania wszystkich odwołań, formatowania oraz generowania kodu.

Ta warstwa nie ma zależności od składników programu Visual Studio.