Apa itu Analisis Leksikal?
LEXICAL ANALYSIS adalah tahap pertama dalam mendesain compiler. Lexer mengambil kode sumber yang dimodifikasi yang ditulis dalam bentuk kalimat. Dengan kata lain, ini membantu Anda mengubah urutan karakter menjadi urutan token. Penganalisis leksikal memecah sintaks ini menjadi serangkaian token. Ini menghapus spasi ekstra atau komentar yang tertulis dalam kode sumber.
Program yang melakukan analisis leksikal disebut penganalisis leksikal atau lexers. Lexer berisi tokenizer atau pemindai. Jika penganalisis leksikal mendeteksi bahwa token tidak valid, itu menghasilkan kesalahan. Itu membaca aliran karakter dari kode sumber, memeriksa token legal, dan meneruskan data ke penganalisis sintaks saat diminta.
Contoh
How Pleasant Is The Weather?
Lihat contoh ini; Di sini, kita dapat dengan mudah mengenali bahwa ada lima kata Betapa Menyenangkan, Itu, Cuaca, Apakah. Ini sangat wajar bagi kami karena kami dapat mengenali pemisah, kosong, dan simbol tanda baca.
HowPl easantIs Th ewe ather?
Sekarang, periksa contoh ini, kita juga bisa membaca ini. Namun, itu akan memakan waktu lama karena pemisah diletakkan di Tempat Ganjil. Ini bukanlah sesuatu yang langsung datang kepada Anda.
Dalam tutorial ini, Anda akan belajar
- Terminologi Dasar:
- Arsitektur Lexical Analyzer: Bagaimana token dikenali
- Peran penganalisis Leksikal
- Kesalahan Leksikal
- Pemulihan Kesalahan di Lexical Analyzer
- Lexical Analyzer vs. Parser
- Mengapa memisahkan Lexical dan Parser?
- Keuntungan Analisis Leksikal
- Kerugian dari analisis Leksikal
Terminologi Dasar
Apa itu leksem?
Lexeme adalah urutan karakter yang termasuk dalam program sumber sesuai dengan pola yang cocok dari sebuah token. Ini hanyalah contoh dari sebuah token.
Apa itu token?
Token adalah urutan karakter yang mewakili unit informasi dalam program sumber.
Apa itu Pola?
Pola adalah deskripsi yang digunakan oleh token. Dalam kasus kata kunci yang digunakan sebagai token, polanya adalah urutan karakter.
Arsitektur Lexical Analyzer: Bagaimana token dikenali
Tugas utama analisis leksikal adalah membaca karakter input dalam kode dan menghasilkan token.
Penganalisis leksikal memindai seluruh kode sumber program. Ini mengidentifikasi setiap token satu per satu. Scanner biasanya diimplementasikan untuk menghasilkan token hanya jika diminta oleh parser. Inilah cara kerjanya-
- "Dapatkan token berikutnya" adalah perintah yang dikirim dari pengurai ke penganalisis leksikal.
- Saat menerima perintah ini, penganalisis leksikal memindai input hingga menemukan token berikutnya.
- Ini mengembalikan token ke Parser.
Lexical Analyzer melompati spasi dan komentar saat membuat token ini. Jika ada kesalahan, penganalisis Lexical akan menghubungkan kesalahan itu dengan file sumber dan nomor baris.
Peran penganalisis Leksikal
Penganalisis leksikal melakukan tugas-tugas yang diberikan di bawah ini:
- Membantu mengidentifikasi token ke dalam tabel simbol
- Menghapus spasi dan komentar dari program sumber
- Mengkorelasikan pesan kesalahan dengan program sumber
- Membantu Anda memperluas makro jika ditemukan di program sumber
- Baca karakter input dari program sumber
Contoh Analisis Leksikal, Token, Non-Token
Pertimbangkan kode berikut yang diumpankan ke Lexical Analyzer
#includeint maximum(int x, int y) {// This will compare 2 numbersif (x > y)return x;else {return y;}}
Contoh Token dibuat
Lexeme | Token |
int | Kata kunci |
maksimum | Pengenal |
( | Operator |
int | Kata kunci |
x | Pengenal |
, | Operator |
int | Kata kunci |
Y | Pengenal |
) | Operator |
{ | Operator |
Jika | Kata kunci |
Contoh Nontoken
Tipe | Contoh |
Komentar | // Ini akan membandingkan 2 angka |
Petunjuk pra-prosesor | #include |
Petunjuk pra-prosesor | # Tentukan NUMS 8,9 |
Makro | NUMS |
Spasi Putih | / n / b / t |
Kesalahan Leksikal
Urutan karakter yang tidak mungkin dipindai ke dalam token yang valid adalah kesalahan leksikal. Fakta penting tentang kesalahan leksikal:
- Kesalahan leksikal tidak terlalu umum, tetapi harus dikelola oleh pemindai
- Salah eja pengenal, operator, kata kunci dianggap sebagai kesalahan leksikal
- Umumnya, kesalahan leksikal disebabkan oleh kemunculan beberapa karakter ilegal, kebanyakan di awal sebuah token.
Pemulihan Kesalahan di Lexical Analyzer
Berikut, beberapa teknik pemulihan kesalahan yang paling umum:
- Menghapus satu karakter dari input yang tersisa
- Dalam mode panik, karakter yang berurutan selalu diabaikan hingga kami mencapai token yang terbentuk dengan baik
- Dengan memasukkan karakter yang hilang ke input yang tersisa
- Gantikan karakter dengan karakter lain
- Ubah urutan dua karakter serial
Lexical Analyzer vs. Parser
Penganalisis Leksikal | Parser |
Program Input Pindai | Lakukan analisis sintaks |
Identifikasi Token | Buat representasi abstrak dari kode |
Masukkan token ke dalam Tabel Simbol | Perbarui entri tabel simbol |
Ini menghasilkan kesalahan leksikal | Ini menghasilkan pohon parse dari kode sumber |
Mengapa memisahkan Lexical dan Parser?
- Kesederhanaan desain: Ini memudahkan proses analisis leksikal dan analisis sintaks dengan menghilangkan token yang tidak diinginkan
- Untuk meningkatkan efisiensi kompilator: Membantu Anda meningkatkan efisiensi kompilator
- Spesialisasi: teknik khusus dapat diterapkan untuk meningkatkan proses analisis leksikal
- Portabilitas: hanya pemindai yang perlu berkomunikasi dengan dunia luar
- Portabilitas yang lebih tinggi: kekhasan khusus perangkat input terbatas pada lexer
Keuntungan Analisis Leksikal
- Metode penganalisis leksikal digunakan oleh program seperti kompiler yang dapat menggunakan data yang diurai dari kode programmer untuk membuat kode biner yang dapat dieksekusi terkompilasi
- Ini digunakan oleh browser web untuk memformat dan menampilkan halaman web dengan bantuan data parsing dari JavsScript, HTML, CSS
- Penganalisis leksikal terpisah membantu Anda membangun prosesor khusus dan berpotensi lebih efisien untuk tugas tersebut
Kerugian dari analisis Leksikal
- Anda perlu menghabiskan banyak waktu untuk membaca program sumber dan mempartisinya dalam bentuk token
- Beberapa ekspresi reguler cukup sulit dipahami dibandingkan dengan aturan PEG atau EBNF
- Lebih banyak upaya diperlukan untuk mengembangkan dan men-debug lexer dan deskripsi tokennya
- Overhead waktu proses tambahan diperlukan untuk menghasilkan tabel lexer dan membuat token
Ringkasan
- Analisis leksikal adalah tahap pertama dalam perancangan kompiler
- Lexeme adalah urutan karakter yang termasuk dalam program sumber sesuai dengan pola yang cocok dari sebuah token
- Penganalisis leksikal diimplementasikan untuk memindai seluruh kode sumber program
- Penganalisis leksikal membantu mengidentifikasi token ke dalam tabel simbol
- Urutan karakter yang tidak mungkin dipindai ke dalam token yang valid adalah kesalahan leksikal
- Menghapus satu karakter dari input yang tersisa berguna Metode pemulihan kesalahan
- Lexical Analyzer memindai program input sementara parser melakukan analisis sintaks
- Ini memudahkan proses analisis leksikal dan analisis sintaks dengan menghilangkan token yang tidak diinginkan
- Penganalisis leksikal digunakan oleh browser web untuk memformat dan menampilkan halaman web dengan bantuan data parsing dari JavsScript, HTML, CSS
- Kelemahan terbesar menggunakan penganalisis Lexical adalah diperlukan tambahan waktu proses tambahan yang diperlukan untuk menghasilkan tabel lexer dan membuat token