Apa itu Analisis Leksikal?
ANALISIS LEKSIKAL adalah fasa pertama dalam merancang penyusun. Lexer mengambil kod sumber yang diubah suai yang ditulis dalam bentuk ayat. Dengan kata lain, ini membantu anda menukar urutan watak menjadi urutan token. Penganalisis leksikal memecah sintaks ini kepada beberapa siri token. Ia menghilangkan ruang atau komen tambahan yang ditulis dalam kod sumber.
Program yang melakukan analisis leksikal disebut penganalisis leksikal atau lekser. Lexer mengandungi tokenizer atau pengimbas. Sekiranya penganalisis leksikal mengesan bahawa token itu tidak sah, ia menghasilkan ralat. Ia membaca aliran watak dari kod sumber, memeriksa token sah, dan menyampaikan data ke penganalisis sintaks ketika menuntut.
Contohnya
How Pleasant Is The Weather?
Lihat contoh ini; Di sini, kita dapat dengan mudah mengenali bahawa terdapat lima kata Bagaimana Menyenangkan, Yang, Cuaca, Adalah. Ini sangat wajar bagi kita kerana kita dapat mengenali pemisah, kosong, dan simbol tanda baca.
HowPl easantIs Th ewe ather?
Sekarang, periksa contoh ini, kita juga boleh membaca ini. Namun, ia akan memakan masa kerana pemisah diletakkan di Tempat-tempat Ganjil. Ia bukan sesuatu yang segera datang kepada anda.
Dalam tutorial ini, anda akan belajar
- Terminologi Asas:
- Senibina Lexical Analyzer: Bagaimana token dikenali
- Peranan penganalisis Lexical
- Kesalahan Leksikal
- Pemulihan Ralat dalam Lexical Analyzer
- Penganalisis Lexical vs. Parser
- Mengapa memisahkan Lexical dan Parser?
- Kelebihan analisis Lexical
- Kelemahan analisis Lexical
Terminologi Asas
Apa itu lexeme?
Lexeme adalah urutan watak yang disertakan dalam program sumber mengikut corak token yang sepadan. Ia tidak lain hanyalah contoh token.
Apa itu token?
Token adalah urutan watak yang mewakili unit maklumat dalam program sumber.
Apa itu Corak?
Pola adalah keterangan yang digunakan oleh token. Sekiranya kata kunci yang digunakan sebagai token, coraknya adalah urutan watak.
Senibina Lexical Analyzer: Bagaimana token dikenali
Tugas utama analisis leksikal adalah membaca watak input dalam kod dan menghasilkan token.
Penganalisis leksikal mengimbas keseluruhan kod sumber program. Ia mengenal pasti setiap token satu persatu. Pengimbas biasanya dilaksanakan untuk menghasilkan token hanya apabila diminta oleh penghurai. Inilah cara kerjanya-
- "Dapatkan token seterusnya" adalah perintah yang dihantar dari penghurai ke penganalisis leksikal.
- Setelah menerima arahan ini, penganalisis leksikal mengimbas input sehingga mendapat token seterusnya.
- Ia mengembalikan token ke Parser.
Lexical Analyzer melangkau ruang kosong dan komen semasa membuat token ini. Sekiranya terdapat ralat, penganalisis Lexical akan mengaitkan ralat itu dengan fail sumber dan nombor baris.
Peranan penganalisis Lexical
Penganalisis leksikal melakukan tugas di bawah yang diberikan:
- Membantu mengenal pasti token ke dalam jadual simbol
- Mengeluarkan ruang kosong dan komen dari program sumber
- Mengaitkan mesej ralat dengan program sumber
- Membantu anda memperluas makro jika terdapat dalam program sumber
- Baca watak input dari program sumber
Contoh Analisis Leksikal, Token, Bukan Token
Pertimbangkan kod berikut yang diberikan kepada Lexical Analyzer
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Contoh Token yang dibuat
Lexeme | Token |
int | Kata kunci |
maksimum | Pengenal |
( | Pengendali |
int | Kata kunci |
x | Pengenal |
, | Pengendali |
int | Kata kunci |
Y | Pengenal |
) | Pengendali |
{ | Pengendali |
Sekiranya | Kata kunci |
Contoh Nontokens
Jenis | Contoh |
Komen | // Ini akan membandingkan 2 nombor |
Arahan pra-pemproses | #masuklah |
Arahan pra-pemproses | #tentukan NOMBOR 8,9 |
Makro | NOMBOR |
Ruang kosong | / n / b / t |
Kesalahan Leksikal
Urutan watak yang tidak mungkin diimbas ke token yang sah adalah ralat leksikal. Fakta penting mengenai kesalahan leksikal:
- Kesalahan leksikal tidak begitu biasa, tetapi harus diuruskan oleh pengimbas
- Ejaan salah pengecam, operator, kata kunci dianggap sebagai kesalahan leksikal
- Secara amnya, kesalahan leksikal disebabkan oleh kemunculan beberapa watak haram, kebanyakannya pada awal token.
Pemulihan Ralat dalam Lexical Analyzer
Berikut adalah beberapa teknik pemulihan ralat yang paling biasa:
- Mengeluarkan satu watak dari input yang tinggal
- Dalam mod panik, watak berturut-turut selalu diabaikan sehingga kita mencapai tanda yang terbentuk dengan baik
- Dengan memasukkan watak yang hilang ke input yang tinggal
- Gantikan watak dengan watak lain
- Tukar dua watak bersiri
Penganalisis Lexical vs. Parser
Penganalisis Lexical | Pengurai |
Program Input Imbasan | Lakukan analisis sintaks |
Kenalpasti Token | Buat representasi abstrak kod |
Masukkan token ke dalam Jadual Simbol | Kemas kini entri jadual simbol |
Ia menghasilkan kesalahan leksikal | Ini menghasilkan pokok parse dari kod sumber |
Mengapa memisahkan Lexical dan Parser?
- Kesederhanaan reka bentuk: Ini memudahkan proses analisis leksikal dan analisis sintaksis dengan menghilangkan token yang tidak diingini
- Untuk meningkatkan kecekapan penyusun: Membantu anda meningkatkan kecekapan penyusun
- Pengkhususan: teknik khusus dapat diterapkan untuk meningkatkan proses analisis leksikal
- Kemudahalihan: hanya pengimbas yang memerlukan komunikasi dengan dunia luar
- Kemudahalihan yang lebih tinggi: keunikan khusus peranti input yang terhad kepada lexer
Kelebihan analisis Lexical
- Kaedah penganalisis leksikal digunakan oleh program seperti penyusun yang dapat menggunakan data yang dihuraikan dari kod pengaturcara untuk membuat kod boleh laku binari yang disusun
- Ini digunakan oleh penyemak imbas web untuk memformat dan menampilkan halaman web dengan bantuan data yang dihuraikan dari JavsScript, HTML, CSS
- Penganalisis leksikal berasingan membantu anda membina pemproses khusus dan berpotensi lebih cekap untuk tugas tersebut
Kelemahan analisis Lexical
- Anda perlu meluangkan banyak masa untuk membaca program sumber dan membahagikannya dalam bentuk token
- Beberapa ungkapan biasa agak sukar difahami berbanding dengan peraturan PEG atau EBNF
- Lebih banyak usaha diperlukan untuk mengembangkan dan men-debug lexer dan deskripsi tokennya
- Overhead jangka masa tambahan diperlukan untuk menghasilkan jadual lexer dan membina token
Ringkasan
- Analisis leksikal adalah fasa pertama dalam merancang penyusun
- Lexeme adalah urutan watak yang disertakan dalam program sumber mengikut corak token yang sepadan
- Penganalisis leksikal dilaksanakan untuk mengimbas keseluruhan kod sumber program
- Penganalisis leksikal membantu mengenal pasti token ke dalam jadual simbol
- Urutan watak yang tidak mungkin diimbas ke token yang sah adalah ralat leksikal
- Mengeluarkan satu watak dari input yang tersisa berguna Kaedah pemulihan ralat
- Lexical Analyzer mengimbas program input semasa penghurai melakukan analisis sintaks
- Ini memudahkan proses analisis leksikal dan analisis sintaksis dengan menghilangkan token yang tidak diingini
- Penganalisis leksikal digunakan oleh penyemak imbas web untuk memformat dan memaparkan halaman web dengan bantuan data yang dihuraikan dari JavsScript, HTML, CSS
- Kelemahan terbesar menggunakan penganalisis Lexical ialah memerlukan overhead runtime tambahan diperlukan untuk menghasilkan jadual lexer dan membina token