Handbook TeKom

download Handbook TeKom

of 58

Transcript of Handbook TeKom

  • 7/25/2019 Handbook TeKom

    1/58

    1 | P a g e

    Teknik Kompilator

    1. Pendahuluan

    Bahasa pemrograman adalah notasi untuk menjelaskan komputasi kepada orang dan

    mesin. Karena semua software yang berjalan pada semua computer menggunakan

    bahsa pemrograman, dimana program sebelum dijalankan harus diterjemahkan dahulu

    kedalam bentuk yang dapat dimengerti computer. Sistem software yang dapat

    melakukan terjemahan ini disebut dengan Compiler/ kompilator.

    Compiler adalah sebuah program yang dapat membaca program sumber dan

    menterjemahkannya kedalam Bahasa yang sama dengan Bahasa program yang

    merupakan Bahasa yang ditargetkan.

    Gambar1. Compiler

    Interpreter adalah salah satu jenis dari Bahasa prosesor, dimana menghasilkan target

    program sebagao terjemahan, interpreter langsung mengeksekusi operasi yang

    ditentukan dalam sumber masukan yang diberikan oleh pengguna.

  • 7/25/2019 Handbook TeKom

    2/58

    2 | P a g e

    Gambar2. Interpreter

    Program mesin-bahasa target yang dihasilkan oleh compiler biasanya jauh lebih cepat

    daripada interpreter pada saat pemetaan input ke output. bagaimanapun, Interpreter,

    biasanya dapat memberikan diagnosa kesalahan yang lebih baik daripada kompilator,

    karena mengeksekusi pernyataan program sumber dengan pernyataan.

    2. Struktur sebuah kompilator

    Gambar3. Struktur kompilator

  • 7/25/2019 Handbook TeKom

    3/58

    3 | P a g e

    Tahap 1 : Analisis Leksikal atau Scanning

    Tahap pertama dari compiler ini disebut analisis leksikal atau scanning yaitu membaca

    aliran karakter dan kelompok karakter yang membentuk program sumber dalam urutan

    yang bermakna disebut leksem. Dimana untuk setiap leksem, analisa leksikal

    menghasilkan output dalam bentuk :

    (token-name, attribute-value)

    Tahap 2 : Analisis sintaks / parsing

    Tahap kedua compiler adalah analisis sintaks atau parsing. Parser menggunakan

    komponen pertama dari token yang dihasilkan oleh penganalisis leksikal untuk

    membuat representas intermediate seperti pohon yang menggambarkan struktur

    gramatikal token. Sebuah representasi khas adalah pohon sintaks di mana setiap node

    merupakan operasi dan anak-anak dari simpul tersebut merupakan argumen operasi.

    Sebuah pohon sintaks untuk aliran token ditampilkan sebagai output dari analisa

    sintaksis pada Gambar4.

    Tahap 3. Analisis semantik

    Analisa semantik menggunakan pohon sintaks dan informasi dalam tabel simbol

    memeriksa program sumber untuk konsistensi semantik dengan Bahasa yang

    didefinisikam. Hal ini juga mengumpulkan jenis informasi dan menyimpannya baik

    pohon sintaks atau tabel simbol, untuk penggunaan selanjutnya pada tahap

    intermediate-code generation.

    Bagian penting dari analisis semantik adalah jenis pemeriksaan, di mana memeriksa

    masing-masing operator compiler yang memiliki operan. Sebagai contoh, banyak

  • 7/25/2019 Handbook TeKom

    4/58

    4 | P a g e

    definisi bahasa pemrograman membutuhkan indeks array bertipe integer; compiler

    harus melaporkan kesalahan jika angka floating-point digunakan untuk indeks array

    tersebut.

    Tahap 4 : Intermediate Code Generation

    Dalam proses menerjemahkan program sumber ke target kode, compiler dapat

    membangun satu atau lebih pernyataan intermediate, yang dapat memiliki berbagai

    bentuk. Pohon sintaks adalah bentuk representasi intermediate; mereka biasanya

    digunakan selama sintaks dan analisis semantik.

    Setelah sintaks dan analisis semantik dari program sumber, banyak compiler

    menghasilkan Bahasa tingkat rendah sacara eksplisit atau representasi intermediate

    seperti mesin, yang bisa anggap sebagai program untuk mesin abstrak. Representasi

    intermediate ini harus memiliki dua sifat penting: harus mudah untuk memproduksi dan

    harus mudah untuk menerjemahkan ke dalam mesin target.

    Tahap 5. Optimasi kode

    Tahap optimasi kode mesin-independen untuk meningkatkan kode intermediate

    sehingga target kode yang akan dihasilkan lebih baik. Berarti biasanya lebih baik lebih

    cepat, namun tujuan lain seperti kode pendek, atau target kode yang mengkonsumsi

    lebih sedikit daya. Sebagai contoh, sebuah algoritma sederhana menghasilkan kode

    intermediate gambar4 dengan menggunakan instruksi untuk setiap operator dalam

    representasi pohon yang berasal dari analisa semantik.

    Sebuah kode intermediate yang sederhana diukuti oleh optimasi akan menghasilkan

    target kode yang baik.

  • 7/25/2019 Handbook TeKom

    5/58

    5 | P a g e

    Tahap 6. Code Generation

    Code generator mengambil input dari representasi intermediate pada program sumber

    dan memetakannya ke Bahasa target. Jika Bahasa target adalah kode mesin, register

    atau lokasi memori yang dipilih untuk variable yang digunakan oleh program. Maka

    istruksi intermediate adalah menterjemahkan kedalam deretan intruksi Bahasa mesin

    yang melakukan tugas yang sama. Tugas yang utama code generation adalah

    menugaskan register untuk menengani variable

    Tahap Manajemen simbol-Table

    Fungsi penting dari compiler adalah untuk mencatat nama-nama variabel yang

    digunakan dalam program sumber dan mengumpulkan informasi tentang berbagai

    masing-masing nama atribut.

    Atribut ini dapat memberikan informasi tentang penyimpanan yang dialokasikan untuk

    nama, jenis, ruang lingkup (di mana dalam program nilainya dapat digunakan), dan

    dalam kasus nama prosedur, hal-hal seperti jumlah dan jenis argumen, metode

    melewati setiap argumen (misalnya, dengan nilai atau referensi), dan pengembalian

    tipe.

    Tabel simbol adalah struktur data yang berisi catatan untuk setiap variable nama,

    dengan kolom untuk atribut nama. Struktur data harus dirancang untuk memungkinkan

    compiler untuk menemukan record untuk setiap nama dengan cepat dan untuk

    menyimpan atau mengambil data dari record dengan cepat.

  • 7/25/2019 Handbook TeKom

    6/58

    6 | P a g e

    Gambar 4. Contoh proses kompilator

  • 7/25/2019 Handbook TeKom

    7/58

    7 | P a g e

    SCANNING

    Scanning atau analisis leksikal merupakan tahap dari kompilator yang bertugas

    membaca sumber program dari suatu file berdasarkan karakter dan membaginya

    kedalam token / logika unit.

    Token utama dalam program disebut besaran leksikal dimana, dibagi menjadi 4 yaitu :

    1. Identifier, merupakan keyword yang telah disediakan oleh program dan juga

    variabel

    2. Konstanta, merupakan nilai tetap yang tidak dapat berubah

    3. Operator, merupakan operator yang digunakan pada program

    4. Delimiter, merupakan pemisah pada program

    Contoh :

    IF A=10 then

    Begin

    Writeln nilai A=10;

    Else

    Writeln nilai bukan 10;

    Dari potongan program diatas maka besaran leksikal:

    Identifier Konstanta Operator Delimite

    IF, Then, Begin,

    Writeln, Else, A

    10, nilai A =10,

    nilai A bukan 10

    = Spasi, ; , enter

    Untuk merepresentasikan sebuah analisis leksikal maka dilakukan pembentukan token

    menggunakan ekspresi regular dan Finite state automata (FSA).

  • 7/25/2019 Handbook TeKom

    8/58

    8 | P a g e

    Ekspresi Reguler (ER)

    Digunakan untuk merepresentasikan pattern/ bentuk string untuk setiapkarakter, dan

    juga menjelaskan suatu set string.

    Contoh :

    Terdapat karakter dengan anggota = {a, b, c}. dimana nilai string yang

    dihasilkan harus sekali b muncul.

    Sehingga ER : (a|c)*b (a|c)*

    Dengan nilai string yang kemungkinan muncul :

    b, aba, aabc, ccbaca,

    Ekspresi regular untuk programming

    1. Pada program pascal, angka / digit terdiri dari decimal Contoh : 4578, 0933

    Dapat dibuat ER :

    Nama ER : nat

    Anggota ER : 0..9

    Sehingga ER : nat = [0..9]

    2. Identifier terdiri dari semua karakter dari a..z,A..Z dan 0..9

    Dengan kemungkinan kemunculan abc, aabcad, a01, Z09 dan lain-lain.

    Nama ER : Letter anggota :{a..z,A..Z}

    Nama ER : Digit anggota : {0..9}

    Maka : Letter = [a..z,A..Z]

    Digit = [0..9]

    Sehingga : Identifier = Letter (Letter|digit)*

  • 7/25/2019 Handbook TeKom

    9/58

    9 | P a g e

    Finite State Automata

    Digunakan untuk menjelaskan proses terbentuknya pattern/ bentuk dari inputan string

    dan juga dapat digunakan untuk konstruksi scanner.

    Contoh :

    1. FSA untuk Identifier = Letter (Letter|digit)*

    2. FSA untuk floating point number.

    Kemungkinan string yang akan muncul : + 0.123E+47

    - 147. 0E+31

    + 411. 8E-2

  • 7/25/2019 Handbook TeKom

    10/58

    10 | P a g e

    Latihan :

    1. Buatlah FSA pada program pascal untuk :

    a. Variable

    b. Konstanta

    c. Komentar

    d. Pengulangan while

  • 7/25/2019 Handbook TeKom

    11/58

    11 | P a g e

    Parsing

    Parsing bertugas untuk menentukan sintaks atau struktur dari sebuah program,

    karena alasan ini juga disebut analisis sintaks. Sintaks dari Bahasa pemrogrman

    biasanya diberikan berdasarkan produksi Bahasa context-free grammar (CFG) dengan

    cara yang mirip dengan aturan struktur leksikal.

    Contoh diketahui sebuah ekspresiaritmatika integer terdiri dari

    a. operator anggotanya adalah +, -, *

    b. digit anggotanya adalah 0..9

    Apabila bentuk CFG adalah , dimana kemungkinan muncul string adalah :

    Kemungkinan string

    muncul

    Pembentukan CFG CFG

    Digit 1

    12

    098

    number digit

    number digit digit

    number digit digit digit

    Number digit | digit *

    Digit 0|1||9

    Catatan :

    Tanda * berarti pengulangan

    Ekspresi 12+098

    (12*4)

    (12*4)/2+1

    Ekspresi number operator

    number

    Ekspresi (number operator

    number)

    Ekspresi (number operator

    number) number operator

    number

    Ekspresi ( ekspersi ) |

    ekspresi operator ekpresi |

    number

    Operator +|-|*

    Number digit | digit *

    Digit 0|1||9

  • 7/25/2019 Handbook TeKom

    12/58

    12 | P a g e

    Produksi CFG yang terbentuk adalah :

    Ekspresi ( ekspersi ) | ekspresi operator ekpresi | number

    Operator +|-|*

    Number digit | digit *

    Digit 0|1||9

    ekspresi, operator, number, digit disebut nama struktur atau didalam automata

    dikenal dengan variable

    +, -, *, 0..9disebut dengan simbolatau didalam automata dikenal dengan terrminal

    Bentuk CFG dalam sebuah kompilator akan diubah menjadi bentuk BNF (Barcus Naur

    Form )

    Perbedaan bentuk CFG dan BNF

    CFG

    merupakan nama struktur

    bisa berupa nama

    struktur, symbol,

    serangakain simbol atau

    nama struktur

    BNF

    ::=

    Nama struktur

    |

    Diapat dengan tanda < >

    ::=

    |

  • 7/25/2019 Handbook TeKom

    13/58

    13 | P a g e

    Contoh :

    Diberikan CFG

    Exp ( exp ) | exp op exp | number

    Op +|-|*

    Number digit | digit *

    Digit 0|1||9

    Maka BNF : ::= ( ) | |

    ::= +|-|*

    ::= | *

    ::= 0|1||9

    Selanjutnya untuk empermudah dalam proses parsing, maka CFG dan BNF dapat

    dibentuk menjadi sederhana menjadi symbol-simbol yanglebig sederrhana.

    CFG BNF Sederhana

    CFG BNF

    Exp ( exp ) | exp

    op exp | number

    Op +|-|*

    Number digit |

    digit *

    Digit 0|1||9

    ::= ( ) |

    |

    ::= +|-|*

    ::=

    | *

    ::= 0|1||9

    E ( E ) | E O E | N

    O +|-|*

    N D | D*

    D 0|1||9

    ( ) |

    |

    +|-|*

    |

    *

  • 7/25/2019 Handbook TeKom

    14/58

    14 | P a g e

    Derivation

    Pada CFG sebuah string dapat diterima, apabila dapat terbentuk proses derivasi.

    Derivasi adalah urutan pergantian nama struktur dengan pilihan sisi kanan dari

    produksi. Sebuah derivasi dimulai dengan sebuah nama struktur tunggal dan berakhir

    dengan sebuah string dari token symbol.

    Contoh.

    Diketahui sebuah grammar berikut :

    Exp ( exp ) | exp op exp | number

    Op +|-|*

    Number digit | digit *

    Digit 0|1||9

    Tentukanlah, string (34-3)*42 akan diterima atau ditolak pada grammar diatas!

    Derivasi untuk string (34-3)*42 :

    Exp > exp op exp [Exp exp op exp ]

    > exp op number [Exp number ]

    > exp op digit* [number digit* ]

    > exp op 42 [digit 42 ]

    > exp * 42 [op * ]

    > (exp)* 42 [Exp (exp)]

    > (exp op exp)* 42 [Exp exp op exp ]

    > (exp op number)* 42 [Exp number ]

    > (exp op digit)* 42 [number digit ]

  • 7/25/2019 Handbook TeKom

    15/58

    15 | P a g e

    > (exp op 3)* 42 [digit 3 ]

    > (exp -3)* 42 [op - ]

    > (number -3)* 42 [Exp number ]

    > (digit* -3)* 42 [number digit* ]

    > (34-3)* 42 [digit 34 ]

    Pohon Parsing / Parse Tree

    Pohon parsing digunakan untuk menampilkan proses penurunan atu derivasi sebuah

    string menuju terminal menggunakan pohon.

    Pohon parsing yang sesuai dengan derivasi adalah pohon berlabel dimana bagian node

    diberkan label nama struktur dan bagian daun untuk terminal/ symbol

    Contoh : pohon

    parsing untuk string

    (34-3)*42 adalah

    sebagai berikut :

  • 7/25/2019 Handbook TeKom

    16/58

    16 | P a g e

    Pengulangan / rekursif pada Grammar

    pada grammar sering terjadi pengulangan yang disebut rekursif.

    Dimana rekursif :

    Dan

    Kondisi seperti ini, dibuthkan sebuah notasi ekstensi yang disebut extended BNF atau

    EBNF. Dimana dilambangkan dengan tanda { } atau [ ]

    Contoh rekursif kanan:

    Dimana : A = stmt-sequence

    = stmt ;

    = stmt

    bentuk EBNF :

    Atau

  • 7/25/2019 Handbook TeKom

    17/58

    17 | P a g e

    Diagram sintaks

    Merupakan grafik visualisasi dari BNF dan EBNF, dimana

    Nama struktur dilambangkan persegi,

    Symbol dilambangkan lingkaran

    Contoh :

    1. Diberikan grammar

    Diagram sintaks :

    2. Diberikan grammar :

    Bentuk EBNF :

    Diagram sintaks :

  • 7/25/2019 Handbook TeKom

    18/58

    18 | P a g e

    Algoritma Parser

    Parser

    Top down parser

    (TOP)

    Bottom Up Parser (BUP)

    TOP with Full Backtracking Operator Procedure Parser LR ParserTOP without Backtracking

    Brute force method Recursive descent parser Non recursive descent

    (LL(1))

    LR (0)

    LR(1)

    SLR (1)

    LALR(1)

  • 7/25/2019 Handbook TeKom

    19/58

    19 | P a g e

    TOP DOWN PARSER

    Menguraikan string berupa token dengan menelusuri langkah-langkah dalam derivasi

    paling kiri (terkiri).

    LL(1)

    Merupakan algortima parsing tanpa bactrcaking. L pertama mengacu pada proses

    input dari kiri ke kanan, L kedua mengacu pada penusuran sebuah derivasi dari paling

    kiri untuk setiap string.

    LL((1) menggunakan tumpukan / stack untuk melakukan parser.

    Untuk menentukan Action dari sebuah parsing dapat dibentuk dengan sebuah tabel,

    dengan aturan :

    1. Menggantikan symbol nonterminal A pada stack paling atasdengan sebuah

    string menggunakan aturan grammar yang dipilih A dan

    2. Match / cocokan sebuah token pada stack paling atas dengan masukan token

    berikutnya.

    Contoh :

    Pembentukan tabel parsing action LL(1) dengan string () :

  • 7/25/2019 Handbook TeKom

    20/58

    20 | P a g e

    TOP dimulai dengan memasukkan simbol awal di atas stack, akan menerima input

    string jika, setelah serangkaian tindakan / action, stack dan input menjadi kosong.

    Skema umum untuk TOP yang diterima adalah :

    Algortitma parsing LL(1) tabel M[N,T] :

    1. Jika A adalah produksi yang dipilih dan terdapat derivasi =>*, dimana

    adalah sebuah token, maka tambahkan A kedalam tabel M[A,]

    2. Jika A adalah produksi yang dipilih dan terdapat derivasi =>*, dan

    A. Dimana S adalah symbol awal dan adalah sebuah token

    (atau ) maka tambahkanAkedalam tabel M[A,].

    Tabel LL(1) parsing M[N,T] :

  • 7/25/2019 Handbook TeKom

    21/58

    21 | P a g e

    Kolom pertama menunjukkan dari tumpukam parsing

    Kolom kedua menunjukkan input

    Kolom ketiga mengubah stack dan juga kemungkinan input

    EBNF pada LL(1)

    Pengulangan pada LL(1) dapat mengakibatkan sebuah grammar tidak dapat digunakan

    atau titolak. Untuk itu dilakukan penghilangn rekursif kiri, dengan cara :

    1. Penghilangan rekursif kiri

    2. Penghilangan faktor

    1. Penghilangan rekursif kiri

  • 7/25/2019 Handbook TeKom

    22/58

    22 | P a g e

    Contoh :

    Penghilangan rekursif kiri, dimana :

    Dimana :

    Produksi yang tidak memiliki rekursif kiri :

    2. Penghilangan factor

    Ketika dua atau lebih grammar yang memiliki bentuk :

    Contoh :

    Dimana : A = stmt-sequence, =stmt, = ;stmt-sequence

    Produksi yang telah dilakukan penghilangan factor :

  • 7/25/2019 Handbook TeKom

    23/58

    23 | P a g e

    FIRST AND FOLLOW SET

    Untuk membuat sempurna algoritma LL(1) maka buatlah tabel parsing LL(1), yang

    menggunakan First dan Follow

    First Set

    Diberikan X sebuah symbol grammar atau maka first(x) didefinisikan sebagai berikut :

    1. Jika X adalah sebuah terminal atau maka first(x)={X}

    2. Jika X adalah sebuah nonterminal, maka untuk setiap produksi yang dipilih

    XX1X2..Xn, first (x) mengandung first(x1) = {}, untuk setiap i

  • 7/25/2019 Handbook TeKom

    24/58

    24 | P a g e

    2. Dengan algoritma diatas maka dibentuk first dari grammar diatas sebagai beikut

    FOLLOW SET

    Diberikan sebuah nonterminal A, maka follow(A) akan menghasilkan terminal dan

    kemungkinan $, yaitu :

    1. Jika A adalah symbol awal, maka $ adalah follow(A)

    2. Jika terdapat produksi BA maka first() = {} dimana terdapat dalam

    follow(A)

    3. Jika terdapat produksi BA mengandung dalam first() maka follow (A)

    merupakan follow (B)

    Contoh :

    Maka untuk follow dari grammar diatas :

  • 7/25/2019 Handbook TeKom

    25/58

    25 | P a g e

    RECURSIVE DESCENT PARSER

    Menampilkan aturan grammar untuk sebuah nonterminal A sebagai definisi dari

    sebuah procedure, yang dapat dikenal sebagai procedure A.

    Algoritma proceudure Recursivedescent perser :

    1. Sisi kanan dari produksi A merupakan struktur kode untuk procedure.

    2. Urutan terminal dan nonterminal sesuai dengan input dan memanggil

    procedure lainnya,

    Jika bertemu terminal maka lakukan pemilihan sesuai dengan kode (if dan

    case).

    Jika bertemu nonterminal maka panggil procedure dengan nama yang sama

    dengan nama nonterminal

    Contoh :

    Diberikan sebuah grammar berikut:

    Maka pseudocode untuk factor :

  • 7/25/2019 Handbook TeKom

    26/58

    26 | P a g e

    Dimana pseudocode untuk procedure match :

    Error Recovery pada Top Down Parser

    Error recovery pada Recursive Descent parser biasanya disebut dengan panic mode,

    dimana symbol melewatkan input sampai tanda yang silih akan sama dengan tanda

    yang muncul.

    Beberapa algortima heuristic untuk panic mode :

    1. Sebagai titik awal, menempatkan semua simbol dalam FOLLOW (A) ketika

    sinkronisasi untuk nonterminal A. Jika kita lewati token sampai unsur FOLLOW

  • 7/25/2019 Handbook TeKom

    27/58

    27 | P a g e

    (A) terlihat dan pop A dari tumpukan, ada kemungkinan bahwa parsing dapat

    dilanjutkan.

    2. Hal ini tidak cukup untuk menggunakan FOLLOW (A) sebagai sinkronisasi

    ditetapkan untuk A.

    Sebagai contoh, jika titik koma mengakhiri pernyataan, seperti di Pascal, maka

    kata kunci yang dimulai dengan pernyataan mungkin tidak muncul di set

    FOLLOW yang mewakili ekspresi nonterminal.

    A kehilangan titik koma setelah sebuah tugas akan menyebabkan hasil dalam

    kata kunci awal pada pernyataan berikutnya dilewati. Seringkali, ada struktur

    hirarkis pada konstruksi dalam bahasa; misalnya, ekspresi muncul dalam

    pernyataan, yang muncul dalam blok, dan seterusnya.

    Kita bisa menambahkan set sinkronisasi dari tingkat rendah untuk membangun

    simbol-simbol yang dimulai dari tingkat yang lebih tinggi konstruksi. Sebagai

    contoh, kita bisa menambahkan kata kunci yang dimulai pernyataan begin untuk

    sinkronisasi sebagai nonterminals yang menghasilkan ekspresi.

    3. Jika kita menambahkan simbol di FIRST (A) ke sinkronisasi untuk nonterminal A,

    maka dimungkinkan untuk melanjutkan parsing menurut A jika simbol di FIRST

    (A) muncul dalam input.

    4. Jika nonterminal dapat menghasilkan string kosong, maka produksi berasal

    dapat digunakan sebagai default/ standar. Hal tersebut dapat menunda

    beberapa deteksi kesalahan, tetapi tidak dapat menyebabkan kesalahan akan

    terlewaatkan. Pendekatan ini mengurangi jumlah nonterminals yang harus

    dipertimbangkan selama pemulihan kesalahan.

  • 7/25/2019 Handbook TeKom

    28/58

    28 | P a g e

    5. Jika terminal di atas tumpukan tidak cocok, maka pop terminal, kemudian

    mengeluarkan pesan yang mengatakan bahwa terminal itu dimasukkan, dan

    meneruskan parsing. Akibatnya, pendekatan ini membutuhkan sinkronisasi

    token yang terdiri dari semua token lainnya.

    Contoh :

    Tabel parsing :

    Error recovery untuk string id+id*id menggunakan panic mode dimana menambahkan

    token untuk sinkronasi pada tabel.

  • 7/25/2019 Handbook TeKom

    29/58

    29 | P a g e

    Dimana input yang salah adalah ) id * + id

  • 7/25/2019 Handbook TeKom

    30/58

    30 | P a g e

    BOTTOM UP PARSING

    Operator Procedure Parser

    Merupakan proses menafsirkan sebuah operator akan dikerjakan terlebih dahulu atau

    dikerjakan setelahnya.

    Operator Grammar

    Digunakan untuk membandingkan level dari satu operator dengan operator lainnya.

    Contoh pada matematika, jika diketahui persamaan a+b/c, maka operator / akan

    dikerjakan terlebih dajulu kemudian diikuti dengan operator +.

    Disini terlihat maka level operator / lebih tinggi dari +.

    Maka untuk menentukan sebuah operator grammar dengan menggunakan sebuah

    Operator Precedence Parsing,yaitu :

    Tata Bahasa yang memiliki sifat yang produksinya pada sisi kanan tidak memiliki atau

    dua nonterminal yang bersebelahan / berturut-turut.

    Grammar yang termasuk Operator

    grammar

    E E + E | E * E | ( E ) | id

    Grammar yang bukan operator grammar

    E E A E | ( E ) | - E | id

    A + | - | * | / | ^

    Algoritma membuat tabelOperator Precedence Parsing :

    1. Buatlah tabel M[Ni,Nj] dimana N adalah operator

    2. Bandingkan I dan j :

    http://compilerdesigndetails.blogspot.com/2012/02/operator-precedence-parsing.htmlhttp://compilerdesigndetails.blogspot.com/2012/02/operator-precedence-parsing.htmlhttp://compilerdesigndetails.blogspot.com/2012/02/operator-precedence-parsing.htmlhttp://compilerdesigndetails.blogspot.com/2012/02/operator-precedence-parsing.htmlhttp://compilerdesigndetails.blogspot.com/2012/02/operator-precedence-parsing.htmlhttp://compilerdesigndetails.blogspot.com/2012/02/operator-precedence-parsing.html
  • 7/25/2019 Handbook TeKom

    31/58

    31 | P a g e

    a. apabila keduanya memiliki input yang sama yaitu berupa string atau $, maka

    tidak dapat dibandingkan.

    b. Apabila operator yang dibandingkan adalah :

    + dengan + maka berikan tanda >

    + dengan * maka berikan tanda

    String dengan + maka berikan tanda >

    Dimana string merupakan operator paling tinggi dan $ operator paling rendah

    Algoritma bottom up dengan operator precedence :

    1. Bentuk kedalam pita stack $

    2. Bandingkan input i,j

    a. apabila menghasilkan tanda maka input tersebut di pop/ mengambil dari

    stack

    3. kerjakan langkah 2 hingga input berakhir, dan apabila mencapai struktur teratas /

    produksi kiri maka proses berhasil/ diterima/ accept

    Contoh :

    E E + E | E * E | ( E ) | id

    Dengan string : id+id*id $

    Maka tabel M[Ni,Nj] yang terbentuk :

  • 7/25/2019 Handbook TeKom

    32/58

    32 | P a g e

    Bottom up dengan operator precedence :

    $ dengan id tanda < maka push id

    Id dengan + tanda > maka pop id

    $ dengan + tanda > maka push +

    + dengan id tanda < maka push id

    id dengan * tanda > maka pop id

    $

    $ Id

    EId

    +

    $ Id

    EId

    +

    id

    $ Id +

    EId

    +

    id

    $ Id + id

    http://4.bp.blogspot.com/-i4KvOj_E1bo/TztCVNymgPI/AAAAAAAAAHo/ovDOknD6Omg/s1600/ss6.JPG
  • 7/25/2019 Handbook TeKom

    33/58

    33 | P a g e

    + dengan * tanda < maka push*

    * dengan id tanda < maka push id

    id dengan $ tanda > maka pop id

    * dengan $ tanda > maka pop *

    E

    E

    Id

    +

    id

    *

    $ Id + Id

    E

    E

    Id

    +

    id

    *

    id

    $ Id + Id *

    E

    E

    Id

    +

    id

    *

    id

    $

    $ Id + Id * Id

    E

    E

    E

    Id

    +

    id

    *

    id

    $

    $ Id + Id * Id

  • 7/25/2019 Handbook TeKom

    34/58

    34 | P a g e

    + dengan $ tanda > maka pop +

    $ dengan $ berhenti, diterima

    Hubungan operator pada tabel perbandingan :

    Digunakan untuk menentukan urutan level operator paling tinggi dan terendah.

    Menggunakan persamaan fungsi.

    1. Tentukan dahulu fungsi berdasarkan kolom dan baris

    2. Bandingkan dua fungsi, apabila fungsi pertama lebih besar dari fungus kedua,

    maka fungsi dua menuju fungsi satu.

    Contoh :

  • 7/25/2019 Handbook TeKom

    35/58

    35 | P a g e

    grafik yang merepresentasikan fungsiprecedence :

    Digambarkan :

    gidf*g*f*g+f$

    fidg*f+g+f$

    sehingga didapat prioritas operator dari tertinggi hingga ke rendah adalah :

    id + * $

    f 4 2 4 0

    g 5 1 3 0

    Maka urutan tertinggi untuk * dan + adalah f* bernilai 4 lebih besar dari g+ bernilai 1,

    sehingga * operator tertinggi dari +.

    http://2.bp.blogspot.com/-_4VQ09EgVrM/TztCZaFJkuI/AAAAAAAAAHw/v979Z-8dai0/s1600/ss7.JPG
  • 7/25/2019 Handbook TeKom

    36/58

    36 | P a g e

    LR (0) PARSER

    Sebuah produksi disebut LR(0) apabila A yang dipilih dan jika dan adalah dua

    symbol string (termasuk empty) dimana = maka A.. (tidak ada acaun secara

    eksplisit untuk menunu string yang didepan lookahead)

    Contoh :

    Grammar tesebut memiliki 3 produksi yang dipilih dan 8 item :

    LR(0) parser terjadi apabila tidak ada lookahead yang dapat diperiksa setelah muncul

    parsing di stack, dan jika ini terjadi maka tidak dapat dihitung sebagi string.

    Transisi pada LR(0) digunakan untuk menunjukkan state-state yang menginformasikan

    stack parsing dan proses dari shift dan reduksi pada parser. Yaitu apabila A.dan

    dimulai dengan symbol X, yang mana X mungkin adalah sebuah token dan nonterminal

    maka dapat ditulis A.Xsehingga terdapat transisi pada symbol X yaitu :

    Dan jika X adalah sebuah token, maka transisi merupakan shift dari X dmana input

    paling atas stack merupakan sebuah parsing. Pada kasus lain jika X adalah sebuah non

  • 7/25/2019 Handbook TeKom

    37/58

    37 | P a g e

    terminal, maka push X kedalam stack dimana ini hanya terjadi apabila X. Karena

    adanya dan state X. maka proses di mulai, dimana setiap A.X harus

    ditambah sebuah transisi

    Contoh :

    Transisi dari grammar diatas :

    Algoritma LR(0) untuk tabel parse :

    1. Jika state S berisi A.X, dimana X adalah terminal, maka pop string dari

    stack

    Jika token adalah X dan state S berisi A.X, maka state baru di push

    kedalam stack yang berisiAX.

  • 7/25/2019 Handbook TeKom

    38/58

    38 | P a g e

    Jika token bukan X untuk beberapa item di dalam stack S maka berikan

    penjelasa error

    2. Jika state memiliki item lengkap (A .) maka langkah berikutnya A .

    Reduksi aturan S S, dimana S adalah state awal yag diterima, memberikan

    input kosong dan pesan kesalahn apabila input tidak kosong.

    Contoh :

    Transisi grammar :

    Tabel Action parser dengan string ((a))

  • 7/25/2019 Handbook TeKom

    39/58

    39 | P a g e

    Tabel LL(0) parser dengan string ((a))

    SLR(1) parsing / simple LR(1) parsing

    Algoritma SLR(1) parsing :

    1. Jika satate S berisi A .X, dimana X adalah terminal dan X adalah token

    berikutnya dalam string masukkan, maka shift ke stack, dan state baru di push

    ke stack A X.

    2. Jika state S adalah A . dan token berikutnya adalah follow(A), maka

    berikutnya reduksi A .A oleh SS, dimana S adalah state awal, maka aturan

    diterima apabila input berikutnya adalah $.

    Dalam beberapa kasus, state baru dihitung sebagai berikut :

    Hapus dan semua state yang berhubungan dari stack parsing. Kemudian, buat

    state yang dimulai dari dimana B.A. , push A ke dalam stack dan push

    BA.

    3. Jika input berikutnya bukan kedua kasus diatas, maka beri penjelasan error

    Algoritma SLR(!) di gunakan apabila :

  • 7/25/2019 Handbook TeKom

    40/58

    40 | P a g e

    1. Untuk semua A.X dalam S dengan X adalah terminal, tidak ada B. pada

    S dengan X adalah follow (B)

    2. Untuk A dan B pada S, maka follow(A) n follow(B) adalah empty

    Contoh :

    Terlihat bahwa :

    Transisi LR(0) parsing

    Membuat nomor untuk skema tabel dimana :

  • 7/25/2019 Handbook TeKom

    41/58

    41 | P a g e

    Sehingga tabel SLR(1) parsing :

    LR(1) PARSING

    Kesulitan pada SLR(1) adalah meenrapkan lookahead pada transisi LR(0), dimana

    SLR(0) mengabaikan lookahead. Dengan menggunkan LR(1) parsing, membangun

    transisi baru untuk membuat lookahead dari awal.

    Algortima table LR(1) :

    1. Jika state S berisi banyak LR(1) yang berasal dari bentuk [A.X, a], dimana X

    adalah sebuah terminal dan X adalah token dalam string input berikutnya, maka

    action adalah Shift input token tersebut kedalam stack, dan state baru di push

    kedalam stack [AX.,a]

    2. Jika statae S berisi LR(1) [A., a] dan token berikutnya dalam string input

    adalah a, maka action adalah reducsi aturan A. A direduksi dengan aturan

  • 7/25/2019 Handbook TeKom

    42/58

    42 | P a g e

    SS, dimana S adalah state awal sama dengan diterima (ini terjadi jika input

    token adalah $)

    Dalam kasus lain, state baru dibentuk sebagai berikut :

    Hapus string dan semu state yang berhubungan dengan stack parsing, bangun

    state transisi dari bentu [B.A,b], push A kedalam stack dan push stack

    tersebut dengan [B., b]

    3. Jika input berikut bukan dua kasus diatas maka beri penjelasan error

    Contoh :

    Langkah transisi Parsing tabel LR(1)

  • 7/25/2019 Handbook TeKom

    43/58

    43 | P a g e

    Hasil Transisi LR(1)

    LALR(1) PARSING / LOOKAHEAD-LR PARSING

    LALR didasarkan pada pengamatan bahwa, dalam banyak kasus pembentukan transisi

    LR1 adalah karena sebagian adanya banyak state yang berbeda yang memiliki set

    yang sama komponen pertamanya (pada lookaheads simbol).

    inti dari keadaan transisi dari LR (1) item adalah himpunan LR (0) item yang terdiri dari

    komponen-komponen pertama LR (1) di state.

    Untuk membentuk transisi LALR(1) dari LR(1) ada 2 prinsip yang harus diperhatikan :

    1. Transisi dari LR(1) merupakan transisi dari LR(0)

    2. Diberikan dua state yaitu S1 dan S2 dari transisi LR(1) yang memiliki inti yang

    sama. Misalkan ada transisi pada symbol X dari state S1 menuju t1. Dan juga

  • 7/25/2019 Handbook TeKom

    44/58

    44 | P a g e

    ada transisi X dari state S2 ke state t2, sementara t1 dan t2 memiliki init yang

    sama.

    Contoh :

    Transisi LALR(1)

  • 7/25/2019 Handbook TeKom

    45/58

    45 | P a g e

    ANALISIS SEMANTIK

    Disebut analisis semantik karena melibatkan informasi yang berada di luar kapabilitas

    CFG dan algoritma parsing ;standar dan komputasi, oleh karena itu tidak dianggap

    sebagai sintaks.Informasi yang diproses juga terkait erat dengan makna akhir dari

    program yang diterjemahkan.

    analisis semantik dapat dibagi menjadi dua kategori :

    Pertama adalah analisis program yang dibutuhkan oleh aturan bahasa pemrograman

    untuk memberikan kebenaran dan menjamin pelaksanaan yang tepat berdasarkan

    aturan.

    Kedua, kategori analisis adalah analisis yang dilakukan oleh compiler untuk

    meningkatkan efisiensi pelaksanaan program penerjemah.

    ATRIBUT DAN ATRIBUT GRAMMAR

    Atribut merupakan salah satu pembentuk konstruksi Bahasa pemrograman. Atribut

    mengandung berbagai informasi, kompeksitas dan waktu proses eksekusi.

    Contoh atribut :

    1. Tipe data dan variable

    2. Nilai dari suatu ekspresi

    3. Lokasi variable pada memory

    4. Kode objek dari sebuah prosedur

    5. Jumlah digit yang signifikan dari sebuah angka

    Proses komputasi atribut dan asosiasinya dihitung dengan nilai kontruksi Bahasa

    yang disebut pengikat /binding

  • 7/25/2019 Handbook TeKom

    46/58

    46 | P a g e

    Atribut grammar

    Jika X adalah sebuah grammar dan a adalah sebuah atribut yang dikaitkan dengan

    X, maka ditulis X.a untuk nilai a binding dengan X.

    atribut tata bahasa yang ditulis dalam bentuk tabel, dengan setiap aturan tata

    bahasa yang terdaftar dengan persamaan atribut, atau aturan semantik yang

    berhubungan dengan aturannya , sebagai berikut:

    Contoh :

    Tata bahasa berikut untuk unsigned number

    Pembentukan grammar rules :

  • 7/25/2019 Handbook TeKom

    47/58

    47 | P a g e

    Sehingga tabel analisis semantic :

    Pohon parsing untuk string 345 pada analisis semantic :

    Algoritma komputasi atribut menggunakan dependency graph dan Evaluation

    order.

    Diberikan sebuah grammar, dimana memiliki aturan dependency graph, setiap graph

    memiliki node yang dilabelkan sebagai atribut dengan aturan sebagai berikut :

    Sehingga grammar berikut yang memiliki atribut :

  • 7/25/2019 Handbook TeKom

    48/58

    48 | P a g e

    Dapat dibuat aturan dependency graph :

    Atau (karena dependency graph menghilangkan subkrip untuk symbol yang berulang

    karena reperensi graph jelas membedakan kejadian yang berbeda sebagai node yang

    berbeda )

    Sehingga string 345, dependency graph nya sebagai berikut :

    Diketahui bahwa grafik harus acyclic, maka graph juga bersifat directed acyclic graph

    (DAG). Contoh DAG untuk string 345o :

  • 7/25/2019 Handbook TeKom

    49/58

    49 | P a g e

    SYMBOL TABLE / Tabel simbol

    Symbol table dalam kompilator adalah sebauh struktur data tipe kamus data,degna 3

    operator yairu insert, lookup dan delete.

    Struktur dari tabel symbol / tabel hash adalah sebagai berikut :

    Contoh :

  • 7/25/2019 Handbook TeKom

    50/58

    50 | P a g e

    Maka tabel simbol untuk procedure f :

    Tabel symbol sebelum deklarasi procedure f

    tabel symbol setelah deklarasi pada procedure f

  • 7/25/2019 Handbook TeKom

    51/58

    51 | P a g e

    Tabel symbol setelah keluar dari deklarasi (dan menghapusnya)

    DATA TYPES DAN TYPE CHECKING (TIPE DATA DAN PEMERIKSAAN TIPE

    DATA)

    Data Types

    Salah satu tugas pokok kompilator adalah komputasi dan maintenance informasi

    tentang jenis data dan penggunaan inforasi tersebut untuk memastikan bahwa setiap

    bagian dari sebuah program sesuai dengan aturan Bahasa ( type checking).

    Tipe data adalah seperangkat nilai atau lebih, dimana satu set nilai memiliki operasi

    tertentu pada nilai tersebut. Contoh, bilangan integer pada Bahasa programming

    merupakan subset bilangan bulat dan operasi aritmatika seperti + dan *.

  • 7/25/2019 Handbook TeKom

    52/58

    52 | P a g e

    Type Checking

    Type checking meliputi :

    1. Deklarasi menyebabkan jenid identifier yang akan dimasukkan ke dalam tabel

    symbol.

    Contoh grammar berikut :

    Apabila yang akan di check adalah :

    Maka Action semantic analisis nya :

    Terlihat bahwa types dari grammar diatas, memiliki struktur pohon yang disebut

    dengan struktur Array :

    Dapat dibuat pohon untuk struktur array :

    2. Statement, tidak memiliki tipe data. Tapi bagian struktur harus diperiksa untuk

    koreksi tipe data.

  • 7/25/2019 Handbook TeKom

    53/58

    53 | P a g e

    3. Ekspresi, seperti angka dan nilai Boolean (true dan false) akan dijelaskan

    sebagai tipe integer dan Boolean

    4. Overloading, periksaan operator, yang mana disebut overload apabila nama

    operator yang sama digunakan untuk 2 atau lebiih operasi yang berbeda

  • 7/25/2019 Handbook TeKom

    54/58

    54 | P a g e

    INTERMEDIATE-CODE GENERATION

    Gambar struktur logika dari sebauh kompilator (frond end)

    Gambar sebuah kompilator yang digunakan untuk merepresentasikan intermediate

    Three- Address Code

    Pada Three- Address Code, operator pada sisi sebelah kanan akan terbentuk

    menjadi 3 alamat intruksi, miaslkan x+y*x akan menjadi :

    Dimana t1 dan t2 adalah nama sementara untuk tempat penyimpanan data.

    Contoh :

  • 7/25/2019 Handbook TeKom

    55/58

    55 | P a g e

    Deskripsi instruksi three-address menentukan komponen dari setiap jenis instruksi,

    tetapi tidak menentukan representasi dari instruksi dalam struktur data. Dalam

    kompilator, petunjuk ini dapat diimplementasikan sebagai objek atau sebagai catatan

    untuk operator dan operan. Tiga representasi itu disebut "quadruples," "triples," and

    "indirect triples."

    Quadruples

    Sebuah quadruple (atau hanya "quaff ') memiliki empat bidang, yang kita sebut op, argl'

    arg2, dan hasilnya/ result.

    Contoh :

    menjadi :

    Triples

    Sebuah triple hanya memiliki tiga bidang, yang disebut op, arg1, dan arg2

    Contoh :

  • 7/25/2019 Handbook TeKom

    56/58

    56 | P a g e

    indirect triples

    indirect triples terdiri dari daftar pointer ke Triple, contoh :

    Static Single-Assignment Form / SSA

    (SSA) merupakan representasi intermediated yang dapat memfasilitasi optimasi kode

    tertentu.

  • 7/25/2019 Handbook TeKom

    57/58

    57 | P a g e

    Code Generation

    Tahap akhir dalam model compiler kami adalah code generator. Yang memerlukan

    input dari representasi intermediate (IR) yang dihasilkan oleh front-end compiler,

    beserta informasi tabel simbol yang relevan, dan menghasilkan output program.

    Gambar posisi code generator dalam kompilator

    P-CODE

    p-code dimulai sebagai standar kode sasaran assembly yang dihasilkan oleh sejumlah

    compiler pascal tahun 1970-an dan awal 1980-an. Dirancang untuk menjadi kode yang

    sebenarnya untuk mesin stack hipotetis, yang disebut p-mesin,dimana terjemahan

    ditulis pada berbagai mesin yang sebenarnya.

    Contoh :

    p-code :

    Diketahui grammar sebagi berikut :

  • 7/25/2019 Handbook TeKom

    58/58

    Maka akan dibentuk sintesis string (x=x+3)+4 atribut, dari p-code :