Syntax Analyzer Parser Dasar Sigit Widiyanto ST MMSi

  • Slides: 22
Download presentation
Syntax Analyzer (Parser) - Dasar Sigit Widiyanto, ST. , MMSi. , MSc

Syntax Analyzer (Parser) - Dasar Sigit Widiyanto, ST. , MMSi. , MSc

Syntax Analyzer • Pengelompokan token-token kedalam class syntax (bentuk syntax), seperti procedure, statement dan

Syntax Analyzer • Pengelompokan token-token kedalam class syntax (bentuk syntax), seperti procedure, statement dan expression • Grammar : sekumpulan aturan-aturan, untuk mendefinisikan bahasa sumber • Grammar dipakai oleh syntax analyser untuk menentukan struktur dari program sumber • Proses pen-deteksian-nya (pengenalan token) disebut dengan parsing

Syntax Analyzer • Maka Syntax analyser sering disebut dengan parser. • Pohon sintaks yang

Syntax Analyzer • Maka Syntax analyser sering disebut dengan parser. • Pohon sintaks yang dihasilkan digunakan untuk semantics analyser yang bertugas untuk menentukan ‘maksud’ dari program sumber. • Misalnya operator penjumlahan maka semantics analyser akan mengambil aksi apa yang harus dilakukan

Posisi Parser dalam Kompilator

Posisi Parser dalam Kompilator

Ketentuan dalam Parser • Deretan token : dihasilkan oleh Penganalisa Leksikal (Scanner) • Pohon

Ketentuan dalam Parser • Deretan token : dihasilkan oleh Penganalisa Leksikal (Scanner) • Pohon parse : suatu pohon dimana akarnya (root) adalah simbol awal grammar (starting symbol), setiap node dalam (inner node) adalah simbol nonterminal, dan daunnya (leaf) dibaca dari kiri ke kanan adalah deretan token masukan. Pohon parse ini dibentuk berdasarkan aturan grammar yang ditetapkan untuk parser. • Kesalahan sintaks : terjadi jika pola deretan token tidak memenuhi ketentuan pola yang telah ditentukan grammar untuk parser.

Hal yang Penting!!! • Scanner: Regular Grammar (RG) • Parser: Grammar Context Free (CFG).

Hal yang Penting!!! • Scanner: Regular Grammar (RG) • Parser: Grammar Context Free (CFG). • Bagi RG (scanner) sebuah token (kecuali reserve word) adalah sebuah kalimat dimana setiap karakter pembentuk token tersebut adalah simbol terminal. • Sebaliknya bagi CFG (parser) sebuah token adalah sebuah simbol terminal dimana sederetan tertentu token akan membentuk sebuah kalimat.

Hal yang Perlu diperhatikan dalam CFG • Pola umum CFG : A , A

Hal yang Perlu diperhatikan dalam CFG • Pola umum CFG : A , A VN, (VN VT )* • Analisis sintaks : Penelusuran sebuah kalimat (sentensial) sampai pada simbol awal grammar. Analisis sintaks dapat dilakukan melalui derivasi atau parsing. Penelusuran melalui parsing menghasilkan pohon sintaks.

Syntax tree • • Pohon sintaks/ Pohon penurunan (syntax tree/ parse tree) beguna untuk

Syntax tree • • Pohon sintaks/ Pohon penurunan (syntax tree/ parse tree) beguna untuk menggambarkan bagaimana memperoleh suatu string dengan cara menurunkan simbol-simbol variable menjadi simbol-simbol terminal. Misalnya: S AB A a. A | a B b. B | B Penurunan untuk menhasilkan string aabbb

Parsing atau Proses Penurunan Parsing dapat dilakukan dengan cara : n Penurunan terkiri (leftmost

Parsing atau Proses Penurunan Parsing dapat dilakukan dengan cara : n Penurunan terkiri (leftmost derivation) : simbol variable yang paling kiri diturunkan (tuntas) dahulu n Penurunan terkanan (rightmost derivation): variable yang paling kanan diturunkan (tuntas) dahulu n Misalkan terdapat ingin dihasilkan string aabbaa dari Context free language: S a AS | a, A Sb. A | ba

Proses Penurunan (Derivasi) Penurunan kiri : S => a. AS Penurunan kanan : S

Proses Penurunan (Derivasi) Penurunan kiri : S => a. AS Penurunan kanan : S => a. AS => a. Sb. AS => a. Aa => aab. AS => a. Sb. Aa => aaabba. S => a. Sbbaa => aabbaa

Latihan Parsing Diketahui: S -> a. B | b. A A -> a |

Latihan Parsing Diketahui: S -> a. B | b. A A -> a | a. S |b. AA B -> b | b. S | a. BB Penurunan untuk string aaabbabbba Berikan solusi untuk derivasi dan analisis sintaksnya.

Solusi Misalnya: S -> a. B | b. A A -> a | a.

Solusi Misalnya: S -> a. B | b. A A -> a | a. S |b. AA B -> b | b. S | a. BB Penurunan untuk string aaabbabbba Dalam hal ini perlu untuk melakukan percobaan pemilihan aturan produksi yang bisa mendapatkan solusi.

Contoh Parsing Lanj. • Diketahui grammar G = {I H IA, H a b

Contoh Parsing Lanj. • Diketahui grammar G = {I H IA, H a b c. . . z, A 0 1 2. . . 9} dengan I adalah simbol awal. • Bagaimanakah analisa sintaks untuk kalimat x 23 b.

Solusi Diketahui grammar G = {I H IA, H a b c. . .

Solusi Diketahui grammar G = {I H IA, H a b c. . . z, A 0 1 2. . . 9} dengan I adalah simbol awal. Bagaimanakah analisa sintaks untuk kalimat x 23 b.

Metode Parsing Perlu memperhatikan 3 hal: • • Waktu Eksekusi • Penanganan Kesalahan •

Metode Parsing Perlu memperhatikan 3 hal: • • Waktu Eksekusi • Penanganan Kesalahan • Penanganan Kode Parsing digolongkan menjadi: • Top-Down Penelusuran dari root ke leaf atau dari simbol awal ke simbol terminal metode ini meliputi: • • Backtrack/backup : Brute Force No backtrack : Recursive Descent Parser Bottom-Up Metode ini melakukan penelusuran dari leaf ke root – – LR(k) Presedence Parser

Ambiguitas • Sebuah kalimat adalah ambigu jika terdapat lebih dari satu pohon sintaks yang

Ambiguitas • Sebuah kalimat adalah ambigu jika terdapat lebih dari satu pohon sintaks yang dapat dibentuk oleh kalimat tersebut. • Secara gramatikal kalimat ambigu dihasilkan oleh grammar ambigu yaitu grammar yang mengandung beberapa produksi dengan ruas kiri yang sama sedangkan dua atau lebih ruas kanan-nya mempunyai string terkiri (prefix) yang sama. • Contoh : S if E then S else S, Dimana S : statement dan E : expression,

Ambiguitas Lanj. • Grammar ambigu dapat diperbaiki dengan metoda faktorisasi kiri (left factorization). Prefix

Ambiguitas Lanj. • Grammar ambigu dapat diperbaiki dengan metoda faktorisasi kiri (left factorization). Prefix dari produksi di atas adalah sentensial if E then S sehingga faktorisasi akan menghasilkan : S if E then S T, T else S { : simbol hampa}

Contoh Lain Ambiguity • Diketahui grammar G = {S SOS A , O *

Contoh Lain Ambiguity • Diketahui grammar G = {S SOS A , O * +, A 0 1 2. . . 9} Kalimat : 2*3+7 mempunyai dua pohon sintaks berikut :

Rekursif Kiri (Left Recursion) • Sebuah grammar dikatakan bersifat rekursi kiri jika untuk sebuah

Rekursif Kiri (Left Recursion) • Sebuah grammar dikatakan bersifat rekursi kiri jika untuk sebuah simbol nonterminal A terdapat derivasi non hampa A A. Produksi berbentuk A A disebut produksi yang bersifat immediate left recursion.

Rekursif Kiri (Left Recursion) • Rekursi kiri dapat dieliminir dengan transformasi berikut : A

Rekursif Kiri (Left Recursion) • Rekursi kiri dapat dieliminir dengan transformasi berikut : A A transformasi menjadi A R, R R • Transformasi ini dapat diperluas sehingga : A A 1 A 2 . . . A n 1 2. . . n bertransformasi menjadi : A 1 R 2 R. . . n R, R 1 R 2 R. . n R

Contoh • Diketahui : E E + T T, T T * F F,

Contoh • Diketahui : E E + T T, T T * F F, F (E) I yang jelas mengandung immediate left recursion untuk simbol E dan T. • Transformasi menghasilkan : E TRE, RE +TRE , T FRT, R *FRT , F (E) I

Tugas • Diketahui : S Aa b, A Ac S d

Tugas • Diketahui : S Aa b, A Ac S d