Perisian sistem yang memproses program sumber bahasa peringkat tinggi menjadi program sasaran ialah "pengkompil". Pengkompil merujuk kepada program terjemahan yang menterjemah program sumber yang ditulis dalam bahasa pengaturcaraan peringkat tinggi kepada program sasaran yang setara dalam format bahasa mesin. Proses kerja penyusun untuk menterjemah program sumber kepada program sasaran dibahagikan kepada lima peringkat: analisis sintaks perantaraan; Analisis, jika terdapat kesalahan tatabahasa semasa analisis, mesej segera akan diberikan.
Persekitaran pengendalian tutorial ini: sistem Windows 7, komputer Dell G3.
Perisian sistem yang boleh memproses atur cara sumber yang ditulis dalam bahasa peringkat tinggi ke dalam atur cara sasaran ialah "pengkompil".
Pengkompil, menyusun atur cara, juga dipanggil pengkompil, merujuk kepada program terjemahan yang menterjemahkan atur cara sumber yang ditulis dalam bahasa pengaturcaraan peringkat tinggi ke dalam program sasaran format bahasa mesin yang setara . Penyusun ialah program terjemahan yang dilaksanakan menggunakan pendekatan pelaksanaan generatif. Ia memerlukan program sumber yang ditulis dalam bahasa pengaturcaraan peringkat tinggi sebagai input, dan program sasaran yang dinyatakan dalam bahasa himpunan atau bahasa mesin sebagai output. Program sasaran yang disusun biasanya juga melalui peringkat berjalan untuk berjalan dengan sokongan program berjalan, memproses data awal, dan mengira hasil pengiraan yang diperlukan.
Pengkompil mesti menganalisis atur cara sumber dan kemudian mensintesiskannya ke dalam atur cara sasaran. Pertama, semak ketepatan program sumber dan menguraikannya kepada beberapa komponen asas, kedua, wujudkan bahagian program sasaran yang sepadan berdasarkan komponen asas ini. Untuk menyelesaikan tugasan ini, pengkompil mesti mencipta beberapa jadual semasa fasa analisis dan mengubah atur cara sumber kepada bentuk bahasa perantaraan supaya ia boleh dirujuk dan diproses dengan mudah semasa analisis dan sintesis.
Ciri-ciri pengkompil:
Pengkompil mesti menganalisis atur cara sumber dan kemudian mensintesiskannya ke dalam program sasaran. Pertama, semak ketepatan program sumber dan menguraikannya kepada beberapa komponen asas, kedua, wujudkan bahagian program sasaran yang sepadan berdasarkan komponen asas ini. Untuk menyelesaikan tugasan ini, pengkompil mesti mencipta beberapa jadual semasa fasa analisis dan mengubah atur cara sumber kepada bentuk bahasa perantaraan supaya ia boleh dirujuk dan diproses dengan mudah semasa analisis dan sintesis.
Struktur data utama yang digunakan dalam analisis dan sintesis struktur data, termasuk jadual simbol, jadual malar dan atur cara bahasa perantaraan. Jadual simbol terdiri daripada pengecam yang digunakan dalam program sumber bersama-sama dengan atributnya, yang termasuk jenis (seperti pembolehubah, tatasusunan, struktur, fungsi, prosedur, dll.), jenis (seperti integer, jenis sebenar, rentetan, jenis kompleks, label) dsb.), dan maklumat lain yang diperlukan oleh program sasaran. Jadual pemalar terdiri daripada pemalar yang digunakan dalam program sumber, termasuk perwakilan mesin bagi pemalar, dan alamat program sasaran yang diberikan kepada mereka. Program bahasa perantaraan ialah bentuk perantaraan program yang diperkenalkan sebelum menterjemah program sumber ke dalam program sasaran Pilihan perwakilannya bergantung pada cara pengkompil akan menggunakan dan memprosesnya kemudian. Bentuk bahasa perantaraan yang biasa digunakan termasuk perwakilan Poland, tiga kali ganda, empat kali ganda dan tiga kali ganda tidak langsung.
Analisis sebahagian daripada program sumber dicapai melalui tiga langkah: analisis leksikal, analisis sintaksis dan analisis semantik. Analisis leksikal dilengkapkan dengan program analisis leksikal (juga dipanggil pengimbas), yang tugasnya adalah untuk mengenal pasti perkataan (iaitu pengecam, pemalar, perkataan terpelihara, dan pelbagai operator, tanda baca, dll.), mencipta jadual simbol dan jadual tetap, dan convert Program sumber ditukar kepada bentuk dalaman yang mudah dianalisis dan diproses oleh pengkompil. Penganalisis sintaks ialah bahagian teras pengkompil Tugas utamanya adalah untuk memeriksa sama ada program sumber adalah tatabahasa mengikut peraturan tatabahasa bahasa. Jika ia tidak gramatis, mesej ralat sintaks akan dikeluarkan; jika ia adalah tatabahasa, struktur tatabahasa program sumber akan terurai dan program dalaman dalam bentuk bahasa perantaraan akan dibina. Tujuan analisis tatabahasa adalah untuk memahami bagaimana perkataan membentuk ayat dan bagaimana pernyataan membentuk atur cara. Program analisis semantik selanjutnya menyemak ketepatan semantik struktur program undang-undang Tujuannya adalah untuk memastikan penggunaan pengecam dan pemalar yang betul, mengumpul dan menyimpan maklumat yang diperlukan ke dalam jadual simbol atau program bahasa perantaraan, dan melaksanakan pemprosesan semantik yang sepadan.
Proses kerja pengkompil
Pengkompil juga dipanggil sistem penyusunan, yang menterjemahkan atur cara sumber berorientasikan proses yang ditulis dalam bahasa peringkat ke dalam pemproses bahasa program sasaran. Proses pengkompil untuk menterjemah program sumber kepada program sasaran dibahagikan kepada lima peringkat: analisis sintaks perantaraan; Ia terutamanya menjalankan analisis leksikal dan analisis sintaks, juga dikenali sebagai analisis program sumber Semasa proses analisis, ralat tatabahasa ditemui dan maklumat segera diberikan.
(1) Analisis leksikal
Tugas analisis leksikal ialah memproses perkataan yang terdiri daripada aksara, mengimbas aksara program sumber mengikut aksara dari kiri ke kanan, Menghasilkan perkataan simbol satu demi satu, dan mengubah atur cara sumber sebagai rentetan menjadi atur cara perantaraan rentetan simbol perkataan. Program yang melakukan analisis leksikal dipanggil lexer atau pengimbas.
Simbol perkataan dalam program sumber dianalisis oleh pengimbas dan secara amnya menghasilkan formula binari: kategori perkataan; Kategori perkataan biasanya dikodkan dengan integer Jika kategori mengandungi hanya satu simbol perkataan, maka untuk simbol perkataan ini, pengekodan kategori mewakili nilainya sendiri. Jika kategori mengandungi banyak simbol perkataan, maka bagi setiap simbol perkataannya, sebagai tambahan kepada kod kategori, nilainya sendiri juga perlu diberikan.
Penganalisis leksikal biasanya dibina dalam dua cara: pembinaan manual dan penjanaan automatik. Pembinaan manual boleh berfungsi menggunakan gambar rajah keadaan, penjanaan automatik boleh dilaksanakan menggunakan automata terhingga deterministik.
(2) Analisis sintaksis
Penganalisis sintaks pengkompil mengambil simbol perkataan sebagai input dan menganalisis sama ada rentetan simbol perkataan membentuk unit tatabahasa yang mematuhi tatabahasa peraturan, seperti ungkapan Rumus, tugasan, gelung, dsb., dan akhirnya lihat jika ia membentuk program yang memenuhi keperluan Analisis dan semak sama ada setiap pernyataan mempunyai struktur logik yang betul mengikut peraturan tatabahasa yang digunakan dalam bahasa ialah unit tatabahasa akhir. Peraturan tatabahasa penyusun boleh dicirikan oleh tatabahasa tanpa konteks.
Terdapat dua kaedah analisis sintaks: analisis atas ke bawah dan analisis bawah ke atas. Atas ke bawah bermaksud bermula daripada simbol permulaan tatabahasa, deduksi ke bawah, dan deduksi ayat. Kaedah analisis bawah ke atas menggunakan kaedah pengurangan anjakan masuk Idea asas ialah: gunakan simbol keluar pertama masuk terakhir untuk mengalihkan simbol masukan ke dalam tindanan satu persatu apabila bahagian atas tindanan pengeluaran tertentu Apabila ungkapan calon ditemui, bahagian di bahagian atas tindanan dikurangkan kepada simbol jiran kiri pengeluaran.
(3) Penjanaan kod perantaraan
Kod perantaraan ialah perwakilan dalaman program sumber, atau bahasa perantaraan. Fungsi kod perantaraan adalah untuk menjadikan struktur program yang disusun secara logik lebih mudah dan jelas, terutamanya untuk menjadikan pengoptimuman kod sasaran lebih mudah untuk dilaksanakan. Kod perantaraan ialah program bahasa perantaraan, dan kerumitan bahasa perantaraan adalah antara bahasa program sumber dan bahasa mesin. Terdapat banyak bentuk bahasa perantaraan, yang biasa adalah notasi Poland terbalik, tetragram, bentuk ternary dan pokok.
(4) Pengoptimuman kod
Pengoptimuman kod merujuk kepada melakukan pelbagai transformasi setara pada atur cara supaya bermula daripada program yang diubah, matlamat yang lebih berkesan boleh dijana kod. Persamaan yang dipanggil bermakna bahawa hasil larian program tidak diubah. Apa yang dipanggil berkesan terutamanya merujuk kepada masa berjalan pendek kod sasaran dan ruang penyimpanan kecil yang diduduki. Transformasi ini dipanggil pengoptimuman.
Terdapat dua jenis pengoptimuman: satu adalah untuk mengoptimumkan kod perantaraan selepas analisis sintaks, yang tidak bergantung pada komputer tertentu adalah untuk mengoptimumkan apabila menjana kod sasaran, yang sebahagian besarnya Bergantung pada komputer tertentu. Untuk jenis pengoptimuman dahulu, ia boleh dibahagikan kepada tiga peringkat berbeza: pengoptimuman tempatan, pengoptimuman gelung dan pengoptimuman global mengikut skop program yang terlibat.
(5) Penjanaan kod sasaran
Penjanaan kod sasaran ialah peringkat terakhir penyusunan. Penjana kod sasaran menukar kod perantaraan yang dihuraikan atau dioptimumkan kepada kod sasaran. Terdapat tiga bentuk kod sasaran:
① Kod bahasa mesin yang boleh dilaksanakan serta-merta, semua alamat dipindahkan
② Modul bahasa mesin yang akan dipasang, yang dimuatkan oleh sambungan apabila; pelaksanaan diperlukan Program menghubungkannya dengan atur cara berjalan tertentu dan menukarkannya kepada kod bahasa mesin boleh laku;
Peringkat penjanaan kod sasaran harus mempertimbangkan tiga isu yang secara langsung mempengaruhi kelajuan kod sasaran: pertama, cara menjana kod sasaran yang lebih pendek, kedua, cara menggunakan sepenuhnya daftar dalam komputer dan mengurangkan masa kod sasaran mengakses unit storan kali ketiga ialah cara menggunakan sepenuhnya ciri-ciri sistem arahan komputer untuk meningkatkan kualiti kod sasaran.
Untuk lebih banyak pengetahuan berkaitan, sila lawati ruangan
Soalan LazimAtas ialah kandungan terperinci Apakah perisian sistem yang boleh memproses program sumber bahasa peringkat tinggi ke dalam program sasaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!