tugas rangkuman Teknik kompilasi.docx

download tugas rangkuman Teknik kompilasi.docx

of 63

Transcript of tugas rangkuman Teknik kompilasi.docx

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    1/63

    i

    Rangkuman Tehnik Kompilasi

    Dosen : Nahot Frastian S.Kom

    Mata Kuliah : Tehnik Kompilasi

    Disusun Oleh : Khusnan Hidayat Aji R 201043501534

    Kelas : R6P

    Program Studi : Teknik Informatika

    Universitas Indraprasta

    2013

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    2/63

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    3/63

    3

    Kelebihan :

    1. Eksekusi cepat

    2. Masih bisa dipelajari daripada bahasa mesin

    3. File hasil sangat kecil.

    Kekurangan :

    1. Tetap sulit dipelajari

    2. Program sangat panjang.

    1.3 Bahasa Tingkat Tinggi (High Level Language) / User Oriented

    Bahasa ini lebih dekat dengan bahasa manusia. Bahasa ini juga

    memberikan banyak sekali fasilitas kemudahan pembuatan program, misalnya:

    variabel, tipe data, konstanta, struktur kontrol, loop, fungsi, prosedur dan lain-lain.

    Contoh: Pascal,dephi dll

    Keuntungan :

    1.Mudah dipelajari

    2.Mendekati permasalahan yang akan dipecahkan

    3.Kode program pendek

    Kerugian :

    1. Eksekusi lambat

    1.4 Bahasa yang berorientasi pada masalah spesifik (specific problem oriented).

    Bahasa ini adalah bahasa yang digunakan langsung untuk memecahkan suatu masalah

    tertentu.

    Contoh : SQL untuk aplikasi database dll

    2.Translator

    Translator (penerjemah) melakukan pengubahansource code / source program (program

    sumber) ke dalam target code / object code / object program (program objek). Source code

    ditulis dalam bahasa sumber, object code berupa bahasa pemrograman lain / bahasa mesin pada

    suatu computer.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    4/63

    4

    Gambar 1.1. Alur kerja Translator

    Ada beberapa macam translator, yaitu :

    a.Assembler

    Source code adalah bahasa assembly, object code adalah bahasa mesin

    contoh : Turbo Assembler, Macro Assembler

    Gambar 1.2. Alur kerja Assembler

    b.Interpreter

    Input berupa source code yaitu bahasa scripting seperti PHP, Basic, Perl, Javascript, ASP,Java bytecode, Basic, Matlab, Matematica, Ruby.

    Interpreter tidak menghasilkan object code.Hanya menghasilkan translasi internal. Input

    dapat berasal dari source code maupun dari inputan program dari user.Source code dan inputan

    data user diproses pada saat yang bersamaan.

    Pada interpreter, program tidak harus dianalisis seluruhnya dulu, tapi bersamaan dengan

    jalannya program.

    Keuntungan : mudah bagi user, debuging cepat

    Kekurangan : eksekusi program lambat, tidak langsung menjadi program executable.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    5/63

    5

    Gambar 1.3. Alur kerja Intepreter

    c. Compiler

    Istilah compilermuncul karena dulu ada program yang menggunakan subrutin-subrutin atau

    pustaka-pustaka untuk keperluan yang sangat khusus yang dikumpulkan menjadi satu sehingga

    diistilahkan compiled.

    Input berupa source code program seperti Pascal, C, C++. Object code adalah bahasa

    assembly. Source code dan data input diproses pada saat yang berbeda.

    Compile time adalah saat pengubahan dari source code menjadi object code. Runtime adalah

    saat eksekusi object code dan mungkin menerima input data dari user. Output : bahasa assembly.

    Kemudian oleh linker dihasilkan file EXE.

    Kekurangan : debugging lebih lambat

    Keuntungan : eksekusi program lebih cepat, menghasilkan file executable yang berdiri sendiri.

    Gambar 1.4. Alur kerja Compiler

    3.Tahaptahap Kompilasi

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    6/63

    6

    Kompilator (compiler) adalah sebuahprogram yang membaca suatu program yang ditulis

    dalam suatu bahasa sumber (source language) dan menterjemah-kannya ke dalam suatu bahasa

    sasaran (target language).

    Proses kompilasi dikelompokan ke dalam dua kelompok besar:

    1.Tahap Analisa (Front-end)

    Menganalisis source code dan memecahnya menjadi bagian-bagian dasarnya. Menghasilkan

    kode level menengah dari source code input yang ada.

    2.Tahap Sintesa (Back-end)

    Membangun program sasaran yang diinginkan dari bentuk antara.

    Tahap-tahap yang harus dilalui pada saat mengkompilasi program, yaitu:

    a. Analisa Leksikal

    b. Analisa Sintaks Tahap analisa (front-end)

    c. Analisa Semantik

    d. Pembangkit Kode Antara

    e. Code optimization Tahap sintesa (back-end)

    f. Object code generation

    Gambar 1.5. Skema blok kompilator

    Keterangan :

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    7/63

    7

    - Analisa Leksikal (scanner)

    Berfungsi memecah teks program sumber menjadi bagian-bagian kecil yang mempunyai

    satu arti yang disebut token, seperti : konstanta, nama variabel, keyword, operator.

    - Analisa Sintaks(parser)

    Berfungsi mengambil program sumber (sudah dalam bentuk barisan token) dan menentukan

    kedudukan masing-masing token berdasarkan aturan sintaksnya dan memeriksa kebenaran

    dan urutan kemunculan token.

    - Analisa Semantik

    Berfungsi menentukan validitas semantiks/keberartian program sumber.Biasanya bagian ini

    digabung denganPembangkit kode antara(intermediate code generator).

    - Pembangkit Kode Antara

    Berfungsi membangkitkan kode antara.

    - Code optimation

    Berfungsi mengefisienkan kode antara yang dibentuk.

    - Code generator

    Berfungsi membangkitkan kode program target dalam bahasa target yang ekivalen dengan

    bahasa sumber .

    - Symbol table management

    Berfungsi mengelola tabel simbol selama proses kompilasi. Tabel simbol adalah struktur

    data yang memuat record untuk tiap identifier dengan atribut-atribut identifier itu.

    - Penangan Kesalahan (Error handler)

    Berfungsi menangani kesalahan yang berlangsung selama proses kompilasi.

    Contoh :

    pernyataan pemberian nilai (assignment) :

    position := initial + rate * 60

    4.Model Kompilator

    Pekerjaan untuk membuat sebuah kompilator untuk suatu bahasa sumber sangat rumit.

    Kerumitan serta sifat dari proses kompilasi tergantung pada tingkat keluasan dari bahasa sumber.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    8/63

    8

    Kerumitan Kompilator dapatt dikurangi jika perancang bahasa pemrograman

    mempertimbangkan bermacammacam factor perancangan.

    Bagianbagian sebuah Kompilator :

    4.1Analisis

    a. Mengenali masukan (Scanner)

    b. Memeriksa kebenaran tata bahasa masukan (Parser)

    c. Menangkap makna masukan (pengenal semantic)

    4.2Sintesis

    a. Pembangkit Kode

    b. Pengoptimal Kode

    Semua bagian tersebut dalam operasinya didukung dan merefer ke tabel symbol

    ANALISIS SINTESIS

    Scanner : memecah program sumber menjadi besaran leksik/token.

    Parser : memeriksa urutan kemunculan token.

    Analisis Semantik : biasanya digabungkan dengan intermediate code generator (bagian yang

    berfungsi membangkitkan kode antara).

    Program Sumber Program Objek

    Penganalisis Leksikal

    (Scanner)

    Penganalisis

    Syntax

    (Parser)

    Penganalisis

    Semantik

    Pengoptimal Code

    (Optimizer)

    Pembangkit Kode

    (Code Generator)

    TABEL SIMBOL

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    9/63

    9

    Code Generator : membangkitkan kode objek.

    Code Optimizer : memperkecil hasil dan mempercepat proses.

    Tabel Simbol : menyimpan semua informasi yang berhubungan dengan kompilasi.

    Token : besaran pembangun bahasa/representasi dari besaran leksik

    5.Mutu Kompilator

    5.1 Kecepatan dan waktu proses kompilasi, Tergantung pada :

    a. Penulisan algoritma kompilator, yaitu algoritma yang digunakan untuk menuliskan program

    kompilator tersebut.

    b. Kompilator pengkompilasi, sebuah program khusus yang menghasilkan kompilator tersebut.

    5.2Mutu program objek yakni ukuran dan kecepatan eksekusi dari program objek, Tergantung

    pada :

    Fungsi translasi yang digunakan (cara untuk melakukan perubahan dari source code ke object

    code).

    5.3 Integrated Environment, yaitu fasilitas-fasilitas terintegrasi yang dimiliki oleh kompilator

    tersebut. Misalnya untuk melakukan editing, debugging, maupun testing.

    6.Pembuatan Kompilator

    Dapat dilakukan dengan :

    6.1Bahasa mesin :

    a. Sangat sukar dan sangat sedikit kemungkinannya untuk membuat compiler dengan

    bahasa ini, karena manusia susah mempelajari bahasa mesin,

    b. Sangat tergantung pada mesin,

    c. Bahasa Mesin kemungkinan digunakan pada saat pembuatan Assembler

    6.2Bahasa assembly :

    a. Hasil dari program mempunyai Ukuran yang relatif kecil

    b. Sulit dimengerti karena statement/perintahnya singkat-singkat, butuh usaha yang besar

    untuk membuat

    c. Fasilitas yang dimiliki terbatas

    6.3Bahasa tingkat tinggi.

    a. Lebih mudah dipelajari

    b. Fasilitas yang dimiliki lebih baik (banyak)

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    10/63

    10

    c. Memiliki ukuran yang relatif besar, misal membuat compiler pascal dengan

    menggunakan bahasa C

    d. Untuk mesin yang berbeda perlu dikembangkan tahapan-tahapan tambahan.

    e. Misal membuat compiler C pada Dos bedasarkan compiler C pada unix

    6.4Bootstrap (diperkenalkan oleh Wirth).

    Ide : kita bisa membangun sesuatu yang besar dengan dimulai dari bagian intinya.

    PO dibuat dengan assembly,

    P1 dibuat dari P0, dan

    P2 dibuat dari P1, jadi compiler untuk bahasa P dapat dibuat tidak harus dengan menggunakan

    assembly secara keseluruhan

    BAB II

    Konsep dan Notasi Bahasa

    Teori Bahasa

    Bahasa adalah kumpulan kalimat.Kalimat adalah rangkaian kata.Kata adalah komponen

    terkecil kalimat yang tidak bisa dipisahkan lagi.

    Contoh :

    Si Kucing kecil menendang bola besar = Bhs Indonesia

    The little cat kicks a big ball = Bhs Inggris

    for i := start to finish do A[i] := B[i]*sin(i*pi/16.0) = Bhs Pascal

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    11/63

    11

    1.Istilah Dalam Bahasa

    Tata bahasa (grammar) adalah sekumpulan dari himpunan variabel-variabel, simbol-simbol

    terminal, simbol non-terminal, simbol awal yang dibatasi oleh aturan-aturan produksi

    Aturan produksi adalah pusat dari tata bahasa yang menspesifikasikan bagaimana suatu tata

    bahasa melakukan transformasi suatu string ke bentuk lainnya

    Syntax : suatu aturan yang memberitahu apakah sesuatu kalimat (string) adalah valid dalam

    program atau tidak

    Semantic :suatu aturan-aturan yang memberikan arti kepada program

    Pengertian dasar

    a. Setiap anggota alfabet, dinamakan sebagai simbol terminal atau token

    b. Himpunan simbol terminal dinyatakan sebagai VN, sedangkan himpunan simbol

    nonterminal dinyatakan sebagai VT.

    c. Simbol-simbol berikut adalah simbol terminal :

    i. Huruf kecil awal alfabet, misal x, y, z.

    ii. Simbol operator, misal +, -, dan xKonsep dan notasi bahasa 2

    iii.Simbol tanda baca, misal (,), dan ;

    iv. String yang tercetak tebal, misal, if, then, dan else

    d. Simbol-simbol berikut adalah simbol non terminal

    i. Huruf besar awal alfabet, misal X, Y, Z.

    ii. Huruf S sebagai simbol awal

    iii. String yang tercetak miring, misal expr danstmt

    e. Huruf besar akhir alfabet melambangkan simbol terminal atau non terminal, misal X, Y,

    Z

    f. Huruf kecil akhir alfabet melambangkan string yang tersusun atas simbol-simbolterminal,

    misalnya : x, y, z.

    g. Sebuah produksi dilambangkan sebagai a b, artinya : dalam sebuah derivasi

    dapatdilakukan penggantian simbol a dengan simbol b.

    h. Simbol a dalam produksi berbentuk a b disebut ruas kiri produksi sedangkan simbol

    bdisebut ruas kanan produksi.Pengertian terminal berasal dari kata terminate (berakhir),

    maksudnya derivasi berakhir jika sentensial yang dihasilkan adalah sebuah kalimat (yang

    tersusun atas simbol-simbol terminal itu).

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    12/63

    12

    i. Pengertian non terminal berasal dari kata not terminate (belum/tidak berakhir),

    maksudnyaKonsep dan notasi bahasa 3derivasi belum/tidak berakhir jika sentensial yang

    dihasilkan mengandung simbol nonterminal.

    j. String adalah deretan terbatas (finite) simbol-simbol. Sebagai contoh, jika a, b, dan c

    adalahtiga buah simbol maka abcb adalah sebuah string yang dibangun dari ketiga

    symbol tersebut.

    k.

    didefinisikansebagai cacahan (banyaknya) simbol yang menyusun string tersebut.

    l. String hampa adalah sebuah string dengan nol buah simbol. String hampa

    sebagai simbolhampa karena keduanya tersusun dari nol buah simbol.

    2.Hierarki Chomsky

    a. Tata Bahasa Sederhana :

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    13/63

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    14/63

    14

    4.Diagram Syntax

    Diagram sintaks merupakan alat bantu dalam pembentukan parser / analisis sintaks. Notasi

    yang terdapat dalam diagram sintaks :

    a. Empat persegi panjang melambangkan simbol variabel / non terminal.

    b. Bulatan melambangkan simbol terminal

    Misalnya : -E

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    15/63

    15

    BAB III

    BAHASA REGULER

    A. TATA BAHASA REGULER

    Teori bahasa membicarakan bahasa formal (formal language), terutama untuk

    kepentingan perancangan kompilator (compiler) dan pemroses naskah (text processor).

    Bahasa formal adalah kumpulan kalimat. Semua kalimat dalam sebuah bahasa

    dibangkitkan oleh sebuah tata bahasa (grammar) yang sama. Sebuah bahasa formal bisa

    dibangkitkan oleh dua atau lebih tata bahasa berbeda. Dikatakan bahasa formal karena

    grammar diciptakan mendahului pembangkitan setiap kalimatnya.

    Tata bahasa (grammar) adalah sekumpulan dari himpunan variabel-variabel,

    simbol-simbol terminal, simbol non-terminal, simbol awal yang dibatasi

    oleh aturan-aturan produksi.

    B. HIRARKI TATA BAHASA

    Menurut Noam Chomsky (1950), Tata-bahasa formal dapat dikelompokkan

    menjadi 4 tingkatan (hierarchi), biasa disebut hierarki tata-bahasa menurut Chomsky.

    Pengelompokan tata-bahasa menurut Chomsky ini ditentukan oleh aturan produksi yang

    dimiliki oleh grammar, yaitu tata-bahasa Tipe-0, Tipe-1, Tipe-2 danTipe-3.

    Andaikan aturan produksi dalam suatu grammar G dituliskan sebagai :

    dengan masing-masing dan adalah string-string yang dapat terdiri dari simbol Non

    terminal atau pun simbol terminal, atau : , ( N)*

    maka masing-masing kelas tata-bahasa dibatasi sebagai berikut:

    1. Tata-bahasa Tipe 0 (Non-restricted Grammar):

    Tata-bahasa tipe-0, atau biasa disebut sebagai non-restricted grammar adalah tata

    bahasa yang paling luas, juga biasa disebut PHRASE STRUCTURED GRAMMAR.

    Tata-bahasa Tipe-0 adalah tata-bahasa yang memiliki aturan produksi :

    dengan batasan :

    : minimal terdiri dari 1 simbol Non terminal , atau {( N)* N (N)*}

    : tidak dibatasi, atau : {( N)*

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    16/63

    16

    2. Tata-bahasa Tipe 1 (Context Sensitive Grammar):

    Tata-bahasa tipe-1, adalah tata-bahasa tipe-0 yang memiliki aturan produksi :

    dengan tambahan batasan :

    | | < | | jika tidak dalam bentuk S

    yaitu panjang string lebih kecil atau sama dengan panjang string

    3. Tata-bahasa Tipe 2 (Context -Free Grammar):

    Tata-bahasa tipe-2, adalah tata-bahasa tipe-1 yang memiliki aturan produksi :

    dengan tambahan batasan :

    : HANYA terdiri dari 1 simbol Non terminal saja, atau N

    : tidak dibatasi, atau : {( N)*

    4. Tata-bahasa Tipe 3 ( Regular Grammar):

    Tata-bahasa tipe-3, adalah tata-bahasa tipe-2 yang memiliki aturan produksi :

    dengan tambahan batasan :

    : HANYA terdiri dari 1 simbol Non terminal saja, atau N

    : dalam bentuk salah satu diantara : a, aB, atau dimana a adalah simbol terminal

    dan B adalah simbol Non terminal.

    C. EKSPRESI REGULER

    Sebelum memasuki bahasan tentang ekspresi regular dan bahasa regular, dapat

    dinyatakan suatu kenyataan berikut. Jika adalah suatu himpunan abjad (yang tentu saja

    jumlahnya terhingga), maka :

    1. * = himpunan seluruh string yang dapat disusun dari abjad dalam (seperti yang

    telah disampaikan dalam bab II) adalah berjumlah TAK HINGGA (countably

    inifinite).

    2. Kumpulan dari semua bahasa yang dapat dibangkitkan dari abjad dalam berjumlah

    tak terhitung (uncountably) Selanjutnya ekspresi regular dapat didefinisikan secara

    rekursif dari definisi-definisiberikut :

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    17/63

    17

    Definisi Ekspresi Regular :

    1. = {} = (himpunan kosong) adalah sebuah ekspresi regular

    2. { } =string kosong adalah ekspresi regular

    3.

    Untuk setiap a , maka a adalah ekspresi regular4. Jika a dan b adalah ekspresi regular maka ab , ab dan a* adalah ekspresiregular.

    Dari definisi tentang ekspresi regular selanjutnya dapat dituliskan beberapa akibat

    logis, berdasarkan aturan-aturan dalam teori himpunan, sebagai berikut :

    Jika a,b,c adalah ekspresi regular dalam

    1. ab = ba

    2. a = a

    3. a a = a

    4. (a b) c = a (b c)

    5. a = a = a

    a = a =

    7. (ab) c = a (bc)

    8. A (b c) = ab ac = dan (a b) c = ac bc

    9. a* = a** = a*a* = ( a)* = a*(a ) = (a ) a* = aa*

    10. aa* = a*a

    D. TATA BAHASA REGULER

    Seperti telah dituliskan dalam bab sebelumnya, bahasa regular merupakan kelas

    bahasa yang dibangkitkan oleh tata bahasa regular. Tata bahasa ini memiliki aturan

    produksi dengan batasan :

    : HANYA terdiri dari 1 simbol Non terminal saja, atau N

    : dalam bentuk salah satu diantara : a, aB, atau

    Contoh 3.3:

    Tentukan bahasa yang dihasilkan oleh tata bahasa regular berikut :G(, N, S, P) ; dimana

    ={ a,b } N = { A, B} danP ={ SaS ; SaB ; SA ; Bb; BbB; B ; Aa}

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    18/63

    18

    Jawab :

    Untuk menurunkan bahasa dari suatu grammar yang diketahui, maka seluruh

    kemungkinan penurunan yang dapat dilakukan oleh grammar tersebut harus dilakukan.

    String-string yang dihasilkan dihimpun membentuk suatu bahasa dari grammar tersebut.

    Untuk mempermudah pelacakan, tetapkan cacah aturan produksi yang ada , dalam

    grammar tersebut ada 7 aturan produksi, yaitu :

    1. SaS ;

    2. SaB ;

    3. SA ;

    4. Bb;

    5. BbB;

    6. B ;

    7. Aa

    E. AHD, AHN, dan AHN_

    1. AH didefinisikan sebagai pasangan 5 tupel : (K, VT

    , M, S, Z).

    K : himpunan hingga stata,

    VT

    : himpunan hingga simbol input (alfabet)

    M : fungsi transisi, menggambarkan transisi stata AH akibat pembacaan simbol input.

    Fungsi transisi ini biasanya diberikan dalam bentuk tabel.

    S K : stata awal

    Z K : himpunan stata penerima.

    2. Ada dua jenis automata hingga : deterministik (AHD, DFA = deterministic finite

    automata) dan non deterministik (AHN, NFA = non deterministik finite automata).

    - AHD : transisi stata AH akibat pembacaan sebuah simbol bersifat tertentu.

    M(AHD) : K V T K

    - AHN : transisi stata AH akibat pembacaan sebuah simbol bersifat tak tentu.

    M(AHN) : K VT

    K

    2

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    19/63

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    20/63

    20

    q 3 {q 3 } {q 3 } {q 3 , q 4 }

    q 4

    Ilustrasi graf untuk AHN F adalah sebagai berikut :

    Contoh kalimat yang diterima AHN di atas : aa, bb, cc, aaa, abb, bcc, cbb

    Contoh kalimat yang tidak diterima AHN di atas : a, b, c, ab, ba, ac, bc

    Fungsi transisi M sebuah AHN dapat diperluas sebagai berikut :

    1. M(q, ) = {q} untuk setiap q K

    2. M(q, t T) = M(p i , T) dimana t V T , T adalah V T *, dan M(q, t) = {p i }

    3. M({q 1 , q 2 , , q n }, x) = M(q i ,x), untuk x V T *

    Sebuah kalimat di terima AHN jika :

    a. salah satu tracing-nya berakhir di stata penerima, atau

    b. himpunan stata setelah membaca string tersebut mengandung stata penerima

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    21/63

    21

    BAB IV

    ANALISA LEKSIKAL

    Bahasa Sumber

    Bahasa adalah kumpulan kalimat. Kalimat adalah rangkaian kata. Kata adalah unitterkecil komponen bahasa yang tidak bisa dipisah-pisahkan lagi. Dalam bahasa pemrograman

    kalimat lebih dikenal sebagai ekspresi sedangkan kata sebagai token.

    Perancangan sebuah bahasa harus memperhatikan tiga aspek berikut :

    1. spesifikasi leksikal,

    2. spesifikasi sintaks

    3. aturan-aturan semantik

    Dalam spesifikasi leksikal biasanya digunakan grammar regular (GR) dalam bentuk ekspresi

    regular (ER). Sebagai contoh pola token identifier ditentukan oleh grammar regular berikut

    :\

    IaAbAzAabz,

    AaAbAzA0A1A9Aabz01

    yang ekuivalen dengan ekspresi regular berikut :

    I = (abz)( abz019)* = huruf(hurufangka)*

    Dalam spesifikasi sintaks biasanya digunakan context free grammar (CFG). Sebagai contoh

    ekspresi if-then E adalah :

    E if L then, L IOA, I = huruf(hurufangka)*, O =, A 019.

    Analisa Leksikal (Scanner)

    Dalam kaitan ini aliran karakter yang membentuk program sumber dibaca dari kiri ke

    kanan dan dikelompokkan dalam apa yang disebut token yaitu barisan dari karakter yang dalam

    suatu kesatuan mempunyai suatu arti tersendiri. Analisa ini melakukan penerjemahan

    masukan menjadi bentuk yang lebih berguna untuk tahap-tahap kompilasi berikutnya.

    Analisa Leksikal merupakan antarmuka antara kode program sumber dan analisa sintaktik

    (parser). Scanner melakukan pemeriksaan karakter per karakter pada teks masukan,

    memecah sumber program menjadi bagian-bagian disebut Token. Analisa Leksikal

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    22/63

    22

    mengerjakan pengelompokkan urutan-urutan karakter ke dalam komponen pokok: identifier,

    delimeter, simbol-simbol operator,angka, keyword, noise word,blank, komentar, dan

    seterusnya menghasilkan suatu Token Leksikal yang akan digunakan pada Analisa Sintaktik.

    Model dasar untuk membentuk suatu Analisa Leksikal adalah Finite- State Automata.

    Dua aspek penting pembuatan Analisa Leksikal adalah :

    - Menentukan token-token bahasa.

    - Mengenali token-token bahasa dari program sumber.

    Token-token dihasilkan dengan cara memisahkan program sumber tersebut

    dilewatkan ke parser. Analisa Leksikal harus mengirim token ke parser. Untuk mengirim token,

    scanner harus mengisolasi barisan karakter pada teks sumber yang merupakan 1 token

    valid. Scanner juga menyingkirkan informasi seperti komentar, blank, batas-batas baris dan

    lain-lain yang tidak penting (tidak mempunyai arti) bagi parsing dan Code Generator.

    Analisa Sintaktik dapat memasukkan string ke tabel simbol, mengidentifikasi sebagai

    Type atau typedef, sehingga analisa leksikal dapat memeriksa tabel simbol untuk menentukan

    apakah lexeme adalah tipe token atau identifier.

    Tugas Analisa leksikal

    Tugastugas analisa leksikal antara lain :

    a. Melakukan pembacaan kode sumber dengan merunut karakter demi karakter.

    b. Mengenali besaran leksik (identifier, keywords, dan konstanta).

    c. Mentransformasi menjadi sebuah token dan menentukan jenis tokennya.

    d. Mengirimkan token.

    e. Membuang atau mengabaikan white-space dan komentar dalam program.

    f. Menangani kesalahan.

    g. Menangani tabel simbol.

    Tahap Pelaksanaan Analisa Leksikal

    - Pada single one pass

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    23/63

    23

    Terjadi interaksi antara scanner dan parser. Scanner dipanggil saat parser memerlukan token

    berikutnya.

    - Pada separate pass / multi pass

    Scanner memproses secara terpisah, dilakukan sebelum parsing. Hasil scanner

    disimpan dalam file. Dari file tersebut, parsing melakukan kegiatannya.

    Implementasi Analisa Leksikal

    a. Pengenalan Token

    - Scanner harus dapat mengenali token

    - Terlebih dahulu dideskripsikan token-token yang harus dikenali

    b. Pendeskripsian Token

    - Menggunakan reguler grammar. Menspesifikasikan aturan-aturan pembangkit token-

    token dengan kelemahan reguler grammar menspesifikasikan token berbentuk pembangkit,

    sedang scanner perlu bentuk pengenalan.

    - Menggunakan ekspresi grammar. Menspesifikasikan token-token dengan ekspresi reguler.

    - Model matematis yang dapat memodelkan pengenalan adalah finite-state acceptor

    (FSA) atau finite automata.

    c. Implementasi Analisa Leksikal sebagai Finite Automata

    Pada pemodelan analisa leksikal sebagai pengenal yang menerapkan finite automata, analisa

    leksikal tidak cuma hanya melakukan mengatakan YA atau TIDAK.

    d. Penanganan Kesalahan di Analisa Leksikal

    Hanya sedikit kesalahan yang diidentifikasi di analisa leksikal secara mandiri karena analisa

    leksikal benar-benar merupakan pandangan sangat lokal terhadap program sumber. Bila

    ditemui situasi dimana analisa leksikal tidak mampu melanjutkan proses karena tidak ada pola

    token yang cocok, maka terdapat beragam alternatif pemulihan, yaitu:

    - Panic mode dengan menghapus karakter-karakter berikutnya sampai analisa leksikal

    menemukan token yang terdefinisi bagus

    - Menyisipkan karakter yang hilang

    - Mengganti karakter yang salah dengan karakter yang benar

    - Mentransposisikan 2 karakter yang bersebelahan.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    24/63

    24

    Input Buffering

    Perancangan analisa leksikal seharusnya dapat membuat buffering masukkan yang

    membantu mempercepat proses pembacaan dari file serta mempunyai fleksibelitas yang

    tinggi agar analisa leksikal tidak bergantung platform sehingga mempunyai portabilitas

    yang tinggi.

    Membangun Analisa Leksikal

    Scanner diimplementasikan dengan Automata Hingga Deterministik (AHD). Pada

    kuliah Teori Bahasa dan Automata (atau Pengantar Automata, Bahasa Formal, dan

    Kompilasi) telah dipelajari siklus transformasi : GR ER AHN AHD GR.

    Token

    Token merupakan unit atau elemen dasar bahasa komputer (seperti 'kata' di bahasa

    manusia), dimana unit tersebut tidak terbagi lagi. Token merupakan bagian hasil dari pemecahan

    sumber program yaitu penerjemahan lexeme pada saat melakukan scanner.

    Token mereprentasikan nama :

    identifier -> nama variabel, fungsi, tipe atau nama yang didefinisikan pemakai.

    Keyword

    literal string

    operator

    label

    simbol tanda -> tanda kurung, koma, titik koma.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    25/63

    25

    BAB V

    TATA BAHASA KONTEKS FREE

    Bahasa merupakan himpunan kalimat (baik terhingga maupun tak terhingga).Bahasa

    dapat disajikan dengan menyebut kalimatnya satu persatu.Untuk bahasa tak hingga, penyebutan

    seperti itu tidak mungkin. Chomsky mengelompokkan Grammar menjadi 4 kelompok :

    1. Tipe nol : UnRestricted Grammar (Tata Bahasa Tidak Terbatasi)

    2. Tipe satu : Context Sensitive Grammar (Tata Bahasa Tergantung Konteks)

    3. Tipe dua : Context Free Grammar ( Tata Bahasa Bebas konteks)

    4. Tipe tiga : Regular Grammar

    Regular Grammar merupakan subset dari Context Free Grammar.

    Context Free Grammar merupakan subset dari Context Sensitive Grammar.

    Context Sensitive Grammar merupakan subset dari UnRestricted Grammar.

    1. Tata Bahasa Bebas Konteks/Context Free

    TBBK (tata bahasa bebas konteks) adalah sekumpulan simbol-simbol variabel (non-

    terminal), yang masing-masing merepresentasikan bahasa.Bahasa yang direpresentasikan dengan

    simbol-simbol non terminal tersebut diproses secara rekursif dengan suatu aturan-aturan yang

    disebut aturan produksi.

    Tata bahasa bebas konteks (tipe 2) memiliki elemen:

    Terminal : simbol dasar yang tidak dapat diturunkan lagi. Terminal disebut juga token.

    Non terminal : variabel sintaktik yang masih dapat diturunkan lagi.

    TBBK (Tata Bahasa Bebas Konteks)

    Contoh TBBK untuk pasangan kurung yang selalu berpasangan:

    S => R

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    26/63

    26

    R => {}

    R => (R)

    R => RR

    Contoh TBBK untuk palindrom:

    S => R

    R => {} a b

    R =>aRa bRb

    Contoh TBBK:

    S => aS

    S =>bT

    T => a

    Maka misalkan untuk string aabamaka TBBK diatas dapat diturunkan menjadi :

    S> aS

    S => aaS

    S => aabT

    S => aaba

    Artinya string aabacocok dan diterima oleh TBBK diatas.

    a. Tata Bahasa Konteks Free dan hubungannya dengan Parcer atau ebagai

    Penganalisa Syntax

    CFG menjadi dasar dalam pembentukan suatu parser/proses analisis sintaksis.

    Parser adalah sebuah program, biasanya bagian dari sebuah compiler ,yang menerima input

    dalam bentuk instruksi program sumber secara sekuensial,perintah-perintah online yang

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    27/63

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    28/63

    28

    diperluas terlebih

    dahulu.

    Misal : Tata bahasa sbb :

    S aAS | a

    A SbA | ba

    Untuk memperoleh untai aabbaa dari tata bahasa diatas dilakukan dengan cara :

    Penurunan terkiri: S => aAS => aSbAS => aabAS => aabbaS => aabbaa

    Penurunan terkanan : S => aAS => aAa => aSbAa => aAbbaa => aabbaa

    AMBIGUITAS

    Ambiguitas terjadi bila terdapat lebih dari satu pohon penurunan yang berbeda untuk

    memperoleh suatu untai.Definisi Syntax itu sendiri dalam suatu bahasa pemrograman adalah satu

    himpunan peraturan yang menjelaskan bagaimana simbol-simbol bahasa dapat dirangkai

    bersama untuk membentuk pernyataan(statement)yang berarti.

    b. Derivasi dan Pohon Derivasi

    Dalam ilmu linguistik, derivasi adalah adalah proses pembentukan kata yang

    menghasilkan leksem baru (menghasilkan kata-kata yang berbeda dari paradigma yang berbeda);

    Pembentukan derivasi bersifat tidak dapat diramalkan. Konsep derivasi berkaitan dengan kaidah

    sintaktik, tidak otomatis, tidak sistematik, bersifat optional/sporadis, serta mengubah identitas

    leksikal.

    Contoh pola derivasi bahasa Inggris dan akhiran mereka:

    kata sifat-ke-kata benda: -ness (slow slowness)

    kata sifat-ke-kata kerja: -ise (modern modernise) dalam Inggris Britania atau -ize

    (archaic archaicize) dalam Inggris Amerika dan ejaan Oxford

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    29/63

    29

    Pohon derivasi merupakan suatu untai terminal yang tersusun dalam bentuk tree yang

    merupakan suatu himpunan produksi dengan cara melakukan sederetan produksi menggunakan

    produksi yang ada.

    Pohon derivasi ini dapat diterapkan pada suatu ekspresi string ataupun pada ekspresi

    aritmatika.

    Pohon derivasi pada ekspresi string

    Rumus :

    Pohon derivasi pada ekspresi aritmatika

    Ada beberapa ketentuan yang sering dipakai dalam suatu penyusunan pohon derivasi

    untuk ekspresi aritmatika

    Rumus :

    ( ) operand

    + -

    * div

    Contoh : Si adik kecil menendang bola besar.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    30/63

    30

    c. Modifikasi Tata bahasa

    Modifikasi Tata Bahasa dilakukan dengan cara Penyederhanaan.Penyederhanaan tata bahasa

    bebas konteks bertujuan untuk melakukan pembatasan sehingga tidak menghasilkan pohon

    penurunan yang memiliki kerumitan yang tak perlu atau aturan produksi tak berarti.

    Missal :

    S AB | a

    A a

    Kelemahanya adalah aturan produksi S AB tidak berarti karena B tidak memiliki penurunan.

    Penyederhanaan tata bahasa bebas konteks dapat di lakukan dengan 3 cara :

    1. Penghilangan Produksi Useles

    Produksi yang memuat simbol variabel yang tidak memiliki penurunan yang akan

    menghasilkan terminal-terminal seluruhnya. Produksi yang tidak akan pernah dicapai dengan

    penurunan apapun dari simbol awal sehingga produksi itu redundan.

    Contoh :

    S aSa | Abd | Bde

    A Ada

    B BBB |a

    Langkah penyederhanaannya :

    Hilangkan aturan yang tidak menuju terminal.

    Hapus anggota S yang mengandung simbol himpunan ke terminal yang tidak berguna

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    31/63

    31

    Hilangkan Redundan ( Anggota yang tidak ada di S dan Sebaliknya )

    Maka, hasil penyederhanaanya adalah sbb :

    S aSa | Bde

    B BBB | a

    2. Penghilangan Produksi Unit

    Produksi unit adalah produksi dimana ruas kiri dan kanan aturan produksi hanya berupa satu

    simbol variabel, misalkan : A B, C D. Keberadaanya membuat tata bahasa memiliki

    kerumitan yang tak perlu, maka bisa dihilangkan.

    Langkah penyederhanaanya :

    Jabarkan masing-masing himpunan

    Sederhanakan ruas kiri dan kanan yang hanya berupa variabel simbol sama

    Hapus simbol variabel yang tidak berguna / tidak mempunyai turunan

    Contoh suatu CFG sbb :

    S Sb

    S C

    C D

    C ef

    D dd

    Jabarkan penurunan masingmasing himpunan :

    C D => C dd

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    32/63

    32

    S C => S dd | ef

    Maka hasilnya adalah sbb :

    S Sb

    S dd | ef

    C dd

    C ef

    D dd

    3. Penghilangan Produksi Empty ( )

    Definisi produksi empty adalah produksi kosong, (dengan bentuk ) penghilangan dapat

    dilakukan dengan penggantian produksi yang memuat variabel yang menuju ke .

    Langkah Penyederhanaannya :

    Hilangkan simbol yang terdapat empty ( ) dalam himpunan produksi

    Simbol variabel tidak di hapus jika terdapat cabang terminal / variabel yang saling berhubungan

    Buat himpunan dengan simbol yang dihilangkan dan yang tidak

    Contoh :

    S bcAd

    A e

    Maka variabel A bisa di hilangkan, sehingga menjadi :

    S bcd

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    33/63

    33

    Kasus lain :

    S bcAd

    A bd |

    Maka hasilnya akan menjadi :

    S bcAd | bcd

    A bd

    Karena A bukan satu-satunya produksi dari A

    Kasus lainya :

    S Ab | Cd

    A d

    C

    Hasil penyederhanaan sebagai berikut :

    S Ab | d

    A d

    2. Parcer (Penganalisa Syntax)

    a.

    Pohon Syntax (syntax tree)menjelaskan mengenai bahasa secara teoritis dan formal, kita lihat terlebih dahulu sebuah

    kalimat sehari-hari dalam bahasa Indonesia, yaitu :

    Si kucing kecil menendang bola besar

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    34/63

    34

    Gambar penguraian kalimat di atas membentuk struktur pohon, yang disebut pohon sintaks dari

    kalimat.Disini kalimat dibagi-bagi berdasar jenis dan fungsi kata.

    Posisi Penganalisa Sintaks (Parser) dalam proses kompilasi adalah sebagai berikut :

    - 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.

    b. Metode Parsing

    Parsing adalah proses menganalisa urutan token dengan tujuan untuk menentukan struktur tata

    bahasanya dibandingkan dengan tata bahasa normal yang diberikan Proses ini secara formal

    disebut analisis sintaks.

    Parser adalah sebuah program komputer yang menjalankan tugas ini,Parsing dapat dilakukan

    dengan cara :

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    35/63

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    36/63

    36

    Penurunan untuk string aaabbabba

    Proses parsing merupakan tahapan analisis sintaksis yang berguna untuk memeriksa urutan

    kemunculan token.Di dalam mengimplementasikan sebuah metode parsing ke dalam program

    perlu diperhatikan tiga hal sebagai berikut.

    1.Rentang waktu eksekusi.

    2.Penanganan kesalahan.

    3.Penanganan kode.

    Metode parsingbisa digolongkan sebagai berikut.

    1.Top Down

    Jika dilihat dari terminologi pohon penurunan, metode ini melakukan

    proses penelurusan dariroot/puncak menuju keleaf/daun (simbol awalsampai simbol terminal).

    Metodetop down

    sendiri meliputi:

    a.Backtrack/backup : Brute Force.

    b.No backtrack : Recursive Descent Parser.

    2.Bottom Up

    Metode ini melakukan penelurusan darileaf/daun menuju root/puncak.

    parsing dengan Brute Force Metode ini memilih aturan produksi mulai dari paling kiri, dan

    melakukan expand semua non terminal pada atuan produksi sampai yang tertinggal adalah

    simbol terminal.

    TBBK Rekursif Kiri

    TBBK yang memiliki simbol non terminal di ruas kanan dari simbol non terminal yang ada di

    ruas kiri.Simbol non terminal itu terletak di ruas kanan terdepan.

    Contoh :

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    37/63

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    38/63

    38

    S => aAd

    S =>abd : gagal, maka dilakukan backtrack

    S =>acd : gagal, maka dilakukan backtrack

    S => aB

    S =>accd : berhasil!

    Kelemahan Brutal Force :

    1.Mencoba untuk semua aturan produksi yang ada sehingga lambat (rentan

    waktu eksekusi tidak jelas).

    2.Menyulitkan untuk melakukan pemulihan kesalahan.

    3.Memakan banak memori karena perlu mencatatbackuplokasibacktrack

    b. Parsing dengan Recursive Descent Parser

    Recursive Descent Parser adalah salah satu cara untuk mengaplikasikan bahasa bebas

    konteks untuk melakukan analisis sintaksis suatu source code.

    Di sini simbol terminal maupun symbol variabelnya sudah bukan sebuah karakter, tetapi

    berupa besaran leksi sebagai simbol terminalnya dan besaran sintaks sebagai simbol variabelnya.

    Ciri dari recursive descent parser yant menonjol adalah secara rekursive menurunkan

    sebuahvariabeldari awal sampai bertemu terminal dan tidak pernah mengambil token secara

    mundur serta sangat tergantung pada algoritma scan dalam mengambil token.

    Parsing dengan Recursive Descent Parser

    a. Salah satu cara untuk meng-aplikasikan bahasa context free

    b. Simbol terminal maupun simbol variabelnya sudah bukan sebuah karakter

    c. Besaran leksikal sebagai simbol terminalnya, besaran syntax sebagai simbol variablenya

    /non terminalnya

    d. Dengan cara penurunan secara recursif untuk semua variabel dari awal sampai ketemu

    terminal

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    39/63

    39

    e. Tidak pernah mengambil token secara mumdur (back tracking)

    a. Beda dengan turing yang selalu maju dan mundur dalam melakukan parsing

    Aturan Produksi memakai Recursif Descent :

    1. Semua simbol variabel dijadikan prosedur/fungsi

    2.Jika ketemu simbol terminal pada aturan produksi , maka panggil prosedurnya

    3. Penelusuran bersifat top down mengikuti sintaks sesuai pola pada diagram sintaks

    4. Fungsi/prosedur ditulis untuk setiap non terminal dari suatu produksi.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    40/63

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    41/63

    41

    b) Memeriksa tipe. Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement-

    statement yang ada. Misalkan bila terdapat suatu operasi, diperiksa tipe operand.

    Contohnya bila ekspresi yang mengikuti instruksi IF berarti tipenya boolean, akan

    diperiksa tipe identifier dan tipe ekspresi. Bila ada operasi antara dua operand, maka

    tipe operand pertama harus bisa dioperasikan dengan operand kedua.

    Teknik-teknik pendeskripsian Semantik bahasa pemrograman:

    a. Operational Semantic

    Pendekatan ini mendefinisikan suatu mesin buatan (abstract) dengan instruksi-

    intruksi promitif, tidak perlu realistik, tetapi cukup sederhana supaya tidak muncul

    kesalahpahaman. Deskripsi semantik dari bahasa pemrograman menentukan suatu

    traslasi ke kode.

    b. Denotational Semantic

    Pada pendekatan ini, diberikan suatu fungsi yang memetakan program-program

    komputer yang ditunjuk kedalam bentuk nilai-nilai abstrak secara matematika

    (angka, nilai, kebenaran, fungsi matematika).

    c. Axiomatic Semantic

    Pendekatan ini mendefinisikan suatu tindakan program yang dibangun dengan

    properti logika yang menyimpan status komputer sebelum dan sesudah eksekusi.

    d. Algebraic Semantic

    Pendekatan ini dipertimbangkan suatu objek komputasi yang menjadi syarat-syarat

    dalam aljabar multi-sorted. Program mengimplementasikan fungsi yang dapat

    diwujudkan dengan suatu persamaan diantara syarat-syarat tersebut.

    e. Structured Operational atau Natural Semantic

    Seperti dalam pengambilan keputusan secara alamiah dengan logika. Program diberi

    suatu arti dari aturan yang diturunkan yang menggambarkan penilaian gagasan suatu

    bahasa.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    42/63

    42

    Tugas dari Analisa Semantik:

    1. Pohon sintaks yang dihasilkan digunakan untuk semantics analiyser yang bertugas

    untuk menentukan maksud dari program sumber, misalnya operator penjumlahan

    maka semantics analiyser akan mengambil aksi apa yang harus dilakukan.

    2. Terdapat statement: (A+B) * (C+D)

    3. Akan menghasilkan bentuk sintaksis.

    4. Melakukan pengecekan pada struktur akhir yang telah diperoleh dan diperiksa

    kesesuainnya dengan komponen program yang ada.

    5. Menghasilkan suatu kode objek yang dapat dieksekusi dalam translasi sederhana,

    tetapi biasanya bentuk dari kode objek yang dapat dieksekusi ini merupakan bentuk

    internal dari final program eksekusi, yang kemudian dimanipulasi oleh tahap

    optimisasi dari translator sebelum akhirnya kode eksekusi benar-benar dihasilkan.

    6. Berperan dalam memeriksa kesalahan-kesalahan yang bersifat semantik. Salah satu

    peranan analisis semantik yang penting adalah pemeriksaan tipe variabel.

    7. Memeriksa keunikan suatu nama.

    8. Menganalisis kebenaran source program.

    2. KODE ANTARA

    Pembentukan kode antara merupakan tahap lanjutan setelah analisis semantik.

    Hasil pembentukan kode antara dapat dianggap sebagai program dengan instruksi-instruksi

    bahasa mesin abstrak. Bentuk representasi kode antara harus mudah pembuatannya dan

    mudah diterjemahkan dalam bahasa tujuan. Salah satu bentuk representasi kode antara

    adalah kode tiga alamat. Misalnya, suatu kalimat matematika:= b * c + d memiliki

    bentuk kode tiga alamat sebagai berikut :

    t1 := b * c t2 := t1 + d a := t2

    Representasi kode tiga alamat memiliki bentuk yang menyerupai kode dalam

    bahasa Assembly, sehingga memudahkan proses penterjemahannya, jika bahasa tujuan

    adalah bahasa Assembly. Bentuk kode tiga alamat di atas memiliki karakteristik:

    mengandung paling banyak tiga operand dan dua operator, serta memiliki variabel

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    43/63

    43

    sementara. Bentuk lain dari representasi kode antara adalah dalam bentuk representasi

    grafik, seperti pohon maupun graf. Salah satu manfaat pembentukan kode antara adalah ia

    berfungsi sebagai input untuk proses optimisasi.

    Kode antara/Intermediate codemerupakan hasil dari tahapan analisis, yang dibuat

    oleh kompilator pada saat mentranslasikan program dari bahasa tingkat tinggi. Terdapat

    dua macam kode antara, yaitu Notasi Postfix dan N-Tuple. Kegunaan dari kode antara

    sebagai berikut:

    1. Untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke

    sejumlah mesin.

    2. Proses optimasi masih lebih mudah.

    3. Bisa melihat program internal yang mudah dimengerti.

    Kode antara (intermediate code) adalah sebuah representasi yang disiapkan untuk

    mesin abstrak tertentu. Dua sifat yang harus dipenuhi oleh kode antara adalah :

    1. Dapat dihasilkan dengan mudah

    2. Mudah ditranslasikan menjadi program sasaran (target program).

    Contoh Parse tree:

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    44/63

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    45/63

    45

    Arti dari notasi Postfix di atas adalah sebagai berikut. Jika kondisi ekspresi salah,

    maka instruksi akan meloncat ke Label1dan menjalankan statement2. Bila kondisi

    ekspresi benar, maka statement1 akan dijalankan lalu meloncat ke Label2. Label1 dan

    Label1 dan Label2 sendiri menunjukan posisi tujuan loncatan, untuk Label1 posisinya

    tepat sebelum statement2, dan Label2 setelah statement2

    Dalam implementasi ke kode antara, label bisa berupa nomor baris instruksi.

    Untuk lebih jelasnya bisa dilihat contoh berikut.

    IF a > b THEN

    c := d

    ELSE

    c := e

    Bila diubah ke dalam Postfix

    11. a

    12. b

    13. >

    14. 22 {menunjuk label1}

    15. BZ

    16. c

    17. d

    18. :=

    19.

    20. 25 {menunjuk label2}

    21. BR

    22. c

    23. e

    24. :=

    25.

    Notasi Postfix di atas bisa dipahami sebagai berikut.

    1. Bila ekspresi (a > b) salah, maka loncat ke instruksi no.22

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    46/63

    46

    2. Bila ekspresi (a > b) benar, tidak terjadi loncatan, instruksi berlanjut ke 16 sampai

    18, lalu loncat ke 25.

    4. NOTASI N-TUPLE

    Bila pada Postfix setiap baris instruksi hanya terdiri dari satu tupel, pada notasi N-

    tuple setiap baris terdiri dari beberapa tupel. Format umum dari Notasi N-Tuple ada

    sebagai berikut:

    operator......(N-1) operand

    Selanjutnya akan dibahas notasi 3 tupel dan 4 tupel.

    1. Notasi 3 Tupel atau Triple Notation

    Notasi tripel memiliki format sebagai berikut :

    contoh, instuksi :

    A := D * C + B / E

    Kode antara tripel :

    1. *, D,C

    2. /, B, E

    3. +, (1), (2)

    4. :=, A, (3)

    Operasi perkalian/pembagian lebih prioritas dibandingkan

    penjumlahan/pengurangan

    Kekurangan dari notasi tripel adalah sulit pada saat melakukan optimasi, maka

    dikembangkan Indirect triples yang memiliki dua list (senarai), yaitu list instruksi

    yang berisi notasi tripel dan list eksekusi yang berisi urutan eksekusinya.

    Contoh :

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    47/63

    47

    A:= B+C*D/E

    F:= C*D

    List Instruksinya:

    1. *, C, D

    2. /, (1), E

    3. +, B, (2)

    4. :=, A, (3)

    5. :=, F, (1)

    List Eksekusinya :

    1. 1

    2. 2

    3. 3

    4. 4

    5. 1

    6. 5

    2. Notasi 4 Tupel atau Quadruples Notation

    Format notasi kuadrupel :

    Hasil adalah temporary variable yang bisa ditempatkan pada memory atau

    register. Masalah yang ada bagaimana mengelola temporary variable (hasil)

    seminimal mungkin.

    Contoh instruksi :

    A := D * C + B / E

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    48/63

    48

    5. PEMBANGKITAN KODE

    Hasil dari tahapan analisis akan diterima oleh bagian pembangkitan kode (code

    generator). Disini kode antara dari program biasanya ditranslasikan ke bahasa assembly

    atau bahasa mesin.

    Contoh :

    (A+B)*(C+D)

    Notasi Kuadrupel :

    1. +, A, B, T1

    2. +, C, D, T2

    3. *, T1, T2, T3

    Dapat ditranslasikan ke dalam bahasa Assembly dengan akumulator tunggal :

    LDA A {Muat isi A ke akumulator}

    ADD B {Tambahkan isi akumulator dengan B}

    STO T1 {Simpan isi akumulator ke T1}

    LDA C

    ADD D

    STO T2

    LDA T1

    MUL T2

    STO T3

    Keluaran dari code generator akan diterima oleh code optimizer. Misalkan untuk

    kode assembly diatas bisa dioptimasi menjadi :

    LDA A

    ADD B

    STO T1

    LDA C

    ADD D

    MUL T1

    STO T2

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    49/63

    49

    Notes :

    1. Perintah LDA : Memuat isi dari register/memory ke akumulator (load to

    accumulator)

    2. Perintah STO : Menyimpan isi akumulator ke register/memory (store from

    accumulator)

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    50/63

    50

    BAB VIII

    PENANGANAN KESALAHAN

    Sebuah kompilator akan sering menemui program yang mengandung kesalahan,

    maka kompilator harus memiliki strategi apa yang harus dilakukan untuk menangani

    kesalahan - kesalahan tersebut.

    1. KESALAHAN PROGRAM

    a. Kesalahan Leksikal

    Misalnya kesalahan mengeja keyword,

    contoh: THENditulis TEN

    b. Kesalahan Sintaks

    Misalnya pada operasi aritmatika kekurangan jumlahparanthesis(kurung).

    contoh :A:=X+(B*(C+D)

    c. Kesalahan Semantik

    i. Tipe data yang salah, misal tipe data integerdigunakan untuk variabelstring.

    Contoh : Var Siswa : Integer

    Siswa := 'Aka' {tipe string}

    ii. Variabel belum didefinisikan tetapi digunakan dalam operasi.

    Contoh : B := B + 1 {B belum didefinisikan}

    2. PENANGANAN KESALAHAN

    Prosedur penanganan kesalahan terdiri dari :

    1. Mendeteksi kesalahan

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    51/63

    51

    2. Melaporkan kesalahan

    3. Tindak lanjut perbaikan / pemulihan

    Pelaporan kesalahan yang dilakukan oleh sebuah kompilator yang menemukan

    kesalahan meliputi :

    1. Kode kesalahan

    2. Pesan kesalahan dalam bahasa natural

    3. Nama dan atribut identifier

    4. Tipetipe yang terkait bila type checking

    Contoh :Error Message : Error162 jumlah: unknown identifier

    1. Kode kesalahan = 162

    2. Pesan kesalahan = unknown identifier

    3. Nama identifier =jumlah.

    3. REAKSI KOMPILATOR PADA KESALAHAN

    Pada saat kompilator menemukan kesalahan terdapat beberapa tingkatan reaksi

    diantaranya adalah :

    1. Reaksi yang tidak dapat diterima (tidak melaporkan error)

    1) Kompilator crash: berhenti atau hang

    2) Looping : kompilator masih berjalan tapi tidak pernah berakhir karena looping

    tak berhingga (indefinite/onbounded loop)

    3) Menghasilkan program objek yang salah : kompilator melanjutkan proses

    sampai selesai tapi program objek yang dihasilkan salah. Ini berbahaya bila

    tidak diketahui pemrogram, karena baru akan muncul saat program dieksekusi.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    52/63

    52

    2. Reaksi yang benar tapi kurang dapat diterima dan kurang bermanfaat. Kompilator

    menemukan kesalahan pertama, melaporkannya, lalu berhenti (halt). Ini bisa muncul

    bila pembuat kompilator menganggap jarang terjadi kemunculan error dalam

    program sehingga kemampuan kompilator untuk mendeteksi dan melaporkan

    kesalahan hanya satu untuk setiap kali kompilasi.

    3. Reaksi-reaksi yang dapat diterima:

    a. Reaksi yang sudah dapat dilakukan, yaitu kompilator melaporkan kesalahan /

    error, dan selanjutnya melakukan:

    i. Recovery / pemulihan, lalu melanjutkan menemukan kesalahan / error

    yang lain bila masih ada.

    ii. Repair / Perbaikan kesalahan, lalu melanjutkan proses translasi dan

    menghasilkan program objek yang valid.

    b. Reaksi yang belum dapat dilakukan, yaitu kompilator mengkoreksi kesalahan,

    lalu menghasilkan program objek sesuai dengan yang diinginkan pemrogram.

    Disini komputernya sudah memiliki kecerdasan untuk mengetahui maksud

    pemrogram.

    4. ERROR RECOVERY

    Tujuannya mengembalikan kondisi parser ke kondisi stabil (supaya bisa

    melanjutkan prosesparsingke posisi selanjutnya). Strategi yang dilakukan error recovery

    sebagai berikut:

    1. Mekanisme Ad Hoc

    Recovery yang dilakukan tergantung dari pembuat kompilator

    sendiri/Spesifik, dan tidak terikat pada suatu aturan tertentu. Cara ini biasa disebut

    jugaspecial purpose error recovery.

    2. Syntax Directed Recovery

    Melakukan recoveryberdasarkansyntax

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    53/63

    53

    Contoh :

    begin

    A:=A+1

    B:=B+1;

    C:=C+1

    end;

    3. Secondary Error Recovery

    Berguna untuk melokalisir kesalahan / error, caranya :

    a. Panic mode

    Maju terus dan mengabaikan teks sampai bertemu delimeter (misal ;)

    contoh :

    IF A := 1

    Kondisi := true;

    Teks diatas terjadi kesalahan karena tidak ada instruksi THEN, kompilator akan

    maju terus sampai bertemu ;

    b. Unit deletion

    Menghapus keseluruhan suatu unit sintaktik (misal:

    ,, dan sebagainya), efeknya sama

    dengan panic mode tetapi unit deletion memelihara kebenaran sintaksis dari

    source program dan mempermudah untuk melakukan error repairing lebih

    lanjut.

    4. Context Sensitive Recovery

    Berkaitan dengan semantik,misal bila terdapat variabel yang belum

    dideklarasikan(undifined variabel) maka diasumsikan tipenya berdasarkan

    kemunculannya.

    Contoh : B:= 'nama'

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    54/63

    54

    Empat strategi pemulihan kesalahan yang sering digunakan adalah :

    1. Mode panik (panic mode)

    Strategi ini adalah metoda yang paling sederhana. Jika sebuah syntax error

    ditemukan, yaitu jika M(A, a) = error untuk suatu token a, maka parser akan

    melewatkan (skip) token a dan token-token berikutnya sampai ditemukan sebuah

    token penyelaras (syncro- nizing token). Pengertian melewatkan sebuah token adalah

    parser membaca token tersebut tetapi tanpa menganalisanya yaitu tanpa

    membandingkan dengan simbol top of stack. Token-token penyelaras adalah token-

    token yang mempunyai peran yang jelas dalam source program. tugas perancang

    kompilator adalah menentukan himpunan token penyelaras ini.

    2. Tingkat kombinasi kata-kata (phrase level)

    Jika sebuah syntax error ditemukan maka parser akan melakukan

    pembetulan lokal kepada prefix dari sisa input dengan suatu string sehingga proses

    parsing bisa dilanjutkan. Contoh pembetulan yang lazim dilakukan adalah mengganti

    koma dengan titik koma, menghapus titik koma yang berlebihan (seperti titik koma

    sebelum token else di dalam Pascal), atau mengisi titik koma yang hilang.

    3. Produksi-produksi kesalahan (error production)

    Yang dimaksud dengan produksi-produksi kesalahan adalah sekumpulan

    produksi yang akan menghasilkan konstruksi yang salah (wrong parse tree, yaitu

    parse tree yang mengimplementasikan sebuah statement yang salah).

    4. Pembetulan global (global correction)

    Misalkan x adalah string input yang salah sedangkan y adalah string input

    yang benar. Yang dimaksud dengan pembetulan global adalah sejumlah aksi

    penyisipan, penghapusan, atau perubahan terhadap suatu token di dalam string x

    sedemikian rupa sehingga x berubah menjadi y.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    55/63

    55

    5. ERROR REPAIR

    Bertujuan untuk memodifikasi source program dari kesalahan dan membuatnya

    valid sehingga memungkinkan kompilator untuk melakukan translasi program yang mana

    akan dialirkan ketahapan selanjutnya pada proses kompilasi. Mekanisme error repair

    meliputi :

    1. Mekanisme Ad Hoc

    Tergantung dari pembuat kompilator sendiri / spesifik.

    2. Syntax Directed Repair

    Menyisipkan simbol terminal yang dianggap hilang atau membuang terminal

    penyebab kesalahan..

    3. Context Sensitive Repair

    Perbaikan dilakukan pada kesalahan :

    a. Tipe identifier. Diatasi dengan membangkitkan identifier dummy

    b. Tipe konstanta. Diatasi dengan membangkitkan konstanta baru dengan tipe

    yang tepat.

    4. Spelling repair

    Memperbaiki kesalahan pengetikan pada identifier.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    56/63

    56

    BAB IX

    TEKNIK OPTIMASI

    A. TEKNIK OPTIMASI

    Bertujuan menghasilkan kode program dengan ukuran yang lebih kecil, sehingga

    lebih cepat eksekusinya. Berdasarkan ketergantungan pada mesin :

    a. Machine Dependent Optimizer

    Kode dioptimasi sehingga lebih efisien pada mesin tertentu.

    b. Machine Independent Optimizer

    Strategi optimasi yang bisa diaplikasikan tanpa tergantung pada mesin tujuan tempat

    kode yang dihasilkan akan dieksekusi nantinya.

    1. Optimasi Lokal

    Optimasi yang dilakukan hanya pada suatu blok dari source code, dengan

    cara :

    a. Folding

    Nilai konstanta atau ekspresi yang bisa dievaluasi pada saat compile time

    diganti dengan nilai komputasinya.

    Contoh instruksi : A:=2+3+B, diganti menjadi A:=5+B

    b. Redundant Subexpression Elimination

    Menggunakan hasil komputasi terdahulu daripada melakukan komputasi

    ulang.

    Contoh urutan instruksi :

    A:=B+C

    X:=Y+B+C

    c. Optimasi dalam sebuah iterasi

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    57/63

    57

    Loop Unrolling : menggantikan suatu loop dengan menulis statement dalam

    loop beberapa kali. Hal ini didasari pemikiran, sebuah iterasi pada

    implementasi level rendah akan memerlukan operasi sebagai berikut.

    Inisialisasi / pemberian nilai awal pada variabel loop. Dilakukan sekali

    pada saat permulaan eksekusi loop.

    Pengujian, apakah variabel loop telah mencapai kondisi terminasi.

    Adjustment yaitu penambahan atau pengurangan nilai pada variabel loop

    dengan jumlah tertentu.

    Operasi yang terjadi pada tubuh perulangan (loop body).

    Contoh instruksi :

    FOR I:=1 to 2 DO

    A[I]:=0; dioptimasi menjadi

    A[1] := 0;

    A[2] := 0;

    d. Strength Reduction

    Mengganti suatu operasi dengan jenis operasi lain yang lebih cepat

    dieksekusi,Contoh :

    Pada beberapa komputer operasi perkalian memerlukan waktu lebih

    banyak untuk dieksekusi dari pada operasi penjumlahan, maka penghematan

    waktu bisa dilakukan dengan mengganti operasi perkalian tertentu dengan

    penjumlahan. Contoh lain :

    A := A + 1 Dapat digantikan dengan INC(A)

    B.

    Optimasi Global

    Dilakukan dengan analisis flow, yaitu suatu graph berarah yang menunjukkan jalur yang

    mungkin selama eksekusi program. Ada 2 kegunaan optimasi global, yaitu bagi para programmer

    dan untuk compiler itu sendiri.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    58/63

    58

    Bagi Programmer

    Unreachable / dead code : Kode yang tidak pernah dieksekusi

    Unused parameter : parameter yang tidak pernah digunakan dalam prosedur

    Unused variable : variabel yang tidak pernah digunakan dalam program.

    Variable : variabel yang dipakai tanpa nilai awal

    Bagi Compiler

    Meningkatkan efisiensi eksekusi program

    Menghilangkan useless code / kode yang tidak terpakai

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    59/63

    59

    BAB X

    TABEL INFORMASI

    A. KEGUNAAN TABEL INFORMASI

    Fungsi Tabel Informasi atau Tabel Simbol :

    1. Membantu pemeriksaan kebenaran semantik dari program sumber.

    2. Membantu dan mempermudah pembuatan intermediate codedan proses pembangkitan

    kode.

    Untuk mencapai fungsi tersebut dilakukan dengan menambah dan mengambil

    atribut variabel yang dipergunakan pada program dari tabel. Atribut, misalnya nama, tipe,

    ukuran variabel.

    Tabel Simbol berisi daftar dan informasi identifier pokok yang terdapat dalam

    program sumber, disebut Tabel Pokok / utama.Tabel Pokok belum mengcover semua

    informasi, untuk itu disediakan tabel lagi sebagai pelengkap Tabel Pokok.

    Untuk mengacu pada tabel simbol yang bersesuaian dengan suatu indentifier

    tertentu, maka pada Tabel Pokok harus disediakan field yang bisa menjembatani identifier

    dari Tabel Pokok ke tabel-tabel lain yang bersesuaian. Untuk itu, pemilihan elemen tabel

    pada Tabel Pokok maupun tabel lainnya, merupakan sesuatu yang sangat penting.

    Elemen pada Tabel Simbol bermacam-macam, tergantung pada jenis bahasanya,

    misalnya :

    1.No urut identifier: Menentukan nomor urut identifier dalam tabel simbol.

    2.Nama identifier : Berisi nama-nama identifier (nama variabel, nama tipe, nama

    konstanta, nama procedure, nama fungsi, dll) yang terdapat pada program sumber.

    Nama-nama ini akan dijadikan referensi pada waktu analisa semantik, pembuatan

    intermediate code, serta pembangkitan kode.

    3. Tipe identifier : Berisi keterangan/informasi tipe dari record dan string, maupun

    procedure dan function.

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    60/63

    60

    4. Object time address : address yang mengacu ke alamat tertentu.

    5. Dimensi dari identifieryang bersangkutan.

    6.Nomor baris variabel dideklarasikan.

    7.Nomor baris variabel direferensikan.

    8. Field link.

    B. IMPLEMENTASI TABEL INFORMASI

    Beberapa jenis :

    1. Tabel Identifier : Berfungsi menampung semua identifier yang terdapat dalam

    program.

    2. TabelArray: Berfungsi menampung informasi tambahan untuk sebuah array.

    3. Tabel Blok : Mencatat variabel-variabel yang ada pada blok yang sama.

    4. Tabel Real : menyimpan elemen tabel bernilai real.

    5. Tabel String : Menyimpan informasi string.

    6. TabelDisplay: Mencatat blok yang aktif.

    C. INTERAKSI ANTAR TABEL

    Pertama kali tabel display akan menunjuk blok mana yang sedang aktif. Dari blok

    yang aktif ini, akan diketahui identifier-identifier yang termasuk dalam blok tersebut.

    Untuk pertama kalinya, yang akan diacu adalah identifier yang paling akhir, kemudian

    identifier sebelumnya, dan seterusnya. Informasi suatu identifier ini mungkin belum

    lengkap. Untuk itu dari tabel identifier ini mungkin akan dicari kelengkapan informasi dari

    suatu identifier ke tabel yang sesuai (tabel real, tabel string, atau tabel array).

    D. CONTOH IMPLEMETASI TABEL SIMBOL

    1. TABEL IDENTIFIER

    Memiliki field :

    a.

    No urut identifierdalam tabelb. Nama identifier

    c. Jenis/obyektif dari identifier : Prosedur, fungsi, tipe, variabel, konstanta

    d. Tipe dari identifieryang bersangkutan : integer, char, boolean, array, record, file,

    no-type

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    61/63

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    62/63

  • 8/10/2019 tugas rangkuman Teknik kompilasi.docx

    63/63

    Contoh implementasi Tabel Display :

    TabDisplay: array [1..tabmax]of integer