0% menganggap dokumen ini bermanfaat (0 suara)
193 tayangan22 halaman

Syntax Analyzer (Parser) - Dasar

Syntax analyzer (parser) digunakan untuk mengelompokkan token-token ke dalam kelas sintaks seperti prosedur, pernyataan, dan ekspresi. Parser menggunakan tata bahasa untuk menentukan struktur dari program sumber dan menghasilkan pohon sintaks yang digunakan oleh semantics analyzer. Parser berada di antara scanner dan semantics analyzer dalam kompilator.

Diunggah oleh

Halmahera Medika TI
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
193 tayangan22 halaman

Syntax Analyzer (Parser) - Dasar

Syntax analyzer (parser) digunakan untuk mengelompokkan token-token ke dalam kelas sintaks seperti prosedur, pernyataan, dan ekspresi. Parser menggunakan tata bahasa untuk menentukan struktur dari program sumber dan menghasilkan pohon sintaks yang digunakan oleh semantics analyzer. Parser berada di antara scanner dan semantics analyzer dalam kompilator.

Diunggah oleh

Halmahera Medika TI
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PPTX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 22

Syntax Analyzer (Parser) - Dasar

Sigit Widiyanto, ST., MMSi., MSc


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 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
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).
• 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  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 menggambarkan bagaimana
memperoleh suatu string dengan
cara menurunkan simbol-simbol
variable menjadi simbol-simbol
terminal.
• Misalnya: S  AB
A  aA | a
B  bB | B
Penurunan untuk menhasilkan string
aabbb
Parsing atau Proses Penurunan
Parsing dapat dilakukan dengan cara :
 Penurunan terkiri (leftmost derivation) : simbol
variable yang paling kiri diturunkan (tuntas) dahulu
 Penurunan terkanan (rightmost derivation): variable
yang paling kanan diturunkan (tuntas) dahulu
 Misalkan terdapat ingin dihasilkan string aabbaa dari
Context free language:
S  a AS | a, A  SbA | ba
Proses Penurunan (Derivasi)

Penurunan kiri : Penurunan kanan :

S => aAS S => aAS

=> aSbAS => aAa

=> aabAS => aSbAa

=> aaabbaS => aSbbaa

=> aabbaa => aabbaa


Latihan Parsing
Diketahui: S -> aB | bA
A -> a | aS |bAA
B -> b | bS | aBB

Penurunan untuk string aaabbabbba


Berikan solusi untuk derivasi dan
analisis sintaksnya.
Solusi
Misalnya: S -> aB | bA
A -> a | aS |bAA
B -> b | bS | aBB

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I HIA, H 


abc...z, A  012...9}
dengan I adalah simbol awal.
• Bagaimanakah analisa sintaks untuk kalimat
x23b.
Solusi
Diketahui grammar G = {I  HI HIA, H  abc...z, A  012...9}
dengan I adalah simbol awal.
Bagaimanakah analisa sintaks untuk kalimat x23b.
Metode Parsing
Perlu memperhatikan 3 hal: • Backtrack/backup : Brute
Force
• Waktu Eksekusi
• No backtrack : Recursive
• Penanganan Kesalahan Descent Parser
• Penanganan Kode
Parsing digolongkan menjadi: • Bottom-Up
• Top-Down Metode ini melakukan
Penelusuran dari root ke leaf atau penelusuran dari leaf ke root
dari simbol awal ke simbol – LR(k)
terminal – Presedence Parser
metode ini meliputi:
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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 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  *+,
A  012...9}
Kalimat : 2*3+7 mempunyai dua pohon sintaks berikut :
S S

S O S S O S

A * S O S S O S + A

2 A + A A * A 7

3 7 2 3
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 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  1R2R...n R, R 1 R2 R..n R
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

Anda mungkin juga menyukai