Tahapan Penyusun dengan Contoh

Daftar Isi:

Anonim

Apa Tahapan Desain Penyusun?

Kompilator beroperasi dalam berbagai fase, setiap fase mengubah program sumber dari satu representasi ke representasi lainnya. Setiap fase mengambil input dari tahap sebelumnya dan memasukkan outputnya ke fase compiler berikutnya.

Ada 6 fase dalam sebuah compiler. Setiap fase ini membantu dalam mengonversi bahasa tingkat tinggi ke kode mesin. Tahapan dari compiler adalah:

  1. Analisis leksikal
  2. Analisis sintaks
  3. Analisis semantik
  4. Pembuat kode menengah
  5. Pengoptimal kode
  6. Generator kode
Tahapan Penyusun

Semua fase ini mengubah kode sumber dengan membaginya menjadi token, membuat pohon parse, dan mengoptimalkan kode sumber dengan fase yang berbeda.

Dalam tutorial ini, Anda akan mempelajari:

  • Apa Tahapan Desain Penyusun?
  • Tahap 1: Analisis Leksikal
  • Tahap 2: Analisis Sintaks
  • Tahap 3: Analisis Semantik
  • Fase 4: Pembuatan Kode Menengah
  • Tahap 5: Pengoptimalan Kode
  • Tahap 6: Pembuatan Kode
  • Manajemen Tabel Simbol
  • Rutin Penanganan Kesalahan:

Tahap 1: Analisis Leksikal

Analisis Leksikal adalah tahap pertama ketika kompilator memindai kode sumber. Proses ini dapat dilakukan dari kiri ke kanan, karakter demi karakter, dan mengelompokkan karakter tersebut menjadi token.

Di sini, aliran karakter dari program sumber dikelompokkan dalam urutan yang bermakna dengan mengidentifikasi token. Itu membuat entri tiket yang sesuai ke dalam tabel simbol dan meneruskan token itu ke fase berikutnya.

Fungsi utama dari fase ini adalah:

  • Identifikasi unit leksikal dalam kode sumber
  • Klasifikasikan unit leksikal ke dalam kelas-kelas seperti konstanta, kata-kata yang dipesan, dan masukkan dalam tabel yang berbeda. Ini akan mengabaikan komentar di program sumber
  • Identifikasi token yang bukan bagian dari bahasa

Contoh :

x = y + 10

Token

X pengenal
= Operator penugasan
Y pengenal
+ Operator tambahan
10 Jumlah

Tahap 2: Analisis Sintaks

Analisis sintaks adalah tentang menemukan struktur dalam kode. Ini menentukan apakah teks mengikuti format yang diharapkan atau tidak. Tujuan utama dari fase ini adalah untuk memastikan bahwa kode sumber yang ditulis oleh programmer benar atau tidak.

Analisis sintaks didasarkan pada aturan yang didasarkan pada bahasa pemrograman tertentu dengan membangun pohon parse dengan bantuan token. Ini juga menentukan struktur bahasa sumber dan tata bahasa atau sintaks bahasa.

Berikut, daftar tugas yang dilakukan dalam fase ini:

  • Dapatkan token dari penganalisis leksikal
  • Memeriksa apakah ekspresi secara sintaksis benar atau tidak
  • Laporkan semua kesalahan sintaks
  • Buat struktur hierarki yang dikenal sebagai pohon parse

Contoh

Pengenal / nomor apa pun adalah ekspresi

Jika x adalah pengenal dan y + 10 adalah ekspresi, maka x = y + 10 adalah pernyataan.

Pertimbangkan pohon parse untuk contoh berikut

(a+b)*c

Di Parse Tree

  • Node interior: rekam dengan operator diajukan dan dua file untuk anak-anak
  • Daun: catatan dengan 2 / lebih bidang; satu untuk token dan informasi lain tentang token
  • Pastikan bahwa komponen program cocok satu sama lain secara bermakna
  • Mengumpulkan informasi tipe dan memeriksa kompatibilitas tipe
  • Operand cek diizinkan oleh bahasa sumber

Tahap 3: Analisis Semantik

Analisis semantik memeriksa konsistensi semantik kode. Ini menggunakan pohon sintaks dari fase sebelumnya bersama dengan tabel simbol untuk memverifikasi bahwa kode sumber yang diberikan konsisten secara semantik. Ini juga memeriksa apakah kode tersebut menyampaikan makna yang sesuai.

Penganalisis Semantik akan memeriksa ketidakcocokan Jenis, operan yang tidak kompatibel, fungsi yang dipanggil dengan argumen yang tidak tepat, variabel yang tidak dideklarasikan, dll.

Fungsi fase analisis Semantik adalah:

  • Membantu Anda menyimpan informasi jenis yang dikumpulkan dan menyimpannya dalam tabel simbol atau pohon sintaks
  • Memungkinkan Anda untuk melakukan pemeriksaan jenis
  • Dalam kasus ketidakcocokan tipe, di mana tidak ada aturan koreksi tipe yang tepat yang memenuhi operasi yang diinginkan, kesalahan semantik akan ditampilkan
  • Mengumpulkan informasi tipe dan memeriksa kompatibilitas tipe
  • Memeriksa apakah bahasa sumber mengizinkan operan atau tidak

Contoh

float x = 20.2;float y = x*30;

Pada kode di atas, penganalisis semantik akan mengetikkan bilangan bulat 30 hingga mengambang 30,0 sebelum perkalian

Fase 4: Pembuatan Kode Menengah

Setelah fase analisis semantik selesai compiler, menghasilkan kode perantara untuk mesin target. Ini mewakili program untuk beberapa mesin abstrak.

Kode perantara adalah antara bahasa tingkat tinggi dan bahasa tingkat mesin. Kode perantara ini perlu dibuat sedemikian rupa sehingga memudahkan untuk menerjemahkannya ke dalam kode mesin target.

Fungsi pembuatan Kode Menengah:

  • Ini harus dihasilkan dari representasi semantik dari program sumber
  • Menyimpan nilai yang dihitung selama proses penerjemahan
  • Membantu Anda menerjemahkan kode perantara ke dalam bahasa target
  • Memungkinkan Anda mempertahankan urutan prioritas bahasa sumber
  • Ini memegang jumlah operan yang benar dari instruksi

Contoh

Sebagai contoh,

total = count + rate * 5

Kode perantara dengan bantuan metode kode alamat adalah:

t1 := int_to_float(5)t2 := rate * t1t3 := count + t2total := t3

Tahap 5: Pengoptimalan Kode

Fase selanjutnya adalah optimasi kode atau kode Intermediate. Fase ini menghapus baris kode yang tidak perlu dan mengatur urutan pernyataan untuk mempercepat eksekusi program tanpa membuang sumber daya. Tujuan utama dari fase ini adalah untuk memperbaiki kode perantara untuk menghasilkan kode yang berjalan lebih cepat dan menempati lebih sedikit ruang.

Fungsi utama dari fase ini adalah:

  • Ini membantu Anda menetapkan trade-off antara eksekusi dan kecepatan kompilasi
  • Meningkatkan waktu berjalan dari program target
  • Menghasilkan kode yang disederhanakan masih dalam representasi perantara
  • Menghapus kode yang tidak dapat dijangkau dan menyingkirkan variabel yang tidak digunakan
  • Menghapus pernyataan yang tidak diubah dari loop

Contoh:

Perhatikan kode berikut

a = intofloat(10)b = c * ad = e + bf = d

Bisa menjadi

b =c * 10.0f = e+b

Tahap 6: Pembuatan Kode

Pembuatan kode adalah fase terakhir dan terakhir dari sebuah kompilator. Itu mendapat masukan dari fase pengoptimalan kode dan menghasilkan kode halaman atau kode objek sebagai hasilnya. Tujuan dari fase ini adalah untuk mengalokasikan penyimpanan dan menghasilkan kode mesin yang dapat direlokasi.

Ini juga mengalokasikan lokasi memori untuk variabel. Instruksi dalam kode perantara diubah menjadi instruksi mesin. Fase ini mencakup kode pengoptimalan atau perantara ke dalam bahasa target.

Bahasa target adalah kode mesin. Oleh karena itu, semua lokasi memori dan register juga dipilih dan dialokasikan selama fase ini. Kode yang dihasilkan oleh fase ini dijalankan untuk mengambil masukan dan menghasilkan keluaran yang diharapkan.

Contoh:

a = b + 60,0

Mungkin akan diterjemahkan ke register.

MOVF a, R1MULF #60.0, R2ADDF R1, R2

Manajemen Tabel Simbol

Tabel simbol berisi catatan untuk setiap pengenal dengan bidang untuk atribut pengenal. Komponen ini memudahkan kompiler untuk mencari record pengenal dan mengambilnya dengan cepat. Tabel simbol juga membantu Anda untuk manajemen lingkup. Tabel simbol dan penangan kesalahan berinteraksi dengan semua fase dan pembaruan tabel simbol secara bersamaan.

Rutin Penanganan Kesalahan:

Dalam proses desain kompilator, kesalahan dapat terjadi di semua fase yang diberikan di bawah ini:

  • Penganalisis leksikal: Token yang dieja salah
  • Penganalisis sintaks: Tanda kurung tidak ada
  • Pembuat kode perantara: Operand yang tidak cocok untuk operator
  • Pengoptimal Kode: Ketika pernyataan itu tidak dapat dijangkau
  • Pembuat Kode: Pernyataan tidak dapat dijangkau
  • Tabel simbol: Kesalahan beberapa pengenal yang dideklarasikan

Kesalahan paling umum adalah urutan karakter tidak valid dalam pemindaian, urutan token tidak valid dalam jenis, kesalahan cakupan, dan penguraian dalam analisis semantik.

Kesalahan mungkin ditemukan pada salah satu fase di atas. Setelah menemukan kesalahan, fase perlu menangani kesalahan untuk melanjutkan proses kompilasi. Kesalahan ini perlu dilaporkan ke penangan kesalahan yang menangani kesalahan untuk melakukan proses kompilasi. Umumnya kesalahan dilaporkan dalam bentuk pesan.

Ringkasan

  • Kompilator beroperasi dalam berbagai fase, setiap fase mengubah program sumber dari satu representasi ke representasi lainnya
  • Enam tahap desain compiler adalah 1) Analisis leksikal 2) Analisis sintaksis 3) Analisis semantik 4) Penghasil kode perantara 5) Pengoptimal kode 6) Penghasil Kode
  • Analisis Leksikal adalah tahap pertama ketika kompilator memindai kode sumber
  • Analisis sintaks adalah tentang menemukan struktur dalam teks
  • Analisis semantik memeriksa konsistensi semantik kode
  • Setelah fase analisis semantik selesai compiler, buat kode perantara untuk mesin target
  • Fase pengoptimalan kode menghapus baris kode yang tidak perlu dan mengatur urutan pernyataan
  • Fase pembuatan kode mendapatkan input dari fase pengoptimalan kode dan menghasilkan kode halaman atau kode objek sebagai hasilnya
  • Tabel simbol berisi catatan untuk setiap pengenal dengan bidang untuk atribut pengenal
  • Penanganan kesalahan rutin menangani kesalahan dan laporan selama banyak fase