Fasa Penyusun dengan Contoh

Isi kandungan:

Anonim

Apakah Fasa Reka Bentuk Penyusun?

Compiler beroperasi dalam pelbagai fasa setiap fasa mengubah program sumber dari satu perwakilan ke yang lain. Setiap fasa mengambil input dari tahap sebelumnya dan memasukkan outputnya ke fasa penyusun seterusnya.

Terdapat 6 fasa dalam penyusun. Setiap fasa ini membantu menukar kod mesin langue peringkat tinggi. Fasa penyusun adalah:

  1. Analisis leksikal
  2. Analisis sintaks
  3. Analisis semantik
  4. Penjana kod pertengahan
  5. Pengoptimum kod
  6. Penjana kod
Fasa Penyusun

Semua fasa ini mengubah kod sumber dengan membahagi menjadi token, membuat pokok parse, dan mengoptimumkan kod sumber dengan fasa yang berbeza.

Dalam tutorial ini, anda akan belajar:

  • Apakah Fasa Reka Bentuk Penyusun?
  • Fasa 1: Analisis Leksikal
  • Fasa 2: Analisis Sintaks
  • Fasa 3: Analisis Semantik
  • Fasa 4: Penjanaan Kod Pertengahan
  • Fasa 5: Pengoptimuman Kod
  • Fasa 6: Penjanaan Kod
  • Pengurusan Jadual Simbol
  • Ralat Mengendalikan Rutin:

Fasa 1: Analisis Leksikal

Analisis Leksikal adalah fasa pertama ketika penyusun mengimbas kod sumber. Proses ini boleh dibiarkan dari kiri ke kanan, watak demi watak, dan kelompokkan watak-watak ini menjadi token.

Di sini, aliran watak dari program sumber dikelompokkan dalam urutan yang bermakna dengan mengenal pasti token. Ini membuat kemasukan tiket yang sesuai ke dalam jadual simbol dan memberikan tanda itu ke fasa seterusnya.

Fungsi utama fasa ini adalah:

  • Kenal pasti unit leksikal dalam kod sumber
  • Kelaskan unit leksikal ke dalam kelas seperti pemalar, kata terpelihara, dan masukkan dalam jadual yang berbeza. Ia akan Mengabaikan komen dalam program sumber
  • Kenalpasti token yang bukan sebahagian daripada bahasa

Contoh :

x = y + 10

Token

X pengecam
= Pengendali tugasan
Y pengecam
+ Pengendali penambahan
10 Nombor

Fasa 2: Analisis Sintaks

Analisis sintaks adalah mengenai penemuan struktur dalam kod. Ini menentukan sama ada teks mengikut format yang diharapkan atau tidak. Tujuan utama fasa ini adalah untuk memastikan bahawa kod sumber yang ditulis oleh pengaturcara betul atau tidak.

Analisis sintaks dibuat berdasarkan peraturan berdasarkan bahasa pengaturcaraan tertentu dengan membina pokok parse dengan bantuan token. Ia juga menentukan struktur bahasa sumber dan tatabahasa atau sintaks bahasa tersebut.

Berikut adalah senarai tugas yang dilakukan dalam fasa ini:

  • Dapatkan token dari penganalisis leksikal
  • Memeriksa sama ada ungkapan itu betul atau tidak secara sintaksis
  • Laporkan semua kesalahan sintaks
  • Bentukkan struktur hierarki yang dikenali sebagai pokok parse

Contohnya

Mana-mana pengecam / nombor adalah ungkapan

Sekiranya x adalah pengecam dan y + 10 adalah ungkapan, maka x = y + 10 adalah pernyataan.

Pertimbangkan pokok parsial untuk contoh berikut

(a+b)*c

Di Pokok Parse

  • Node dalaman: rakam dengan pengendali yang difailkan dan dua fail untuk kanak-kanak
  • Daun: rekod dengan 2 / lebih bidang; satu untuk token dan maklumat lain mengenai token
  • Pastikan komponen program sesuai dengan bermakna
  • Mengumpulkan maklumat jenis dan memeriksa keserasian jenis
  • Operasi cek dibenarkan oleh bahasa sumber

Fasa 3: Analisis Semantik

Analisis semantik memeriksa konsistensi semantik kod. Ia menggunakan pohon sintaks fasa sebelumnya bersama dengan jadual simbol untuk mengesahkan bahawa kod sumber yang diberikan secara semantik konsisten. Ia juga memeriksa sama ada kod itu menyampaikan makna yang sesuai.

Penganalisis Semantik akan memeriksa ketidakcocokan Jenis, operan yang tidak serasi, fungsi yang dipanggil dengan argumen yang tidak betul, pemboleh ubah yang tidak diisytiharkan, dll.

Fungsi fasa analisis Semantik adalah:

  • Membantu anda menyimpan maklumat jenis yang dikumpulkan dan menyimpannya dalam jadual simbol atau pokok sintaks
  • Membolehkan anda melakukan pemeriksaan jenis
  • Dalam kes ketidakcocokan jenis, di mana tidak ada peraturan pembetulan jenis yang tepat yang memuaskan operasi yang diinginkan, kesalahan semantik ditunjukkan
  • Mengumpulkan maklumat jenis dan memeriksa keserasian jenis
  • Memeriksa sama ada bahasa sumber membenarkan operan atau tidak

Contohnya

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

Dalam kod di atas, penganalisis semantik akan menaip bilangan bulat 30 untuk mengapung 30.0 sebelum pendaraban

Fasa 4: Penjanaan Kod Pertengahan

Setelah fasa analisis semantik selesai penyusun, menghasilkan kod perantaraan untuk mesin sasaran. Ia mewakili program untuk beberapa mesin abstrak.

Kod pertengahan adalah antara bahasa peringkat tinggi dan tahap mesin. Kod perantaraan ini perlu dihasilkan sedemikian rupa sehingga memudahkan untuk menerjemahkannya ke dalam kod mesin sasaran.

Fungsi pada penjanaan Kod Pertengahan:

  • Ia harus dihasilkan dari perwakilan semantik program sumber
  • Memegang nilai yang dikira semasa proses terjemahan
  • Membantu anda menerjemahkan kod perantaraan ke dalam bahasa sasaran
  • Membolehkan anda menjaga urutan bahasa sumber yang diutamakan
  • Ia mengandungi bilangan operasi arahan yang betul

Contohnya

Sebagai contoh,

total = count + rate * 5

Kod pertengahan dengan bantuan kaedah kod alamat adalah:

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

Fasa 5: Pengoptimuman Kod

Fasa seterusnya adalah pengoptimuman kod atau kod Menengah. Fasa ini menghilangkan garis kod yang tidak perlu dan mengatur urutan penyataan untuk mempercepat pelaksanaan program tanpa membuang sumber. Matlamat utama fasa ini adalah untuk memperbaiki kod perantaraan untuk menghasilkan kod yang berjalan lebih cepat dan menempati ruang yang lebih sedikit.

Fungsi utama fasa ini adalah:

  • Ini membantu anda mewujudkan pertukaran antara pelaksanaan dan kelajuan penyusunan
  • Meningkatkan masa berjalan program sasaran
  • Menghasilkan kod yang diperkemas masih dalam perwakilan antara
  • Mengeluarkan kod yang tidak dapat dijangkau dan menyingkirkan pemboleh ubah yang tidak digunakan
  • Menghapus pernyataan yang tidak diubah dari gelung

Contoh:

Pertimbangkan kod berikut

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

Boleh menjadi

b =c * 10.0f = e+b

Fasa 6: Penjanaan Kod

Penjanaan kod adalah fasa terakhir dan terakhir penyusun. Ini mendapat input dari fasa pengoptimuman kod dan menghasilkan kod halaman atau kod objek sebagai hasilnya. Objektif fasa ini adalah untuk memperuntukkan penyimpanan dan menghasilkan kod mesin yang boleh dipindahkan.

Ia juga memperuntukkan lokasi memori untuk pemboleh ubah. Arahan dalam kod perantaraan ditukar menjadi arahan mesin. Fasa ini meliputi kod pengoptimuman atau perantaraan ke dalam bahasa sasaran.

Bahasa sasaran adalah kod mesin. Oleh itu, semua lokasi dan daftar memori juga dipilih dan diberikan selama fasa ini. Kod yang dihasilkan oleh fasa ini dilaksanakan untuk mengambil input dan menghasilkan output yang diharapkan.

Contoh:

a = b + 60.0

Mungkin akan diterjemahkan ke daftar.

MOVF a, R1MULF #60.0, R2ADDF R1, R2

Pengurusan Jadual Simbol

Jadual simbol mengandungi rekod untuk setiap pengecam dengan medan untuk atribut pengecam. Komponen ini memudahkan penyusun untuk mencari rekod pengecam dan mengambilnya dengan cepat. Jadual simbol juga membantu anda dalam pengurusan skop. Jadual simbol dan pengendali ralat berinteraksi dengan semua fasa dan kemas kini jadual simbol.

Ralat Mengendalikan Rutin:

Dalam proses reka bentuk penyusun kesalahan mungkin berlaku dalam semua fasa yang diberikan di bawah:

  • Penganalisis leksikal: Token ejaan yang salah
  • Penganalisis sintaks: Tanda kurung tidak ada
  • Penjana kod pertengahan: Operan yang tidak sesuai untuk pengendali
  • Code Optimizer: Apabila penyataan tidak dapat dicapai
  • Penjana Kod: Penyataan yang tidak dapat dicapai
  • Jadual simbol: Ralat beberapa pengecam yang dinyatakan

Kesalahan yang paling biasa adalah urutan watak yang tidak sah dalam pengimbasan, urutan token yang tidak betul dalam jenis, ralat skop, dan penghuraian dalam analisis semantik.

Kesalahan mungkin berlaku dalam salah satu fasa di atas. Setelah menemui kesilapan, fasa perlu menangani kesalahan untuk meneruskan proses penyusunan. Kesalahan ini perlu dilaporkan kepada pengendali ralat yang menangani kesalahan untuk melakukan proses penyusunan. Secara amnya, kesalahan dilaporkan dalam bentuk pesanan.

Ringkasan

  • Compiler beroperasi dalam pelbagai fasa setiap fasa mengubah program sumber dari satu perwakilan ke yang lain
  • Enam fasa reka bentuk penyusun adalah 1) Analisis leksikal 2) Analisis sintaks 3) Analisis semantik 4) Penjana kod pertengahan 5) Pengoptimum kod 6) Penjana kod
  • Analisis Leksikal adalah fasa pertama ketika penyusun mengimbas kod sumber
  • Analisis sintaks adalah mengenai penemuan struktur dalam teks
  • Analisis semantik memeriksa konsistensi semantik kod
  • Setelah fasa analisis semantik selesai penyusun, buat kod perantaraan untuk mesin sasaran
  • Fasa pengoptimuman kod menghilangkan garis kod yang tidak perlu dan menyusun urutan penyataan
  • Fasa penghasilan kod mendapat input dari fasa pengoptimuman kod dan menghasilkan kod halaman atau kod objek sebagai hasilnya
  • Jadual simbol mengandungi rekod untuk setiap pengecam dengan medan untuk atribut pengecam
  • Kesalahan menangani rutin menangani kesilapan dan laporan semasa banyak fasa