analisis sintaksis

Embed Size (px)

Citation preview

  • 8/18/2019 analisis sintaksis

    1/66

    Analisis Sintaksis

    Amalia

  • 8/18/2019 analisis sintaksis

    2/66

    Tahapan Proses Kompilasi

    Materi Hari Ini

  • 8/18/2019 analisis sintaksis

    3/66

    Posisi Parser

  • 8/18/2019 analisis sintaksis

    4/66

    Tugas Utama Parser

  • 8/18/2019 analisis sintaksis

    5/66

    Analisis Sintaksis

  • 8/18/2019 analisis sintaksis

    6/66

    Parse Tree dari The dog Gnawed the bone

  • 8/18/2019 analisis sintaksis

    7/66

  • 8/18/2019 analisis sintaksis

    8/66

  • 8/18/2019 analisis sintaksis

    9/66

    Peran Parser

  • 8/18/2019 analisis sintaksis

    10/66

    Definisi Sintak

  • 8/18/2019 analisis sintaksis

    11/66

    Definisi Sintak

  • 8/18/2019 analisis sintaksis

    12/66

    Definisi Sintak

  • 8/18/2019 analisis sintaksis

    13/66

    Kegunaan CFG

  • 8/18/2019 analisis sintaksis

    14/66

    Context Free Grammar

  • 8/18/2019 analisis sintaksis

    15/66

    Context Free Grammar

  • 8/18/2019 analisis sintaksis

    16/66

    CFG dalam Notasi BNF (Backus NaurForm)

    • Biasanya CFG di buat dalam notasi BNF• Contoh : Misalkan sebuah Grammar M memiliki grammar :

    ::= ::= 'koala'|'KURSI'|'PISANG' ::='MEMUKUL'|'MEMAKAN'|'MEMBUANG'

    Semua kalimat ini valid menurut grammar di atas (atau dikatakan bahwa: kalimat-kalimat berikut ini berada dalam bahasa yang didefinisikan oleh grammar M):

    KOALA MEMAKAN KURSIKOALA MEMAKAN PISANG

    KOALA MEMUKUL KURSIKOALA MEMUKUL KOALAPISANG MEMAKAN KOALA

    Proses syntactic analysis hanya memeriksa grammar, tapi tidak menangani semantik.Kalimat "PISANG MEMAKAN KOALA" mungkin tidak valid secara semantik, tapi valid

    secara grammar. Pada tahap ini jangan pedulikan dulu masalah semantik.

  • 8/18/2019 analisis sintaksis

    17/66

    Contoh Lain• Misalkan ada grammar N :

    ::= | ::= ::=

    ::= 'KOALA'|'KURSI'|'PISANG' ::='MEMUKUL'|'MEMAKAN'|'MEMBUANG‘ ::= 'SANGAT'|'AGAK'| ::= 'BESAR'|'KECIL'

    KOALA MEMAKAN KURSIKOALA AGAK BESAR

  • 8/18/2019 analisis sintaksis

    18/66

    Context Free Grammar

    Produksi adalah setiap kejadian dimana string sebelah kiri dapat digantikandengan oleh string bagian kanan

  • 8/18/2019 analisis sintaksis

    19/66

    Context Free Grammar

  • 8/18/2019 analisis sintaksis

    20/66

  • 8/18/2019 analisis sintaksis

    21/66

  • 8/18/2019 analisis sintaksis

    22/66

  • 8/18/2019 analisis sintaksis

    23/66

  • 8/18/2019 analisis sintaksis

    24/66

    Tipe Parser

  • 8/18/2019 analisis sintaksis

    25/66

    Top Down Parser

  • 8/18/2019 analisis sintaksis

    26/66

    26

    Parsing Top Down

    • Jika adalah input string, maka derivasi dari Top Down Parse dapatditunjukkan sebagai berikut :

    S … … … • Parse Tree untuk Top Down Parsing selalu dimulai dari sebelah kiri

    S

    NT11 NT12 NT1n…….

    NT21t

    1

    2

    3

  • 8/18/2019 analisis sintaksis

    27/66

    27

    Parsing Top Down (cont.)

    Contoh : Parsing Top Down untuk identifier x2Derivasinya : x x2

    a.

    x

    x

    2

    b

    dc e

  • 8/18/2019 analisis sintaksis

    28/66

    28

    Parsing Top Down (cont.)

    Contoh : ekspresi a + b * cgrammar : E ::= T + E | T

    T ::= V * E | VV ::=

    Prediction Prediction Sentential Form

    E T+E

    T V

    V

    E T

    T V*T

    V

    T V

    V

    T+E

    V+E

    +E

    +T

    +V*T

    +*T

    +*V

    +*

    E

    T + E

    V

    id

    T

    V * T

    id V

    id

  • 8/18/2019 analisis sintaksis

    29/66

    Ambiguitas dalam Grammar • Tidak semua grammar dapat menyatakan

    struktur yang unik untuk setiap string dalamsebuah bahasa.

    • Kadang-kadang, grammar dapat dirancangulang agar dapat memberikan struktur yangunik untuk setiap string dalam sebuah bahasa.

  • 8/18/2019 analisis sintaksis

    30/66

    Contoh• CFG untuk ekspresi sederhana:

    E I | E + E | E * E | (E)

    I a | b | Ia | Ib | I0 | I1

    • Produksi-produksi E E + E, E E * E ekpresi-ekspresi sederhana dapat di-generate dalambeberapa cara.

    • Sebagai contoh, bentuk E + E * E memiliki duapenurunan dari E, yaitu:

    1. E E + E E + E *E

    2. E E * E E + E *E

  • 8/18/2019 analisis sintaksis

    31/66

    Parse tree untuk E + E * E

    E

    E + E

    E * E

    E

    E * E

    E + E

    Gambar a Gambar b

  • 8/18/2019 analisis sintaksis

    32/66

  • 8/18/2019 analisis sintaksis

    33/66

  • 8/18/2019 analisis sintaksis

    34/66

  • 8/18/2019 analisis sintaksis

    35/66

    Ambiguitas• Ambiguitas disebabkan karena adanya dua atau lebih parse

    tree , bukan karena banyaknya penurunan.• CFG G = (V, T, P, S) dikatakan ambigu jika terdapat sedikitnya

    satu string w dalam T* dimana kita dapat menentukan dua parse tree yang berbeda.

    • Masing-masing parse tree tersebut memiliki root yang diberilabel S dan hasil w.

    • Jika setiap string memiliki paling banyak satu parse tree dalamgrammar , maka grammar tersebut dikatakan tidak ambigu(unambiguous ).

  • 8/18/2019 analisis sintaksis

    36/66

    Contoh 10 (lanjutan)• Parse tree yang menghasilkan string a + a * a

    E

    E + E

    E * EI

    a I

    a

    I

    a

    E

    E * E

    E + E

    I

    a

    I

    a

    I

    a

    Gambar a Gambar b

  • 8/18/2019 analisis sintaksis

    37/66

    Menghilangkan Ambiguitas dari Grammar (1)

    • Penyebab ambiguitas dalam grammar pada Contoh:• Gambar a mengelompokkan operator * sebelum

    operator +. Sedangkan Gambar b mengelompokkan +di depan *.

    – Tetapkan hanya struktur dalam Gambar a yang legal dalamgrammar yang tidak ambigu.

  • 8/18/2019 analisis sintaksis

    38/66

    Menghilangkan Ambiguitas dari Grammar (2)

    • Urutan operator-operator yang serupa dapatdikelompokkan dari kiri atau dari kanan.

    – Sebagai contoh, jika para * dalam Gambar diganti oleh

    para +, maka akan diperoleh dua parse tree yang berbedauntuk string E + E + E.

    – Walaupun dalam penjumlahan dan perkalian berlakuhukum asosiatif, untuk menghilangkan ambiguitas

    ditetapkan pengelompokkan dari kiri.

  • 8/18/2019 analisis sintaksis

    39/66

    Menghilangkan Ambiguitas dari Grammar (3)

    • Untuk menghilangkan ambiguitas, diperkenalkanvariabel-variabel berikut:

    – Faktor: sebuah ekspresi yang tidak dapat dipecah darioperator yang berdekatan, a * atau a +. Faktor-faktorberupa:

    • Identifier• Ekspresi yang diberi tanda kurung .

    – Term : sebuah ekspresi yang tidak dapat dipisahkan dari

    operator +. Dalam Contoh 1, term adalah product dari satuatau lebih faktor. – Ekspresi. Dalam Contoh 1, ekspresi adalah penjumlahan

    satu atau lebih term .

  • 8/18/2019 analisis sintaksis

    40/66

    Contoh 11

    • Berikut grammar yang tidak ambigu yang me-generate bahasa yang sama dengan bahasa yang di-generate oleh grammar dalam Contoh 10:

    I a | b | Ia | Ib | I0 | I1F I | (E)T F | T * F

    E T | E + T• Dalam grammar tersebut, F, T dan E berturut-turut

    menyatakan faktor, term , dan ekspresi.

  • 8/18/2019 analisis sintaksis

    41/66

    Contoh (lanjutan)

    • Grammar tsbmemungkinkan hanyasatu parse tree untuk

    string a + a * a, yaitu

    E

    E + T

    T * FT

    F F

    I

    I

    aI

    aa

  • 8/18/2019 analisis sintaksis

    42/66

    Leftmost Derivation dan Ambiguitas

    • Penurunan dapat tidak unik walaupungrammar tidak ambigu.

    Dalam sebuah grammar yang tidak ambigu,leftmost derivation dan rightmost derivationakan unik.

  • 8/18/2019 analisis sintaksis

    43/66

    Contoh 12

    • Perhatikan parse tree dalam Gambar a dan b padaContoh 10, yang menghasilkan E + E * E.

    • Leftmost derivation dari kedua parse tree tersebut: – E (lm) E + E (lm) I + E (lm) a + E (lm) a + E * E (lm)

    a + I * E (lm) a + a * E (lm) a + a * I

    (lm) a + a * a –

    E (lm) E * E (lm) E + E * E (lm) I + E * E(lm) a + E * E (lm) a + I * E (lm) a + a * E

    (lm) a + a * I (lm) a + a *a

  • 8/18/2019 analisis sintaksis

    44/66

    Top Down Parsing : Brute Force• Metode ini akan memilih produksi mulai dari

    yang paling kiri• Melakukan expand semua non terminal pada

    aturan produksi sampai yang tersisa hanya simbolterminal.

    • Kemungkinan pertama string sukses di parsing• Bila terjadi ekspnasi yang salah untuk suatu

    simbol variabel maka akan dilakukan backtrack.• Algoritma ini mencoba segala kemungkinan untuk

    setiap simbol non terminal

    h

  • 8/18/2019 analisis sintaksis

    45/66

    Contoh Brute Force

  • 8/18/2019 analisis sintaksis

    46/66

    Brute Force Parsing• Metoda Brute-Force tidak dapat menggunakan

    grammar rekursi kiri, yaitu grammar yangmengandung produksi rekursi kiri (leftrecursion) : A →A∝ .

    • Produksi rekursi kiri akan menyebabkan parsingmengalami looping tak hingga.

    • Agar tidak menghasilkan looping tak hingga,

    grammar rekursi kiri harus ditransformasi.• Untuk contoh di bawah ini transformasi berarti

    merubah produksi A →Ab menjadi A →bA.

  • 8/18/2019 analisis sintaksis

    47/66

  • 8/18/2019 analisis sintaksis

    48/66

    Top Down Parsing : Recursive DescentParser

    • Kelas metoda tanpa backup, termasuk metoda recursive descent,• Meerupakan metoda parsing yang tidak menggunakan produksi

    alternatif ketika hasil akibat penggunaan sebuah produksi tidaksesuai dengan simbol input.

    • Jika produksi A mempunyai dua buah ruas kanan atau lebih

    maka produksi yang dipilih untuk digunakan adalah produksidengan simbol pertama ruas kanannya sama dengan input yangsedang dibaca.

    • Jika tidak ada produksi yang demikian maka dikatakan bahwaparsing tidak dapat dilakukan.

    • Ketentuan produksi yang digunakan metoda recursive descentadalah : Jika terdapat dua atau lebih produksi dengan ruas kiriyang sama maka karakter pertama dari semua ruas kanan produksitersebut tidak boleh sama. Ketentuan ini tidak melarang adanyaproduksi yang bersifat rekursi kiri.

  • 8/18/2019 analisis sintaksis

    49/66

  • 8/18/2019 analisis sintaksis

    50/66

    Cara Menghilangkan Rekursive kiri

    CFGmengandung

    aturan produksiyang rekursif kiri

    Aturan produksiyang tidak rekursif

    kiri

    Aturan produksiyang rekursif kiri

    Lakukanpenggantian,

    munculkan aturanproduksi baru dan

    symbol variabelbaru

    CFG bebas dariaturan produksi

    yang rekursif kiri

  • 8/18/2019 analisis sintaksis

    51/66

    Penghilangan Rekursif Kiri

    Steps :

    • Pisahkan aturan produksi yang rekursif kiri dan yang tidak.

    Aturan produksi yang rekursif kiri diberi simbol n setelahvariabel:

    A A 1 A 2 A 3 …….. A nAturan produksi yang tidak rekursif kiri (termasuk produksi ) diberi simbol m

    A 1 2 3 …….. m

    • Lakukan penggantian aturan produksi yang rekursif kiri, menjadi sebagai berikut:

    A 1 Z 2 Z ……… m ZZ 1 2 3 …… n

    Z 1Z 2Z 3Z …… nZ

  • 8/18/2019 analisis sintaksis

    52/66

    Penghilangan Rekursif Kiri – Hasil akhir berupa aturan produksi pengganti ditambah dengan aturan produksi

    semula yang tidak rekursif kiri.Contoh:Lakukanlah penghilangan rekursif kiri untuk tata bahas bebas konteks dibawah:

    1. S Sab aSc dd ff Sbd

    2. S Sab Sb cAA Aa a bd

    • Aturan produksi yang rekursif kiri:S Sab Sbd

    Untuk symbol S1 = ab, 2 = bd

    • Aturan produksi yang tidak rekursif kiri:S aSc dd ff

    Untuk symbol S1 = aSc, 2 = dd, 3 = ff

  • 8/18/2019 analisis sintaksis

    53/66

    1 = ab, 2 = bd & 1 = aSc, 2 = dd, 3 = ff

    • Lakukan penggantian aturan produksi yang rekursif kiri

    S Sab Sbd, digantikan oleh: – S 1 Z1 2 Z1 3 Z1 – S aSc Z1 dd Z1 ff Z1 – Z1 1 2 – Z1 1 Z1 2 Z1 – Z1 ab bd – Z1 ab Z1 bd Z1

  • 8/18/2019 analisis sintaksis

    54/66

    Contoh

    2. Aturan produksi yang rekursif kiri:

    S Sab SbA Aa

    Untuk symbol S 1 = ab, 2 = bUntuk symbol A 1 = a

    • Aturan produksi yang tidak rekursif kiri:S cAA a bd

    Untuk symbol S 1 = cAUntuk symbol A 1 = a, 2 = bd

    • Lakukan penggantian aturanproduksi yang rekursif kiri

    S Sab Sb, digantikan oleh: – S 1 Z1 – Z1 1 2 – Z

    1 1Z

    1

    2Z

    1

    A Aa, digantikan oleh: – A 1 Z2 2 Z2 – Z2 1 – Z2 1 Z2

  • 8/18/2019 analisis sintaksis

    55/66

    S 1 = ab, 2 = b , 1 = cAA

    1= a ,

    1= a,

    2= bd

    • Lakukan penggantian aturan produksi yangrekursif kiri

    S Sab Sb, digantikan oleh: – S cAZ1 – Z1 ab b – Z1 ab Z1 bZ1

    A Aa, digantikan oleh: – A a Z2 bd Z2 – Z2 a – Z2 aZ2

    Hasil akhir setelah penghilanganrekursif kiri adalah:

    S cAA a bdS cAZ1

    Z1

    ab bZ1 ab Z1 bZ1A aZ2 bdZ2

    Z2 aZ2 aZ2

  • 8/18/2019 analisis sintaksis

    56/66

    Metode Parsing• Bottom Up Parsing

    – Bottom Up parser berusaha mencocokkan input denganaturan produksi.

    – Dalam kalimat koala MEMAKAN KURSI, parser akanmelihat kata KOALA, lalu mencari aturan apa yangmenghasilkan KOALA, dan kesimpulannya adalah, lalu berikutnya kata MEMAKAN adalah dan KURSI adalah . Dari ketigaaturan tersebut, kita bisa mereduksi menjadi sebuah

    , dan ternyata aksi ini bisa direduksi lagi menjadi sehingga input tersebut adalah valid

    – Kakas Bantu dengan metode Bottom Up : YACC/Bison

  • 8/18/2019 analisis sintaksis

    57/66

    Shift-reduce Parsing

    Comp 412, Fall 2010 57

    To implement a bottom-up parser, we adopt the shift-reduce paradigm

    A shift-reduce parser is a stack automaton with four actions• Shift — next word is shifted onto the stack• Reduce — right end of handle is at top of stackLocate left end of handle within the stack

    Pop handle off stack & push appropriate lhs• Accept — stop parsing & report success• Error — call an error reporting/recovery routine

    Accept & Error are simpleShift is just a push and a call to the scannerReduce takes | rhs | pops & 1 push

    But how does the parser know when to shift and when to reduce? It shifts until it has a handle at the top of the stack.

  • 8/18/2019 analisis sintaksis

    58/66

    Bottom-up Parser

    Comp 412, Fall 2010 58

    A simple shift-reduce parser: push INVALIDtoken next_token( )repeat until (top of stack = Goal and token = EOF )

    if the top of the stack is a handle A then // reduce to A

    pop | | symbols off the stack push A onto the stack

    else if (token EOF )then // shift

    push tokentoken next_token( )

    else // need to shift, but out of inputreport an error

    Figure 3.7 in EAC

    What happens on an error?It fails to find a handle

    Thus, it keeps shifting

    Eventually, it consumesall input

    This parser reads all inputbefore reporting an error, not adesirable property.

    Error localization is an issue inthe handle-finding process thataffects the practicality of shift-

    reduce parsers…We will fix this issue later.

  • 8/18/2019 analisis sintaksis

    59/66

    Back to x - 2 * y

    Comp 412, Fall 2010 59

    Stack Input Handle Action

    $ id - num * id none shift $ id - num * id

    1. Shift until the top of the stack is the right end of a handle

    2. Find the left end of the handle and reduce

    0 Goal Expr

    1 Expr Expr + Term2 | Expr - Term

    3 | Term

    4 Term Term * Factor

    5 | Term / Factor

    6 | Factor

    7 Factor number

    8 | id

    9 | ( Expr )

  • 8/18/2019 analisis sintaksis

    60/66

    Back to x - 2 * y

    Comp 412, Fall 2010 60

    Stack Input Handle Action$ id - num * id

    none shift $ id - num * id 8,1 reduce 8$ Factor - num * id 6,1 reduce 6$ Term - num * id 3,1 reduce 4 $ Expr - num * id

    1. Shift until the top of the stack is the right end of a handle

    2. Find the left end of the handle and reduce

    0 Goal Expr

    1 Expr Expr + Term2 | Expr - Term

    3 | Term

    4 Term Term * Factor

    5 | Term / Factor

    6 | Factor

    7 Factor number

    8 | id

    9 | ( Expr )

  • 8/18/2019 analisis sintaksis

    61/66

    Back to x - 2 * y

    Comp 412, Fall 2010 61

    Stack Input Handle Action$ id - num * id none shift $ id - num * id 8,1 reduce 8$ Factor - num * id 6,1 reduce 6$ Term - num * id 3,1 reduce 4 $ Expr - num * id

    1. Shift until the top of the stack is the right end of a handle

    2. Find the left end of the handle and reduce

    0 Goal Expr

    1 Expr Expr + Term2 | Expr - Term

    3 | Term

    4 Term Term * Factor

    5 | Term / Factor

    6 | Factor

    7 Factor number

    8 | id9 | ( Expr )Expr is not a handle at this point because it does not occur at this

    point in the derivation.

    While that statement sounds like oracular mysticism, we will seethat the decision can be automated efficiently.

  • 8/18/2019 analisis sintaksis

    62/66

    Back to x - 2 * y

    Comp 412, Fall 2010 62

    Stack Input Handle Action$ id - num * id none shift $ id - num * id 8,1 reduce 8$ Factor - num * id 6,1 reduce 6$ Term - num * id 3,1 reduce 3$ Expr - num * id none shift $ Expr - num * id none shift $ Expr - num * id

    1. Shift until the top of the stack is the right end of a handle

    2. Find the left end of the handle and reduce

    0 Goal Expr

    1 Expr Expr + Term2 | Expr - Term

    3 | Term

    4 Term Term * Factor

    5 | Term / Factor

    6 | Factor

    7 Factor number

    8 | id9 | ( Expr )

  • 8/18/2019 analisis sintaksis

    63/66

    Back to x - 2 * y

    Comp 412, Fall 2010 63

    Stack Input Handle Action$ id - num * id none shift $ id - num * id 8,1 reduce 8$ Factor - num * id 6,1 reduce 6$ Term - num * id 3,1 reduce 3$ Expr - num * id none shift $ Expr - num * id none shift

    $ Expr - num * id 7,3 reduce 7 $ Expr - Factor * id 6,3 reduce 6$ Expr - Term * id

    1. Shift until the top of the stack is the right end of a handle

    2. Find the left end of the handle and reduce

    0 Goal Expr

    1 Expr Expr + Term2 | Expr - Term

    3 | Term

    4 Term Term * Factor

    5 | Term / Factor

    6 | Factor

    7 Factor number

    8 | id9 | ( Expr )

  • 8/18/2019 analisis sintaksis

    64/66

    Back to x - 2 * y

    Comp 412, Fall 2010 64

    Stack Input Handle Action$ id - num * id none shift $ id - num * id 8,1 reduce 8$ Factor - num * id 6,1 reduce 6$ Term - num * id 3,1 reduce 3$ Expr - num * id none shift $ Expr - num * id none shift

    $ Expr - num * id 7,3 reduce 7 $ Expr - Factor * id 6,3 reduce 6$ Expr - Term * id none shift $ Expr - Term * id none shift $ Expr - Term * id

    1. Shift until the top of the stack is the right end of a handle

    2. Find the left end of the handle and reduce

    0 Goal Expr

    1 Expr Expr + Term2 | Expr - Term

    3 | Term

    4 Term Term * Factor

    5 | Term / Factor

    6 | Factor

    7 Factor number

    8 | id9 | ( Expr )

  • 8/18/2019 analisis sintaksis

    65/66

    Back to x - 2 * y

    Comp 412, Fall 2010 65

    5 shifts +9 reduces + 1accept

    Stack Input Handle Action$ id - num * id none shift $ id - num * id 8,1 reduce 8$ Factor - num * id 6,1 reduce 6$ Term - num * id 3,1 reduce 3$ Expr - num * id none shift $ Expr - num * id none shift

    $ Expr - num * id 7,3 reduce 7 $ Expr - Factor * id 6,3 reduce 6$ Expr - Term * id none shift $ Expr - Term * id none shift $ Expr - Term * id 8,5 reduce 8$ Expr - Term * Factor 4,5 reduce 4 $ Expr - Term 2,3 reduce 2 $ Expr 0,1 reduce 0 $ Goal none accept

    1. Shift until the top of the stack is the right end of a handle

    2. Find the left end of the handle and reduce

    0 Goal Expr

    1 Expr Expr + Term2 | Expr - Term

    3 | Term

    4 Term Term * Factor

    5 | Term / Factor

    6 | Factor

    7 Factor number

    8 | id9 | ( Expr )

  • 8/18/2019 analisis sintaksis

    66/66

    Back to x - 2 * y

    Goal

    Term

    Fact.

    Expr –

    Expr

    Fact.

    Fact.Term

    Term

    *

    Stack Input Action$ id - num * id shift $ id - num * id reduce 8$ Factor - num * id reduce 6$ Term - num * id reduce 3$ Expr - num * id shift $ Expr - num * id shift

    $ Expr - num * id reduce 7 $ Expr - Factor * id reduce 6$ Expr - Term * id shift $ Expr - Term * id shift $ Expr - Term * id reduce 8$ Expr - Term * Factor reduce 4 $ Expr - Term reduce 2 $ Expr reduce 0 $ Goal accept

    Corresponding Parse Tree