Tahapan pada Teknik Kompilasi
Analisis sintak lebih sering disebut penguraian (parsing). Tujuan utama dari analisis sintak adalah memeriksa apakah urutan token-token yang dihasilkan sesuai dengan tata bahasa dari bahasa yang bersangkutan. Misalnya bahasa C mengenal kalimat: jumlah++; yang berarti menaikkan harga variabel jumlah dengan angka satu. Tetapi kalimat di atas akan salah jika dikompilasi dengan kompilator bahasa Pascal, karena tidak sesuai dengan tata bahasa Pascal.
Dalam analisis sintak, tata bahasa yang digunakan untuk mendefinisikan aturan sintak suatu bahasa disebut tata bahasa bebas konteks (Context Free Grammar). Tata bahasa ini memiliki empat komponen penting yaitu himpunan simbol terminal, himpunan non-terminal, himpunan produksi dan simbol awal. Dalam bahasa pemrograman, yang disebut terminal adalah token. Contoh terminal adalah token. Contoh token misalnya kata kunci (keyword) if, while, dan identifier serta bilangan. Sedangkan non-terminal merupakan variabel-variabel sintak yang menyatakan himpunan terminal maupun non-terminal. Dalam proses parsing terjadi proses penggantian suatu non terminal dengan sederetan himpunan non terminal dan terminal yang berada dalam sisi kanan produksnya. Proses ini disebut sebagai derivasi. Contohnya non-terminal if_stmt merupakan himpunan terminal if, then, else, dan non-terminal expr dan stmt, yang membentuk aturan produksi : if_stmt ?? if expr then stmt else stmt. Dari semua simbol non-terminal yang digunakan, ada satu simbol yang bertindak sebagai simbol awal, yaitu simbol yang pertama kali diderivasi. Aturan produksi menggambarkan bagaimana kombinasi non-terminal dan terminal yang benar menurut tata bahasa yanbg bersangkutan. Dalam proses penguraian, token-token yang dihasilkan dalam analisis leksikal dibentuk menjadi pohon urai (parse tree).
Pohon urai merupakan hasil derivasi dari aturan –aturan produksi.
Ada dua jenis derivasi, yaitu derivasi terkiri (Left Most Derivation) dan derivasi terkanan (Right Most Derivation). Derivasi terkiri akan menderivasi suatu aturan produksi mulai dari non-terminal yang paling kiri. Sedangkan derivasi terkanan akan menderivasi suatu aturan produksi mulai dari non-terminal yang paling kanan.
Jika proses derivasi aturan-aturan produksi suatu tata bahasa terhadap suatu masukan menghasilkan lebih dari satu pohon urai maka tata bahasa tersebut dikatakan rancu (ambiguous).
Proses Analisis Simantik
Analisa semantik berperan dalam memeriksa kesalahan yang bersifat semantic. Salah satu peranannya analisa semantic yang penting adalah pemeriksaan tipe variable. Contohnya operator * hanya digunakan untuk operan dengan tipe integer ataupun real. Sedangkan operator and, or, digunakan untuk operand dengan tipe boolean.
Dalam analisis sintak, tata bahasa yang digunakan untuk mendefinisikan aturan sintak suatu bahasa disebut tata bahasa bebas konteks (Context Free Grammar). Tata bahasa ini memiliki empat komponen penting yaitu himpunan simbol terminal, himpunan non-terminal, himpunan produksi dan simbol awal. Dalam bahasa pemrograman, yang disebut terminal adalah token. Contoh terminal adalah token. Contoh token misalnya kata kunci (keyword) if, while, dan identifier serta bilangan. Sedangkan non-terminal merupakan variabel-variabel sintak yang menyatakan himpunan terminal maupun non-terminal. Dalam proses parsing terjadi proses penggantian suatu non terminal dengan sederetan himpunan non terminal dan terminal yang berada dalam sisi kanan produksnya. Proses ini disebut sebagai derivasi.
Contohnya non-terminal if_stmt merupakan himpunan terminal if, then, else, dan non-terminal expr dan stmt, yang membentuk aturan produksi : if_stmt ?? if expr then stmt else stmt. Dari semua simbol non-terminal yang digunakan, ada satu simbol yang bertindak sebagai simbol awal, yaitu simbol yang pertama kali diderivasi. Aturan produksi menggambarkan bagaimana kombinasi non-terminal dan terminal yang benar menurut tata bahasa yanbg bersangkutan. Dalam proses penguraian, token-token yang dihasilkan dalam analisis leksikal dibentuk menjadi pohon urai (parse tree).
Pohon urai adalah pohon binari, pohon yang setiap nodenya, jika terpecah maka terpecah maksimal dalam dua pecahan node.
Pohon urai dilakukan berdasarkan:
Blok demi blok
Kurung demi kurung
Operasi demi operasi
Ekspresi demi ekspresi.
Blok demi blok, dimulai dengan blok terluar sebagai node awal, lalu urai ke blok2 berikut. Lalu dari setiap blok diurai ekspresi demi ekspresi.
Pada suatu ekspresi, bila dinyatakan sebagai kurung demi kurung, maka dibuat anak pohon baru (yg bisa tetap tersambung induknya atau terpisah) yang menyatakan pohon kurung demi kurung mulai dengan kurung dengan prioritas tertinggi sebagai node paling awal.
Pada suatu eksprsi jika terdapat ekspresi yang mengandung operasi2, maka dilakukan pembentukan anak pohon baru (yg boleh tersambung dengan induk atau terpisah), kemudian pohon dibentuk berdasrkan prioritas operasi. Node awal diisi oleh operasi dengan prioritas tertinggi.
Bagaimana analisis sintaks berhubungan dengan analisis leksikal?
Pertama:
Analisis leksikal menghasilkan senarai token.
Kedua:
Parser pada analisis sintaks, menerima/membaca token satu persatu, tidak langsung satu baris string.
Ketiga:
Setiap token yang terbaca, parser menebak aturan produksi yang mesti digunakan untuk, lalu parser berdasrkan aturan produksi itu menghasilkan string sementara.
Hingga jika terbaca sebuah token dimana hasil string sementara yang diperoleh tepat sama dengan barisan string yang hendak dibaca, maka string tersebut diterima.
Komentar
Posting Komentar