Oleh :
Handika Teguh W.
083112706450014
TEKNIK INFORMATIKA
UNIVERSITAS NASIONAL
DAFTAR ISI
BAB I COMPILER
BAB VI SCANNER
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).
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.
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 !
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.
1. Assembler
Source code adalah bahasa assembly, object code adalah bahasa mesin.
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.
3. Interpreter
Interpreter tidak membangkitkan object code, hasil translasi hanya dalam bentuk internal.
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
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.
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
Ciri : α ∈ V N , β ∈ (V T |VN )*
Ciri : α ∈ V N , β ∈ {V T , V T VN } atau α ∈ V N , β ∈ {V T , V N VT }
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.
/
5. Buatlah diagram BNF dari aturan produksi E → T | T+E | T- E, T → a
Notasi BNF :
CFG : A → α , A ∈V N, α ∈(V N | V T )*
I ⇒ IH I
⇒ IAH
⇒ IAAH I H
⇒ HAAH
⇒ xAAH I A b
⇒ x2AH
⇒ x23H I A 3
⇒ x23b
H 2
Parsing top-down :
Parsing bottom-up :
Parsing dimulai dari kalimat x sampai simbol awal S
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.
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)
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.
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
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
SCANNER
- Pohon parse : suatu pohon dimana akarnya (root) adalah simbol awal
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.
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
suatu graph terhubung tidak sirkuler, yang memiliki satu simpul (node)/vertex disebut akar (root)
dan dari situ memiliki lintasan ke setiap simpul.
S → a AS | a,
A → SbA | ba
Penurunan kiri :
S => aAS
=> aSbAS
=> aabAS
=> aaabbaS
=> aabbaa
S → a AS | a,
A → SbA | ba
S => aAS
=> aAa
=> aSbAa
=> aSbbaa
=> aabbaa
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
berisi simbol grammar (V N atau V T ). Pada keadaan awal stack hanya berisi $ danS (simbol
awal).
First(X) adalah himpunan simbol terminal yang merupakan simbol pertama dari X atau
Follow(Y) adalah himpunan simbol terminal yang dapat muncul tepat di sebelah kanan
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)
◊ E → TE’ :
Karena : First(TE’) = Fisrt(T) = {(, id} maka menurut (1a) :M(E, () = M(E, id) = E → TE’
BAB IX
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.
- Duplikasi
- Terdefinisi
b. Memeriksa tipe.
Kode antara (intermediate code) adalah sebuah representasi yang disiapkan untuk mesin
abstrak tertentu.
• 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>.