Anda di halaman 1dari 25

TUGAS TEKNIK KOMPILASI

Oleh :

Handika Teguh W.

083112706450014

TEKNIK INFORMATIKA

UNIVERSITAS NASIONAL
DAFTAR ISI

BAB I COMPILER

BAB II INPUT DAN ANALISA LEKSIKAL

BAB III TATA BAHASA

BAB IV CONTEXT FREE GRAMMAR

BAB V TOP DOWN PARSING

BAB VI SCANNER

BAB VII ANALISIS SYNTAX

BAB VIII PREDIKTIVE PARSER

BAB IX ANALISIS SEMANTIK , KODE ANTARA DAN PEMBANGKITAN KODE


BAB I

COMPILER

1. Sebutkan beberapa tingkatan bahasa berdasarkan tingkat ketergantungannya dengan mesin dan
jelaskanlah !

1. Bahasa Mesin

Merupakan bentuk terendah dari bahasa komputer, setiap instruksi dalam program
diprepresentasikan dengan kode numerik , yang secara fisik berupa deretan angka 0 dan 1

Sekumpulan instruksi dalam bahasa mesin bisa dibentuk menjadi microcode, yaitu
semacam prosedure dalam bahasa mesin.

2. Bahasa Assembly

Merupakan bentuk simbolik dari bahasa mesin. Setiap kode operasi memiliki kode
simbolik, misalnya: ADD untuk penjumlahan ( Addition) dan MUL untuk perkalian
( multiplication).

3. Bahasa Tingkat Tinggi (User Oriented)

Disebut tingkat tinggi karena lebih dekat dengan manusia. Bahasa ini memberikan
fasilitas lebih banyak, kontrol program yang terstruktur, kalang(nested), block, dan
prosedur. Contohnya: Pascal, Basic.

4. Bahasa Yang problem oriented

Bahasa ini memungkinkan penyelesaian untuk sustu masalah atau aplikasi yang spesifik.
Contohnya: SQL (Stucture Query Language) untuk aplikasi database,

Bahasa yang Problem Oriented kadang dimasukkan pula sebagai bahasa tingkat tinggi.
2. Sebutkan keuntungan menggunakan bahasa tingkat tinggi !

1. Kemudahan untuk dipelajari, tidak membutuhkan latar belakang pengetahuan


pengetahuan mengenai perangkat keras (hardware) karena sifatnya yang machine
independent.

2. Lebih mendekati permasalahan yang akan diselesaikan.

3. Pemrograman tidak perlu mengetahui bagaimana representasi data k edalam bentuk


internal memory. Kemampuan untuk konversi data, seperti : floating point misalnya
sudah tersedia. Pekerjaan tersebut ditangani suatu sistem yang mentranslasikan program
bahasa tingkat tinggi ke dalam bahasa mesin.

4. Memberikan banyak pilihan struktur kontrol seperti kondisional (IF-THEN-ELSE).

5. Program lebih mudah di debug.

6. Kemampuan Stuktur data yang lebih baik sehingga memfasilitasi pengekspresian suatu
solusi dari masalah tertentu.

7. Karena ketersediaan feature seperti prosedur, bahasa tingkat tinggi memungkinkan suatu
deskripsi modular dan hirarkis dalam pemrograman . Suatu pekerjaan bisa diserahkan
pada suatu tim , dan memungkinkan pembagian kerja.

8. Kompatibilitas dan dokumentasi yang lebih baik dalam pengembangan program.

9. Tidak bergantung pada mesin ( machine independent) sehingga memiliki portabilitas


tinggi. Program hanya memerlukan sedikit perubahan untuk bisa dieksekusi pada mesin
yang berbeda arsitektur internalnya dan instruksi bahasa mesinnya. Portabilitas ini akan
mengurangi biaya.

3. Sebutkan dan jelaskan jenis-jenis dari translator !

1. Assembler

Source code adalah bahasa assembly, object code adalah bahasa mesin.

Contohnya: Turbo Assembler dan Macro Assembler.


Gbr 1.3. Assembler

2. Kompilator (Compiler)

Source code adalah bahasa tingkat tinggi ( misal bahasa Pascal) , object code adalah
bahasa mesin atau bahasa assembly. Source code dan data diproses pada saat yang
berbeda.

Contohnya : Turbo Pascal.

Compile time adalah saat pengubahan source code ke object code .

Run time adalah saat eksekusi object code.

Compile time Run time

Gambar1.4. Proses kompilasi

3. Interpreter

Interpreter tidak membangkitkan object code, hasil translasi hanya dalam bentuk internal.

Contoh interpreter: BASICA/GW-BASIC, LISP,SMALLTALK.

Source code dan data diproses pada saat yang sama.


Run time

Gambar 1.5. Proses Interpretasi

4. Jelaskan fungsi dari scanner,parser,dan analisis semantic !

• Scanner : memecah program sumber menjadi besaran leksik / token.


• Parser : memeriksa kebenaran dan urutan kemunculan token.
• Analisis Semantik : melakukan analisis semantik, biasanya dalam realisasi akan
digabungkan dengan intermediate code generator ( bagian yang berfungsi
membangkitkan kode antara)

5. Buatlah program menggunakan Turbo C++ dan lakukan compile pada program tersebut !

#include<conio.h>
#include<iostream.h>
#include<math.h>

void main()
{
int no,n1,n2,n3,kali,tam,krg,bg,md;
cout<<" MENU OPERATOR "<<endl;
cout<<" ================================ "<<endl;
cout<<" 1. OPERATOR TAMBAH "<<endl;
cout<<" 2. OPERATOR KALI "<<endl;
cout<<" 3. OPERATOR KURANG "<<endl;
cout<<" 4. OPERATOR BAGI "<<endl;
cout<<" 5. OPERATOR MOD "<<endl;
cout<<" 6. OPERATOR NAIK "<<endl;
cout<<" 7. OPERATOR TURUN "<<endl;
cout<<" 8. KELUAR PROGRAM "<<endl;
cout<<" ================================ "<<endl;
cout<<" MASUKKAN NOMOR : ";cin>>no;
cout<<" ================================ "<<endl;
switch(no)
{
case 1:
cout<<" OPERATOR TAMBAH "<<endl;
cout<<" ================================ "<<endl;
cout<<" Masukkan Nilai 1 =";cin>>n1;
cout<<" Nilai 1 Adalah "<<n1<<endl;
cout<<" Masukkan Nilai 2 =";cin>>n2;
cout<<" Nilai 2 Adalah "<<n2<<endl;
cout<<" Masukkan Nilai 3 =";cin>>n3;
cout<<" Nilai 3 Adalah "<<n3<<endl;
tam=n1+n2+n3;
cout<<" TOTAL OPERATOR TAMBAH = "<<tam<<endl;
cout<<" ================================ "<<endl;
break;
case 2:
cout<<" OPERATOR KALI "<<endl;
cout<<" ================================ "<<endl;
cout<<" Masukkan Nilai 1 =";cin>>n1;
cout<<" Nilai 1 Adalah "<<n1<<endl;
cout<<" Masukkan Nilai 2 =";cin>>n2;
cout<<" Nilai 2 Adalah "<<n2<<endl;
cout<<" Masukkan Nilai 3 =";cin>>n3;
cout<<" Nilai 3 Adalah "<<n3<<endl;
kali=n1*n2*n3;
cout<<" TOTAL OPERATOR KALI = "<<kali<<endl;
cout<<" ================================ "<<endl;
break;
case 3:
cout<<" OPERATOR KURANG "<<endl;
cout<<" ================================ "<<endl;
cout<<" Masukkan Nilai 1 =";cin>>n1;
cout<<" Nilai 1 Adalah "<<n1<<endl;
cout<<" Masukkan Nilai 2 =";cin>>n2;
cout<<" Nilai 2 Adalah "<<n2<<endl;
cout<<" Masukkan Nilai 3 =";cin>>n3;
cout<<" Nilai 3 Adalah "<<n3<<endl;
krg=n1-n2-n3;
cout<<" TOTAL OPERATOR KURANG = "<<krg<<endl;
cout<<" ================================ "<<endl;
break;
case 4:
cout<<" OPERATOR BAGI "<<endl;
cout<<" ================================ "<<endl;
cout<<" Masukkan Nilai 1 =";cin>>n1;
cout<<" Nilai 1 Adalah "<<n1<<endl;
cout<<" Masukkan Nilai 2 =";cin>>n2;
cout<<" Nilai 2 Adalah "<<n2<<endl;
bg=n1/n2;
cout<<" TOTAL OPERATOR BAGI = "<<bg<<endl;
cout<<" ================================ "<<endl;
break;
case 5:
cout<<" OPERATOR MOD "<<endl;
cout<<" ================================ "<<endl;
cout<<" Masukkan Nilai 1 =";cin>>n1;
cout<<" Nilai 1 Adalah "<<n1<<endl;
cout<<" Masukkan Nilai 2 =";cin>>n2;
cout<<" Nilai 2 Adalah "<<n2<<endl;
md=n1-n2;
cout<<" TOTAL OPERATOR MOD = "<<md<<endl;
cout<<" ================================ "<<endl;
break;
case 6:
cout<<" OPERATOR NAIK "<<endl;
cout<<" ================================ "<<endl;
cout<<" Masukkan Nilai 2 =";cin>>n2;
cout<<" Nilai 2 Adalah "<<n2<<endl;
++n2;
cout<<" Nilai = "<<n2<<endl;
cout<<" ================================ "<<endl;
break;
case 7:
cout<<" OPERATOR TURUN "<<endl;
cout<<" ================================ "<<endl;
cout<<" Masukkan Nilai 1 =";cin>>n1;
cout<<" Nilai 1 Adalah "<<n1<<endl;
++n1;
cout<<" Nilai = "<<n1<<endl;
cout<<" ================================ "<<endl;
break;
default:
cout<<" Created By DHIKA "<<endl;
cout<<" =============================================== "<<endl;
break;
}
getch();
}
BAB II

INPUT DAN ANALISA LEKSIKAL

1. Jelaskan apa yang dimaksud dengan analisa leksikal !

Membaca program sumber, karakter demi karakter. Sederetan (satu atau lebih) karakter
dikelompokkan menjadi satu kesatuan mengacu kepada pola kesatuan kelompok karakter (token)
yang ditentukan dalam bahasa sumber.

2. Sebutkan aspek-aspek yang harus diperhatikan saat merancang sebuah bahasa !

1. Spesifikasi leksikal,

Misalnya setiap kata harus tersusun atas huruf mati dan huruf hidup yang disusun
bergantian, atau setiap token harus dimulai dengan huruf dan selanjutnya boleh diikuti
oleh huruf atau angka.

2. Spesifikasi sintaks,

Misalnya setiap kalimat mengikuti pola subyek- predikat- obyek atau ekspresi for-do
mengikuti pola for-identifier-:= identifier-toidentifier-do-ekspresi.

3. Aturan-aturan semantik,

Misalnya kata yang mendahului kata kerja haruslah kata benda yang menggambarkan
sesuatu yang hidup dan berkaki, atau operasi perkalian hanya bisa dilakukan antara dua
operan dengan tipe yang sama.

3. Apa pengertian dari list error ? Menampilkan kesalahan-kesalahan yang terjadi pada suatu
baris.

4. Berikan penjelasan tentang penganalisa leksikal ! Membaca program sumber, karakter demi
karakter. Sederetan (satu atau lebih) karakter dikelompokkan menjadi satu kesatuan mengacu
kepada pola kesatuan kelompok karakter (token) yang ditentukan dalam bahasa sumber.
Kelompok karakter yang membentuk sebuah token dinamakan lexeme untuk token tersebut.
Setiap token yang dihasilkan disimpan di dalam tabel simbol. Sederetan karakter yang tidak
mengikuti pola token akan dilaporkan sebagai token tak dikenal (unidentified token).

5. Berikan penjelasan tentang penganalisa syntax ! Memeriksa kesesuaian pola deretan token
dengan aturan sintaks yang ditentukan dalam bahasa sumber. Sederetan token yang tidak
mengikuti aturan sintaks akan dilaporkan sebagai kesalahan sintaks (sintax error). Secara logika
deretan token yang bersesuaian dengan sintaks tertentu akan dinyatakan sebagai pohon parsing
(parse tree).
BAB III

TATA BAHASA

1. Sebutkan penggolongan bahasa menurut hirarki Chomsky !

1. Grammar tipe ke-0 : Unrestricted Grammar (UG)

Ciri : α, β ∈ (V T |VN )*, |α |> 0

2. Grammar tipe ke-1 : Context Sensitive Grammar (CSG)

Ciri : α, β ∈ (V T |VN )*, 0 < |α | ≤ |β |

3. Grammar tipe ke-2 : Context Free Grammar (CFG)

Ciri : α ∈ V N , β ∈ (V T |VN )*

4. Grammar tipe ke-3 : Regular Grammar (RG)

Ciri : α ∈ V N , β ∈ {V T , V T VN } atau α ∈ V N , β ∈ {V T , V N VT }

2. Apa yang dimaksud dengan diagram keadaan ? Jelaskanlah !


Diagram Keadaan (State Transition Diagram ) digunakan untuk mendapatkan token (token
adalah simbol terminal pada teori bahasa automata), yaitu melakukan analisis leksikal terhadap
program sumber.

3. Sebutkan fungsi dari notasi BNF dan gambarkan simbolnya !

Aturan –aturan produksi dapat dinyatakan dalam bentuk BNF (Backus Naur Form/ Backus Norm
Form ). Notasi BNF telah banyak dipakai untuk melakukan definisi formal bahasa pemrograman.

::= Identik dengan simbol pada aturan produksi

| Idem dengan simbol serupa pada aturan produksi

<> Mengapit simbol variabel / non terminal

{} Pengulangan 0 sampai n kali

4. Buatlah diagram sintaksnya dari aturan produksi T → F*T | F/ T | F

/
5. Buatlah diagram BNF dari aturan produksi E → T | T+E | T- E, T → a

Notasi BNF :

E ::= <T> | <T> + <E> | <T>- <E>, T ::= a


BAB IV

CONTEXT FREE GRAMMAR

1. Tuliskan bentuk umum dari CFG!

CFG : A → α , A ∈V N, α ∈(V N | V T )*

2. Buatkan derivasi dan parsing dari G = {I → HI HIA, H → abc...z, A →


012...9} dengan I adalah simbol awal.

Berikut ini kedua cara analisa sintaks untuk kalimat x23b.

cara 1 (derivasi) cara 2 (parsing)

I ⇒ IH I

⇒ IAH

⇒ IAAH I H

⇒ HAAH

⇒ xAAH I A b

⇒ x2AH

⇒ x23H I A 3

⇒ x23b

H 2

3. Sebutkan macam-macam metoda parsing dan jelaskan !

Ada 2 metoda parsing : top-down dan bottom-up.

 Parsing top-down :

Parsing dimulai dari simbol awal S sampai kalimat x

 Parsing bottom-up :
Parsing dimulai dari kalimat x sampai simbol awal S

4. Jelaskan tentang metoda brute force !

Kelas metoda dengan backup, termasuk metoda Brute-Force, adalah kelas metoda parsing yang
menggunakan produksi alternatif, jika ada, ketika hasil penggunaan sebuah produksi tidak sesuai
dengan simbol input. Penggunaan produksi sesuai dengan nomor urut produksi.

5. Sebutkan dua kelas metoda parsing top down !

1. kelas metoda dengan backup,

Contoh: metoda Brute-Force

2. kelas metoda tanpa backup

Contoh: metoda recursive descent.


BAB V

TOP DOWN PARSING

1. Jelaskan perbedaan antara parsing top down dan parsing bottom up !

Parsing top-down : Diberikan kalimat x sebagai input. Parsing dimulai dari simbol awal S sampai
kalimat x nyata (atau tidak nyata jika kalimat x memang tidak bisa diturunkan dari S) dari
pembacaan semua leaf dari pohon parsing jika dibaca dari kiri ke kanan.
Parsing bottom-up : Diberikan kalimat x sebagai input. Parsing dimulai dari kalimat x yang nyata
dari pembacaan semua leaf pohon parsing dari kiri ke kanan sampai tiba di simbol awal S (atau
tidak sampai di S jika kalimat x memang tidak bisa diturunkan dari S)

2. Jelaskan ketentuan produksi yang digunakan pada metode recursive descent !

Jika terdapat dua atau lebih produksi dengan ruas kiri yang sama maka karakter pertama dari
semua ruas kanan produksi tersebut tidak boleh sama. Ketentuan ini tidak melarang adanya
produksi yang bersifat rekursi kiri.

3. Berikan contoh GPS !

I⇒IH

⇒HH

⇒Hb

Hb adalah sentensial dan b adalah simple frase (dibandingkan dengan Q1β Q2 maka Q=
H, β = b, dan Q = ε) Perhatikan : simple frase (b) adalah yang terakhir diturunkan

I⇒IH

⇒Ib

⇒Hb

Hb adalah sentensial dan H adalah simple frase (dibandingkan dengan Q1β Q2 maka Q=
ε, β = H, dan Q = b) Perhatikan : simple frase (H) adalah yang terakhir diturunkan

4. Gambarkan relasi preseden dan GPS !


• Relasi preseden adalah relasi antara 2 simbol grammar (baik V T maupun V N ) dimana paling
tidak salah satu simbol tersebut adalah komponen handel.
• Misalkan S dan R adalah 2 simbol. Ada 3 relasi preseden yang : ←, ↔ , dan →

Relasi : R → S Relasi : R ↔ S Relasi : R ← S

5. Berikan contoh metode brute !

Terdapat grammar/tata bahasa G = (V,T,P,S), dimana

V= (“E”,”T”,”F”) Simbol NonTerminal (variable)

T= (“i”,”*”,”/” ,”+”,”-”) Simbol Terminal

S=”E” Simbol Awal / Start simbol

String yang diinginkan adalah i * i

aturan produksi (P) yang dicobakan adalah

1. E → T | T + E | T - E

T→F|F*T|F/T

F→i

2. E → T | E+T | E-T

T → F | T* F | T / F

F→i

accept (diterima)

 Meskipun ada rekursif kiri, tetapi tidak diletakkan sebagai aturan yang paling kiri

3. E → E+T | E-T | T

T → T* F | T / F | F
F→i

Rekursif kiri, program akan mengalami loop.


BAB VI

SCANNER

1. Sebutkan tugas-tugas scanner !

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


2. Mengenali besaran leksik
3. Mentransformasi menjadi sebuah token dan menentukan jenis tokennya.
4. Mengirimkan token.
5. Membuang/mengabaikan blank dan komentar dalam program.
6. Menangani kesalahan.
7. Menangani tabel simbol.

2. Jelaskan dan gambarkan posisi penganalisa sintaks (parser) !

- Deretan token : dihasilkan oleh Penganalisa Leksikal (Scanner)

- Pohon parse : suatu pohon dimana akarnya (root) adalah simbol awal

grammar (starting symbol), setiap node dalam (inner

node) adalah simbol nonterminal, dan daunnya (leaf)

dibaca dari kiri ke kanan adalah deretan token masukan.

3. Apa yang dimaksud dengan kesalahan syntax ?! Syntax terjadi jika pola deretan token tidak
memenuhi ketentuan pola yang telah ditentukan grammar untuk parser.

4. Mengapa grammar yang terpilih untuk melakukan scanner harus grammar RG,bukan CFG ?!
Karena perbedaan cara pandangRG dengan CFG terhadap sebuah token yang mengalir antara
scanner dan parser. BagiRG (scanner) sebuah token (kecuali reserve word) adalah sebuah
kalimat dimana setiapkarakter pembentuk token tersebut adalah simbol terminal. Sebaliknya bagi
CFG (parser) sebuah token adalah sebuah simbol terminal dimana sederetan tertentu token akan
membentuk sebuah kalimat.

5. Apa yang dimaksud dengan pohon parser ?

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

ANALISIS SYNTAX

1. Apa yang dimaksud dengan tree ?

suatu graph terhubung tidak sirkuler, yang memiliki satu simpul (node)/vertex disebut akar (root)
dan dari situ memiliki lintasan ke setiap simpul.

2. Bagaimana cara melakukan parsing?

• Penurunan terkiri ( leftmost derivation)

Simbol variabel terkiri yang diperluas terlebih dahulu.

• Penurunan terkanan ( rightmost derivation)

Simbol variabel terkanan yang diperluas terlebih dahulu.

3.Berikan contoh parsing dengan penurunan terkiri !

S → a AS | a,

A → SbA | ba

Penurunan kiri :

S => aAS

=> aSbAS

=> aabAS

=> aaabbaS

=> aabbaa

4.Berikan contoh parsing dengan penurunan terkini !

S → a AS | a,

A → SbA | ba

S => aAS
=> aAa

=> aSbAa

=> aSbbaa

=> aabbaa

5. Bagaimana ciri-ciri metode recursive descent parser ?

Secara rekursif menurunkan semua variabel dari awal sampai bertemu terminal dan tidak pernah
mengambil token secara mundur (no back-track).

Metode parser yang digunakan adalah LL(1) parser yaitu memparsing satu simbol non terminal
dengan metode top down parsing yang tidak mengandung left recursive
BAB VIII

PREDICTIVE PARSER

1. Gambarkan model dari predictive parser !

2. Apa yang dimaksud dengan stack ?

berisi simbol grammar (V N atau V T ). Pada keadaan awal stack hanya berisi $ danS (simbol
awal).

3. Jelaskan kedua fungsi dari parsing M table !

Kedua fungsi tersebut adalah First(X), X ∈(V N | VT ) dan Follow(Y), Y ∈V N .

First(X) adalah himpunan simbol terminal yang merupakan simbol pertama dari X atau

merupakan simbol pertama dari simbol-simbol yang dapat diturunkan dari X.

Follow(Y) adalah himpunan simbol terminal yang dapat muncul tepat di sebelah kanan

Ymelalui nol atau lebih derivasi.

4. Apa yang dimaksud dengan parsing M table !

array 2 dimensi M(A,a), dimana A adalah simbol nonterminal dan adalah simbol terminal
(token) atau simbol $. Nilai M(A,a) adalah :sebuah produksi A → α atau tanda-tanda kesalahan
(keduanya akan dibahas kemudian)

5. Diketahui grammar E  TE’,buatkanlah algoritma parsing tabelnya !

◊ E → TE’ :

Karena : First(TE’) = Fisrt(T) = {(, id} maka menurut (1a) :M(E, () = M(E, id) = E → TE’
BAB IX

ANALISIS SEMANTIK , KODE ANTARA DAN PEMBANGKITAN KODE

1. Apa fungsi dari semantic analyzer secara global !?

Secara global, fungsi dari semantic analyzer adalah untuk menentukan makna dari serangkaian
instruksi yang terdapat dalam program sumber. Fungsi ini adalah sesuatu yang unik dan berbeda
dengan bagian lain dari keseluruhan proses kompilasi.

2. Jelaskan pengecekan yang dilakukan oleh analisis semantic !

a. Memeriksa keberlakukan nama-nama meliputi pemeriksaan berikut.

- Duplikasi

- Terdefinisi

b. Memeriksa tipe.

Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement- statement.

3. Apa yang dimaksud dengan kode antara ?

Kode antara (intermediate code) adalah sebuah representasi yang disiapkan untuk mesin
abstrak tertentu.

4. Apa kegunaan dari kode antara ?

• Untuk memperkecil usaha dalam membangun kompilator dari sejumlah bahasa ke


sejumlah mesin. Dengan adanya kode antara yang lebih machine independent maka
kode antara yang dihasilkan dapat digunakan lagi pada mesin lainnya.

• Proses optimasi masih lebih mudah. Beberapa strategi optimisasi lebih mudah
dilakukan pada kode antara daripada pada program sumber atau pada kode assembly
dan kode mesin.

• Bisa melihat program internal yang gampang dimengerti. Kode antara ini akan lebih
mudah dipahami daripada kode assembly atau kode mesin.
5. Jelaskan tentang notasi postfix !

Sehari-hari kita biasa menggunakan operasi dalam notasi infix ( letak operator di tengah). Pada
notasi Postfix operator diletakkan paling akhir maka disebut juga dengan notasi Sufix atau
reverse Polish.Sintaks notasi Postfix; < operan> < operan> < operator>.