Apa itu Analisis Sintaks?
Analisis Sintaks adalah tahap kedua dari proses desain kompilator di mana string input yang diberikan diperiksa untuk konfirmasi aturan dan struktur tata bahasa formal. Ini menganalisis struktur sintaksis dan memeriksa apakah input yang diberikan dalam sintaks yang benar dari bahasa pemrograman atau tidak.
Analisis Sintaks dalam proses Desain Kompilator dilakukan setelah tahap analisis Leksikal. Ia juga dikenal sebagai Pohon Parse atau Pohon Sintaks. Pohon Parse dikembangkan dengan bantuan tata bahasa bahasa yang telah ditentukan sebelumnya. Penganalisis sintaks juga memeriksa apakah program tertentu memenuhi aturan yang disiratkan oleh tata bahasa bebas konteks. Jika memuaskan, parser kemudian membuat pohon parse dari program sumber itu. Jika tidak, itu akan menampilkan pesan kesalahan.
Dalam tutorial ini, Anda akan belajar
- Mengapa Anda membutuhkan Penganalisis Sintaks?
- Terminologi Penganalisis Sintaks Penting
- Mengapa kita membutuhkan Parsing?
- Teknik Parsing
- Kesalahan - Metode Pemulihan
- Tatabahasa:
- Konvensi Notasional
- Tata Bahasa Bebas Konteks
- Penurunan Tata Bahasa
- Syntax vs. Lexical Analyzer
- Kekurangan menggunakan Syntax Analyzer
Mengapa Anda membutuhkan Penganalisis Sintaks?
- Periksa apakah kode tersebut valid secara tata bahasa
- Penganalisis sintaksis membantu Anda menerapkan aturan pada kode
- Membantu Anda memastikan bahwa setiap kurung kurawal buka memiliki saldo akhir yang sesuai
- Setiap deklarasi memiliki tipe dan tipe tersebut harus ada
Terminologi Penganalisis Sintaks Penting
Terminologi penting yang digunakan dalam proses analisis sintaks:
- Kalimat: Kalimat adalah sekelompok karakter di atas beberapa alfabet.
- Lexeme: Leksem adalah unit sintaksis tingkat terendah dari suatu bahasa (misalnya, total, mulai).
- Token: Token hanyalah salah satu kategori leksem.
- Kata kunci dan kata khusus - Ini adalah pengenal yang digunakan sebagai bagian tetap dari sintaks pernyataan. Ini adalah kata khusus yang tidak dapat Anda gunakan sebagai nama variabel atau pengenal.
- Kata - kata berisik - Kata-kata berisik adalah opsional yang disisipkan dalam pernyataan untuk meningkatkan keterbacaan kalimat.
- Komentar - Ini adalah bagian yang sangat penting dari dokumentasi. Sebagian besar ditampilkan oleh, / * * /, atau // Kosong (spasi)
- Pembatas - Ini adalah elemen sintaksis yang menandai awal atau akhir dari beberapa unit sintaksis. Seperti pernyataan atau ekspresi, "mulai"… '' akhir ", atau {}.
- Kumpulan karakter - ASCII, Unicode
- Pengenal - Ini adalah batasan panjang yang membantu Anda mengurangi keterbacaan kalimat.
- Simbol operator - + dan - melakukan dua operasi aritmatika dasar.
- Elemen sintaksis Bahasa
Mengapa kita membutuhkan Parsing?
Parse juga memeriksa apakah string input terbentuk dengan baik, dan jika tidak, tolak.
Berikut adalah tugas-tugas penting yang dilakukan oleh parser dalam desain kompiler:
- Membantu Anda mendeteksi semua jenis kesalahan Sintaks
- Temukan posisi di mana kesalahan telah terjadi
- Deskripsi kesalahan yang jelas & akurat.
- Pemulihan dari kesalahan untuk melanjutkan dan menemukan kesalahan lebih lanjut dalam kode.
- Seharusnya tidak mempengaruhi kompilasi program yang "benar".
- Parse harus menolak teks yang tidak valid dengan melaporkan kesalahan sintaks
Teknik Parsing
Teknik penguraian dibagi menjadi dua kelompok berbeda:
- Parsing Top-Down,
- Parsing Bottom-Up
Parsing Top-Down:
Pada konstruksi penguraian top-down dari pohon parse dimulai dari akar dan kemudian berlanjut menuju daun.
Dua jenis penguraian Top-down adalah:
- Penguraian Prediktif:
Parse prediktif dapat memprediksi produksi mana yang harus digunakan untuk menggantikan string input tertentu. Pengurai prediktif menggunakan titik pandang ke depan, yang mengarah ke simbol masukan berikutnya. Melacak mundur bukanlah masalah dengan teknik penguraian ini. Ini dikenal sebagai LL (1) Parser
- Penguraian Penurunan Rekursif:
Teknik parsing ini mengurai input secara rekursif untuk membuat pohon prase. Ini terdiri dari beberapa fungsi kecil, satu untuk setiap nonterminal dalam tata bahasa.
Parsing Bottom-Up:
Dalam penguraian bottom up dalam desain kompiler, konstruksi pohon parse dimulai dengan daun, dan kemudian diproses menuju akarnya. Ini juga disebut sebagai penguraian shift-kurangi. Jenis penguraian dalam desain kompiler ini dibuat dengan bantuan menggunakan beberapa alat perangkat lunak.
Kesalahan - Metode Pemulihan
Kesalahan Umum yang terjadi dalam Parsing di Perangkat Lunak Sistem
- Leksikal : Nama pengenal yang salah ketik
- Sintaks : tanda kurung tidak seimbang atau titik koma hilang
- Semantik : penetapan nilai tidak kompatibel
- Logis : Loop tak terbatas dan kode yang tidak dapat dijangkau
Seorang parser harus dapat mendeteksi dan melaporkan kesalahan apa pun yang ditemukan dalam program. Jadi, setiap kali terjadi kesalahan parser. Itu harus dapat menanganinya dan melanjutkan parsing input yang tersisa. Suatu program dapat memiliki jenis kesalahan berikut pada berbagai tahapan proses kompilasi. Ada lima metode pemulihan kesalahan umum yang dapat diterapkan di parser
Pemulihan mode pernyataan
- Dalam kasus ketika pengurai menemui kesalahan, itu membantu Anda untuk mengambil langkah-langkah korektif. Ini memungkinkan input dan status lainnya untuk mengurai ke depan.
- Misalnya, menambahkan titik koma yang hilang datang dalam metode pemulihan mode pernyataan. Namun, desainer parse perlu berhati-hati saat membuat perubahan ini karena salah satu koreksi yang salah dapat menyebabkan loop tak terbatas.
Pemulihan Panic-Mode
- Dalam kasus ketika parser menemukan kesalahan, mode ini mengabaikan pernyataan lainnya dan tidak memproses masukan dari masukan yang salah ke pembatas, seperti titik koma. Ini adalah metode pemulihan kesalahan sederhana.
- Dalam jenis metode pemulihan ini, parser menolak simbol input satu per satu hingga satu grup token sinkronisasi yang ditentukan ditemukan. Token sinkronisasi umumnya menggunakan pembatas seperti atau.
Pemulihan Tingkat Frase:
- Compiler mengoreksi program dengan memasukkan atau menghapus token. Ini memungkinkannya untuk melanjutkan mengurai dari tempatnya. Ini melakukan koreksi pada input yang tersisa. Itu dapat menggantikan awalan dari input yang tersisa dengan beberapa string ini membantu parser untuk melanjutkan proses.
Error Productions
- Pemulihan produksi kesalahan memperluas tata bahasa untuk bahasa yang menghasilkan konstruksi yang salah. Pengurai kemudian melakukan diagnosis kesalahan tentang konstruksi itu.
Koreksi Global:
- Kompilator harus membuat lebih sedikit perubahan sebanyak mungkin saat memproses string input yang salah. Diberikan input string a dan tata bahasa c yang salah, algoritme akan mencari pohon parse untuk string terkait b. Seperti beberapa penyisipan, penghapusan, dan modifikasi yang dibuat dari token yang diperlukan untuk mengubah an menjadi b sesedikit mungkin.
Tatabahasa:
Tata bahasa adalah seperangkat aturan struktural yang menggambarkan suatu bahasa. Tata bahasa menetapkan struktur untuk setiap kalimat. Istilah ini juga merujuk pada studi tentang aturan-aturan ini, dan file ini mencakup morfologi, fonologi, dan sintaksis. Ia mampu menggambarkan banyak, dari sintaks bahasa pemrograman.
Aturan Tata Bahasa Bentuk
- Simbol non-terminal harus muncul di sebelah kiri dari setidaknya satu produksi
- Simbol tujuan tidak boleh ditampilkan di sebelah kanan :: = produksi apapun
- Suatu aturan bersifat rekursif jika LHS muncul di RHS-nya
Konvensi Notasional
Simbol konvensi notasi dapat ditunjukkan dengan mengapit elemen dalam tanda kurung siku. Ini adalah urutan sembarang contoh elemen yang dapat ditunjukkan dengan mengapit elemen dalam tanda kurung kurawal diikuti dengan simbol asterisk, {…} *.
Ini adalah pilihan alternatif yang mungkin menggunakan simbol dalam aturan tunggal. Ini mungkin diapit oleh tanda kurung ([,]) bila diperlukan.
Dua jenis area konvensi Notasi Terminal dan Non-terminal
1. terminal:
- Huruf kecil dalam alfabet seperti a, b, c,
- Simbol operator seperti +, -, *, dll.
- Simbol tanda baca seperti tanda kurung, hash, koma
- 0, 1,…, 9 digit
- String huruf tebal seperti id atau if, apa pun yang mewakili simbol terminal tunggal
2. Nonterminal:
- Huruf besar seperti A, B, C
- Nama miring huruf kecil: ekspresi atau beberapa
Tata Bahasa Bebas Konteks
CFG adalah tata bahasa rekursif kiri yang memiliki setidaknya satu jenis produksi. Aturan dalam tata bahasa bebas konteks sebagian besar bersifat rekursif. Penganalisis sintaks memeriksa apakah program tertentu memenuhi semua aturan tata bahasa bebas konteks atau tidak. Jika memenuhi, aturan ini penganalisis sintaks dapat membuat pohon parse untuk program itu.
expression -> expression -+ termexpression -> expression - termexpression-> termterm -> term * factorterm -> expression/ factorterm -> factor factorfactor -> ( expression )factor -> id
Penurunan Tata Bahasa
Derivasi tata bahasa adalah urutan aturan tata bahasa yang mengubah simbol awal menjadi string. Derivasi membuktikan bahwa string tersebut termasuk dalam bahasa tata bahasa.
Penurunan Paling Kiri
Ketika bentuk input sentensial dipindai dan diganti dalam urutan kiri ke kanan, ini dikenal sebagai derivasi paling kiri. Bentuk sentensial yang diturunkan oleh derivasi paling kiri disebut bentuk sentensial kiri.
Penurunan Paling Kanan
Memindai derivasi paling kanan dan mengganti input dengan aturan produksi, dari kanan ke kiri, urutan. Ini dikenal sebagai derivasi paling kanan. Bentuk sentensial yang diturunkan dari derivasi paling kanan dikenal sebagai bentuk sentensial-kanan.
Syntax vs. Lexical Analyzer
Penganalisis Sintaks |
Penganalisis Leksikal |
Penganalisis sintaks terutama menangani konstruksi rekursif bahasa. |
Penganalisis leksikal memudahkan tugas penganalisis sintaks. |
Penganalisis sintaks bekerja pada token dalam program sumber untuk mengenali struktur bermakna dalam bahasa pemrograman. |
Penganalisis leksikal mengenali token dalam program sumber. |
Ia menerima masukan, dalam bentuk token, dari penganalisis leksikal. |
Ini bertanggung jawab atas validitas token yang disediakan oleh penganalisis sintaks |
Kekurangan menggunakan Syntax Analyzer
- Itu tidak akan pernah menentukan apakah token itu valid atau tidak
- Not membantu Anda untuk menentukan apakah operasi yang dilakukan pada tipe token valid atau tidak
- Anda tidak dapat memutuskan bahwa token dideklarasikan & diinisialisasi sebelum digunakan
Ringkasan
- Analisis sintaks adalah tahap kedua dari proses desain penyusun yang muncul setelah analisis leksikal
- Penganalisis sintaksis membantu Anda menerapkan aturan pada kode
- Kalimat, Lexeme, Token, Kata kunci dan kata-kata yang dicadangkan, Kata-kata Noise, Komentar, Pembatas, Kumpulan karakter, Pengidentifikasi adalah beberapa istilah penting yang digunakan dalam Analisis Sintaks dalam konstruksi Penyusun
- Parse memeriksa apakah string input terbentuk dengan baik, dan jika tidak, tolak
- Teknik Parsing dibagi menjadi dua kelompok berbeda: Top-Down Parsing, Bottom-Up Parsing
- Leksikal, Sintaksis, Semantik, dan logis adalah beberapa kesalahan umum yang terjadi selama metode parsing
- Tata bahasa adalah seperangkat aturan struktural yang menggambarkan suatu bahasa
- Simbol konvensi notasi dapat ditunjukkan dengan mengapit elemen dalam tanda kurung siku
- CFG adalah tata bahasa rekursif kiri yang memiliki setidaknya satu jenis produksi
- Derivasi tata bahasa adalah urutan aturan tata bahasa yang mengubah simbol awal menjadi string
- Penganalisis sintaks terutama menangani konstruksi rekursif dari bahasa sementara penganalisis leksikal memudahkan tugas penganalisis sintaks di DBMS
- Kelemahan dari metode Syntax analyzer adalah metode ini tidak akan pernah menentukan apakah sebuah token valid atau tidak