Anda di halaman 1dari 22

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: • Bottom-Up
• Waktu Eksekusi Metode ini melakukan penelusuran
• Penanganan Kesalahan dari leaf ke root
LR(k)
• Penanganan Kode –

– Presedence Parser
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
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