Memahami model .NET Compiler Platform SDK
Kompilator memproses kode yang Anda tulis mengikuti aturan terstruktur yang sering kali berbeda dari cara manusia membaca dan memahami kode. Pemahaman dasar tentang model yang digunakan oleh kompilator sangat penting untuk memahami API yang Anda gunakan saat membangun alat berbasis Roslyn.
Area fungsional alur kompilator
.NET Compiler Platform SDK memaparkan analisis kode C# dan Visual Basic kompilator kepada Anda sebagai konsumen dengan menyediakan lapisan API yang mencerminkan alur kompilator tradisional.
Setiap fase alur ini adalah sebuah komponen terpisah. Pertama, fase penguraian membuat tokenisasi dan mengurai teks sumber ke dalam sintaksis yang mengikuti tata bahasa komputer. Kedua, fase deklarasi menganalisis sumber dan metadata yang diimpor untuk membentuk simbol bernama. Selanjutnya, fase ikatan cocok dengan pengidentifikasi dalam kode dengan simbol. Akhirnya, fase pemancar memancarkan perakitan dengan semua informasi yang dibangun oleh kompilator.
Sesuai dengan masing-masing fase tersebut, .NET Compiler Platform SDK mengekspos model objek yang memungkinkan akses ke informasi pada fase tersebut. Fase penguraian menunjukkan pohon sintaksis, fase deklarasi memperlihatkan tabel simbol hierarkis, fase pengikatan memperlihatkan hasil analisis semantik kompilator, dan fase pemancaran adalah API yang menghasilkan kode byte IL.
Setiap kompilator menggabungkan komponen-komponen ini bersama-sama sebagai satu kesatuan end-to-end.
API ini sama dengan yang digunakan oleh Visual Studio. Misalnya, fitur kerangka kode dan pemformatan menggunakan pohon sintaks, Browser Objek, dan fitur navigasi menggunakan tabel simbol, pemfaktoran ulang, dan Buka Definisi menggunakan model semantik, dan Edit dan Lanjutkan menggunakan semua ini, termasuk API Emit.
Lapisan API
.NET kompilator SDK terdiri dari beberapa lapisan API: API kompilator, API diagnostik, API skrip, dan API ruang kerja.
API Kompilator
Lapisan kompilator berisi model objek yang sesuai dengan informasi yang diperlihatkan pada setiap fase alur kompilator, baik sintaksis maupun semantik. Lapisan kompilator juga berisi snapshot yang tidak dapat diubah dari satu permintaan kompilator, termasuk referensi perakitan, opsi kompilator, dan file kode sumber. Ada dua API berbeda yang mewakili bahasa komputer C# dan bahasa Visual Basic. Kedua API ini memiliki bentuk yang serupa tetapi disesuaikan untuk keakuratan yang tinggi untuk masing-masing bahasa komputer. Lapisan ini tidak memiliki ketergantungan pada komponen Visual Studio.
API Diagnostik
Sebagai bagian dari analisisnya, kompilator dapat menghasilkan serangkaian diagnostik yang mencakup segala sesuatu mulai dari kesalahan sintaks, semantik, dan penugasan pasti hingga berbagai peringatan dan diagnostik informasi. Lapisan API Kompilator memperlihatkan diagnostik melalui API yang dapat diperluas yang memungkinkan analis yang ditentukan pengguna untuk dicolokkan ke dalam proses kompilasi. Hal ini memungkinkan diagnostik yang ditentukan pengguna, seperti yang dihasilkan oleh alat seperti StyleCop, untuk diproduksi bersama diagnostik yang ditentukan oleh kompilator. Memproduksi diagnostik dengan cara ini berguna untuk mengintegrasikan secara alami dengan alat seperti MSBuild dan Visual Studio, yang bergantung pada diagnostik untuk pengalaman seperti menghentikan build berdasarkan kebijakan dan menampilkan pergeseran langsung di editor dan menyarankan perbaikan kode.
Skrip API
API hosting dan scripting dibangun di atas lapisan kompilator. Anda dapat menggunakan API pembuatan skrip untuk menjalankan cuplikan kode dan mengakumulasi konteks eksekusi runtime. REPL (Read-Evaluate-Print Loop) interaktif C# menggunakan API ini. REPL memungkinkan Anda menggunakan C# sebagai bahasa skrip, menjalankan kode secara interaktif saat Anda menulisnya.
API Ruang Kerja
Lapisan Ruang Kerja berisi API Ruang Kerja, yang merupakan titik awal untuk melakukan analisis kode dan pemfaktoran ulang atas seluruh solusi. Ini membantu Anda dalam mengatur semua informasi tentang proyek dalam solusi ke dalam model objek tunggal, menawarkan akses langsung ke model objek lapisan kompilator tanpa perlu mengurai file, mengonfigurasi opsi, atau mengelola dependensi proyek-ke-proyek.
Selain itu, lapisan Ruang Kerja menampilkan sekumpulan API yang digunakan saat menerapkan analisis kode dan alat pemfaktoran ulang yang berfungsi dalam lingkungan host seperti Visual Studio IDE. Contohnya termasuk API Temukan Semua Referensi, Pemformatan, dan Pembuatan Kode.
Lapisan ini tidak memiliki ketergantungan pada komponen Visual Studio.