Apa itu Analisis Sintaksis?
Analisis Sintaks adalah fasa kedua dari proses reka bentuk penyusun di mana rentetan input yang diberikan diperiksa untuk pengesahan peraturan dan struktur tatabahasa formal. Ia menganalisis struktur sintaksis dan memeriksa apakah input yang diberikan berada dalam sintaks bahasa pengaturcaraan yang betul atau tidak.
Analisis Sintaks dalam proses Reka Bentuk Kompiler berlaku setelah fasa analisis Lexical. Ia juga dikenali sebagai Parse Tree atau Syntax Tree. Parse Tree dikembangkan dengan bantuan tatabahasa bahasa yang telah ditentukan. Penganalisis sintaks juga memeriksa sama ada program yang diberikan memenuhi peraturan yang disiratkan oleh tatabahasa bebas konteks. Sekiranya memuaskan, penghurai kemudian membuat pokok parse dari program sumber itu. Jika tidak, ia akan memaparkan mesej ralat.

Dalam tutorial ini, anda akan belajar
- Mengapa anda memerlukan Syntax Analyzer?
- Terminologi Penganalisis Sintaksis Penting
- Mengapa kita perlu Menghuraikan?
- Teknik menghuraikan
- Ralat - Kaedah Pemulihan
- Tatabahasa:
- Konvensyen Notasi
- Tatabahasa Bebas Konteks
- Derivasi Tatabahasa
- Penganalisis Sintaks vs Lexical
- Kelemahan penggunaan Syntax Analyzers
Mengapa anda memerlukan Syntax Analyzer?
- Periksa sama ada kod tersebut sah secara tatabahasa
- Penganalisis sintaksis membantu anda menerapkan peraturan pada kod tersebut
- Membantu anda memastikan bahawa setiap pendakap pembuka mempunyai baki penutup yang sesuai
- Setiap deklarasi mempunyai jenis dan jenis itu mesti ada
Terminologi Penganalisis Sintaksis Penting
Terminologi penting yang digunakan dalam proses analisis sintaks:
- Kalimat: Kalimat adalah sekumpulan watak dengan beberapa abjad.
- Lexeme: Lexeme adalah unit sintaksis tahap terendah dari bahasa (misalnya, jumlah, permulaan).
- Token: Token hanyalah kategori leksema.
- Kata kunci dan kata terpelihara - Ia adalah pengecam yang digunakan sebagai bahagian tetap dari sintaks pernyataan. Ia adalah kata terpelihara yang tidak boleh anda gunakan sebagai nama atau pengecam pemboleh ubah.
- Kata-kata bising - Kata-kata bising adalah pilihan yang disisipkan dalam pernyataan untuk meningkatkan pembacaan ayat.
- Komen - Ini adalah bahagian yang sangat penting dalam dokumentasi. Kebanyakannya dipaparkan oleh, / * * /, atau // Kosong (spasi)
- Delimiters - Ini adalah elemen sintaksis yang menandakan permulaan atau akhir beberapa unit sintaksis. Seperti pernyataan atau ungkapan, "mulakan" ... '' akhir ", atau {}.
- Set aksara - ASCII, Unicode
- Pengecam - Ini adalah sekatan panjang yang membantu anda mengurangkan pembacaan ayat.
- Simbol operator - + dan - melakukan dua operasi asas aritmetik.
- Unsur sintaksis Bahasa
Mengapa kita perlu Menghuraikan?
Parse juga memeriksa bahawa rentetan input terbentuk dengan baik, dan jika tidak, tolak.
Berikut adalah tugas-tugas penting yang dilakukan oleh penghurai dalam reka bentuk penyusun:
- Membantu anda mengesan semua jenis kesalahan Sintaks
- Cari kedudukan di mana ralat telah berlaku
- Penerangan ralat yang jelas & tepat.
- Pemulihan dari ralat untuk meneruskan dan mencari ralat selanjutnya dalam kod.
- Tidak boleh mempengaruhi penyusunan program "betul".
- Penjelasan mesti menolak teks yang tidak betul dengan melaporkan kesalahan sintaks
Teknik menghuraikan
Teknik menghuraikan dibahagikan kepada dua kumpulan yang berbeza:
- Penjelasan Atas-Bawah,
- Penyusunan Bahagian Bawah
Penghuraian Atas-Bawah:
Di bahagian bawah parsing pembinaan pokok parsi bermula dari akar dan kemudian menuju ke daun.
Dua jenis penghuraian Top-down adalah:
- Penghuraian Ramalan:
Predictive parse dapat meramalkan pengeluaran mana yang harus digunakan untuk menggantikan rentetan input tertentu. Penyusun ramalan menggunakan titik pandang ke depan, yang menunjuk ke arah simbol input seterusnya. Backtracking bukan masalah dengan teknik menguraikan ini. Ia dikenali sebagai LL (1) Parser
- Penguraian Keturunan Rekursif:
Teknik penghuraian ini secara parsial menguraikan input untuk membuat pokok prase. Ini terdiri daripada beberapa fungsi kecil, satu untuk setiap nonterminal dalam tatabahasa.
Penyusunan Bahagian Bawah:
Dalam penghuraian dari bawah ke atas dalam rancangan penyusun, pembinaan pokok parsing bermula dengan cuti, dan kemudian proses menuju ke akarnya. Ia juga disebut sebagai penguraian pengurangan shift. Jenis penghuraian dalam reka bentuk penyusun dibuat dengan bantuan menggunakan beberapa alat perisian.
Ralat - Kaedah Pemulihan
Kesalahan Umum yang berlaku dalam Menghuraikan Perisian Sistem
- Leksikal : Nama pengecam yang salah taip
- Sintaksis : kurungan tidak seimbang atau titik koma yang hilang
- Semantik : penugasan nilai yang tidak serasi
- Logik : Gelung tanpa had dan kod yang tidak dapat dijangkau
Penyusun harus dapat mengesan dan melaporkan sebarang kesalahan yang terdapat dalam program ini. Jadi, setiap kali berlaku kesalahan penghurai. Ia harus dapat mengatasinya dan terus menguraikan sisa input. Program boleh mempunyai jenis kesalahan berikut pada pelbagai tahap proses penyusunan. Terdapat lima kaedah pemulihan kesalahan yang boleh dilaksanakan dalam penghurai
Pemulihan mod penyataan
- Sekiranya pengurai mengalami ralat, ini membantu anda mengambil langkah pembetulan. Ini membolehkan sisa input dan keadaan dihuraikan di hadapan.
- Sebagai contoh, menambahkan titik koma yang hilang terdapat dalam kaedah pemulihan mod penyataan. Walau bagaimanapun, pereka parsi perlu berhati-hati semasa membuat perubahan ini kerana satu pembetulan yang salah dapat menyebabkan gelung tak terhingga.
Pemulihan Mod Panik
- Sekiranya pengurai menghadapi ralat, mod ini mengabaikan pernyataan yang lain dan tidak memproses input dari input yang salah ke pembatas, seperti titik koma. Ini adalah kaedah pemulihan ralat yang mudah.
- Dalam kaedah pemulihan jenis ini, pengurai menolak simbol input satu persatu sehingga satu kumpulan token penyegerakan yang ditentukan dijumpai. Token penyegerakan secara amnya menggunakan pembatas seperti atau.
Pemulihan Tahap Frasa:
- Penyusun membetulkan program dengan memasukkan atau menghapus token. Ini memungkinkan untuk terus menguraikan dari mana ia berada. Ia melakukan pembetulan pada input yang tinggal. Ia dapat menggantikan awalan input yang tersisa dengan beberapa rentetan ini membantu pengurai untuk meneruskan proses.
Ralat Pengeluaran
- Pemulihan pengeluaran ralat memperluas tatabahasa untuk bahasa yang menghasilkan konstruk yang salah. Penyusun kemudian melakukan diagnostik ralat mengenai konstruk itu.
Pembetulan Global:
- Penyusun harus membuat lebih sedikit jumlah perubahan yang mungkin semasa memproses rentetan input yang salah. Memandangkan string input a dan tatabahasa c yang salah, algoritma akan mencari pokok parse untuk rentetan yang berkaitan b. Seperti beberapa penyisipan, penghapusan, dan pengubahsuaian yang dibuat dari token yang diperlukan untuk mengubah menjadi b sekerap mungkin.
Tatabahasa:
Tatabahasa adalah sekumpulan peraturan struktur yang menggambarkan bahasa. Tatabahasa memberikan struktur pada sebarang ayat. Istilah ini juga merujuk kepada kajian peraturan ini, dan fail ini merangkumi morfologi, fonologi, dan sintaksis. Ia mampu menggambarkan banyak, sintaks bahasa pengaturcaraan.
Peraturan Tatabahasa Tingkatan
- Simbol bukan terminal hendaklah muncul di sebelah kiri sekurang-kurangnya satu pengeluaran
- Simbol tujuan tidak boleh dipaparkan di sebelah kanan :: = sebarang produksi
- Peraturan adalah rekursif jika LHS muncul di RHSnya
Konvensyen Notasi
Simbol konvensyen notasi boleh ditunjukkan dengan memasukkan elemen dalam tanda kurung. Ini adalah urutan sewenang-wenang kejadian elemen yang dapat ditunjukkan dengan memasukkan elemen dalam pendakap diikuti oleh simbol tanda bintang, {…} *.
Ini adalah pilihan alternatif yang boleh menggunakan simbol dalam satu peraturan. Mungkin ditutup dengan tanda kurung ([,]) apabila diperlukan.
Dua jenis kawasan Konvensyen Notasi Terminal dan Bukan terminal
1. Terminal:
- Huruf kecil dalam abjad seperti a, b, c,
- Simbol operator seperti +, -, *, dll.
- Simbol tanda baca seperti tanda kurung, hash, koma
- 0, 1,…, 9 digit
- Rentetan Boldface seperti id atau if, apa sahaja yang mewakili simbol terminal tunggal
2. bukan akhir:
- Huruf besar seperti A, B, C
- Nama miring huruf kecil: ungkapan atau sebilangannya
Tatabahasa Bebas Konteks
CFG adalah tatabahasa rekursif kiri yang mempunyai sekurang-kurangnya satu jenis pengeluaran. Peraturan dalam tatabahasa bebas konteks terutama bersifat rekursif. Penganalisis sintaksis memeriksa bahawa program khusus memenuhi semua peraturan tatabahasa bebas Konteks atau tidak. Sekiranya memenuhi syarat, penganalisis sintaks peraturan ini boleh membuat pokok parse untuk program tersebut.
expression -> expression -+ termexpression -> expression - termexpression-> termterm -> term * factorterm -> expression/ factorterm -> factor factorfactor -> ( expression )factor -> id
Derivasi Tatabahasa
Pembentukan tatabahasa adalah urutan peraturan tatabahasa yang mengubah simbol permulaan menjadi rentetan. Derivasi membuktikan bahawa rentetan itu termasuk dalam bahasa tatabahasa.
Derivasi paling kiri
Apabila bentuk sentensial input diimbas dan diganti dalam urutan kiri ke kanan, ia dikenali sebagai terbitan paling kiri. Bentuk sentensial yang diturunkan oleh derivasi paling kiri disebut bentuk sentensial kiri.
Terbitan paling tepat
Imbas derivasi paling kanan dan gantikan input dengan peraturan pengeluaran, dari urutan dari kanan ke kiri, urutan. Ia dikenali sebagai terbitan paling tepat. Bentuk sentensial yang berasal dari terbitan paling kanan dikenali sebagai bentuk sentensial kanan.
Penganalisis Sintaks vs Lexical
Penganalisis Sintaks |
Penganalisis Lexical |
Penganalisis sintaks terutama berkaitan dengan konstruk rekursif bahasa. |
Penganalisis leksikal mempermudah tugas penganalisis sintaks. |
Penganalisis sintaks berfungsi pada token dalam program sumber untuk mengenali struktur yang bermakna dalam bahasa pengaturcaraan. |
Penganalisis leksikal mengenali token dalam program sumber. |
Ia menerima input, dalam bentuk token, dari penganalisis leksikal. |
Ia bertanggungjawab untuk kesahihan token yang dibekalkan oleh penganalisis sintaks |
Kelemahan penggunaan Syntax Analyzers
- Ia tidak akan menentukan sama ada token itu sah atau tidak
- Tidak membantu anda menentukan sama ada operasi yang dilakukan pada jenis token adalah sah atau tidak
- Anda tidak dapat memutuskan bahawa token diisytiharkan & diinisialisasi sebelum digunakan
Ringkasan
- Analisis sintaks adalah fasa kedua dari proses reka bentuk penyusun yang datang setelah analisis leksikal
- Penganalisis sintaksis membantu anda menerapkan peraturan pada kod tersebut
- Kalimat, Lexeme, Token, Kata kunci dan kata terpelihara, Kata-kata bising, Komen, Pembatas, Set aksara, Pengenal adalah beberapa istilah penting yang digunakan dalam Analisis Sintaks dalam pembinaan Kompiler
- Parse memeriksa bahawa rentetan input terbentuk dengan baik, dan jika tidak, tolak
- Teknik menghurai dibahagikan kepada dua kumpulan yang berbeza: Parsing Top-Down, Parsing Bawah-Atas
- Leksikal, Sintaksis, Semantik, dan logik adalah beberapa kesalahan yang biasa berlaku semasa kaedah menghurai
- Tatabahasa adalah sekumpulan peraturan struktur yang menggambarkan bahasa
- Simbol konvensyen notasi boleh ditunjukkan dengan memasukkan elemen dalam tanda kurung
- CFG adalah tatabahasa rekursif kiri yang mempunyai sekurang-kurangnya satu jenis pengeluaran
- Pembentukan tatabahasa adalah urutan peraturan tatabahasa yang mengubah simbol permulaan menjadi rentetan
- Penganalisis sintaks terutama berkaitan dengan konstruk rekursif bahasa sementara penganalisis leksikal mempermudah tugas penganalisis sintaks di DBMS
- Kelemahan kaedah penganalisis Syntax adalah bahawa ia tidak akan pernah menentukan sama ada token itu sah atau tidak