Anda di halaman 1dari 12

TUGAS AUTOMATA DAN KOMPILASI

Dosen Pengampu :
Budiman, S.kom, M.kom

Disusun Oleh :
Rendra Eka Saputra (172355201007)

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK

UNIVERSITAS DARUL’ULUM
JOMBANG
2020
Otomata

Otomata adalah mesin abstrak yang menggunakan model matematika, tetapi matematika
yang digunakan benar-benar berbeda dibanding matematika klasik dan kalkulus. Model
yang digunakan adalah model mesin state (state machine model) atau model trnasisi state
(state transition model).

Terdapat 3 model komputasi pada teori otomata.


- Finite automata
- Pushdown automata
- Turing Mavhine

Memori Otomata

Otomata dibedakan berdasarkan jenis memori sementara yang dimilikinya, yaitu:

- Finite automata (FA)


Tidak memiliki memori sementara. Finite automata adalah kelas mesin dengan
kemampuan-kemampuan paling terbatas.

- Pushdown automata (PDA)


Memiliki memori sementara dengan mekanisme LIFO (Last In, First Out). Mesin ini lebih
ampuh karena bantuan keberadaan stack yang dipandang sebagai unit memori

- Turing Machine (TM)


Memiliki memori dengan mekanisme pengaksesan acak (Random akses memori). Turing
Machine merupakan model matematika untuk komputer saat ini.

Sejarah Otomata dan Teori Bahasa

Otomata bermula sebelum komputer ada pada teori di bidang sistem logika matematika
atau formal, ilmuwan David Hilbert telah mencoba menciptakan algoritma umum untuk
pembuktian (seluruh) persoalan matematika secara otomatis yaitu mampu menentukan
salah benarnya sembarang prosisi matematika.

Tahun 1931, Kurt G�del mempublikasikan teori ketidaklengkapan dimana membuktikan


prosedur/algoritma yang dikehendaki David Hilbert tersebut tidak akan pernah ada.

G�del membangun rumus di kalkulus predikat yang diterapkan pada bilangan bulat yang
memiliki pernyataan-pernyataan definisi yang tidak dapat dibuktikan maupun dibantah di
dalam sistem logika yang mungkin dibangun manusia.

Formalisasi argumen teorema ketidaklengkapan G�del ini berikut penjelasan dan


formalisasi selanjutnya dari prosedur efektif secara intuisi merupakan salah satu
pencapaian intelektual terbesar abad 20, yaitu abad dimana formalisasi berkembang
semarak.

Pengembangan teori otomata, komputasi dan teori bahasa berikutnya difasilitasi


perkembangan bidang psyco-linguistic. Bidang psyco-linguistic berupaya menjawab
pertanyan-pertanyan berikut:
- Apakah bahasa secara umum?
- Bagaimana manusia mengembangkan bahasa?
- Bagaimana manusia memahami bahasa?
- Bagaimana manusia mengajarkan bahasa ke anak-anaknya?
- Apa gagasan-gagasan yang dapat dinyatakan dan bagaimana caranya?
- Bagaimana manusia membangun kalimat-kalimat dari gagasan-gagasan yang berada di
pikirannya?

Sekitar tahun 1950-an, Noam Chomsky menciptakan model matematika sebagai sarana
untuk mendeskripsikan bahasa serta menjawab pertanyaan-pertanyaan di atas. Saat ini
dimulai pendalaman bidang bahasa komputer.

Perbedaan antara bahasa komputer dan bahasa manusia adalah sampai sekarang belum
diketahuinya bagaimana cara manusia mengartikan bahasa, sementara dengan pasti dapat
mengartikan bahasa pada komputer.

Noam Chomsky mengemukakan perangkat format disebut grammar untuk memodelkan


properti-properti bahasa.

Grammar berisi sejumlah aturan serta menspesifikasikan bahasa tertentu.

Bahasa berisi semua string yang dapat dihasilkan menggunakan aturan-aturan grammar.

Meski pembahasan Chomsky terutama ditujukan untuk bahasa alami, grammar


mempunyai nilai/manfaat sangat besar di ilmu informatika/komputer karena pencapaian ini
digunakan untuk mendeskripsikan dan mendefinisikan sintaks bahasa pemrograman dan
bahasa-bahasa formal lainnya.

Grammar diterapkan pada perancangan kompilator dan bidang-bidang di ilmu komputer.

McCulloch dan Pitts mengemukakan Mesin Abstrak sederhana yaitu finite automata untuk
memodelkan neuron nets.

Finite automata juga digunakan untuk merancang switching circuit. Studi mengenai teori
otomata terkait bidang-bidang lain di ilmu komputer.

Kemudian ekivalensi antara finite automata dan ekspresi reguler (reguler expression)
dikemukakan Stephen Kleene. Sejak saat itu teori bahasa dikaitkan secara erat dengan teori
bahasa formal. ubungan teori otomata dan teori pengkodean (coding theory) juga banyak
diteliti.

Turing machine seperti komputer modern saat ini dapat mengolah (simbol-simbol di tape)
dan mengahasilkan keluaran (simbol-simbol yang berada di tapenya setelah berakhirnya
sebarisan pergerakkan) merupakan karya teoritis dari Alan Turing.

Karena banyak yang berperan pada pengembangannya, bidang teori ini diberi aneka ragam
nama yaitu:
- teori otomata (theory of automata)
- teori bahasa formal (theory of formal language)
- teori mesin turing (theory of Turing machine).

Teknik Kompilasi

TUJUAN
Mengetahui Penerapan konsep ilmu komputer pada perilaku komputer yaitu algoritma,
arsitektur komputer, stuktur data maupun penerapan teori bahasa dan automata

Compiler adalah merupakan konstruksi inti dari ilmu komputer

ARTI KATA TEKNIK KOMPILASI


Teknik : Metode atau Cara

Kompilasi : Proses mengabungkan serta menterjermahkan sesuatu


(source program) menjadi bentuk lain

Compile : To translate a program written in a high-level programming language into


machine language.

Translator : Compiler & Interpreter


Translator : Adalah suatu program dimana mengambil input sebuah program yang ditulis
pada satu bahasa program (source language) ke bahasa lain (The object on target
language)

Jika source language adalah high level language, seperti cobol, pascal, fortran maka object
language adalah low-level language atau mesin language. Translator seperti ini disebut
COMPILER

Kenapa perlu Translator ?


-Dengan bahasa mesin adalah bahasa bentuk bahasa terendah komputer, berhubungan
langsung dengan bagian bagian komputer seperti bits, register & sangat primitive
-Jawaban atas pertanyaan ini akan membingungkan bagi programmer yang membuat
program dengan bahasa mesin.
-Bahasa mesin adalah tidak lebih dari urutan 0 dan 1
-Instruksi dalam bahasa mesin bisa saja dibentuk menjadi micro-code, semacam prosedur
dalam bahasa mesin
-Bagaimana dengan orang tidak mengerti bahasa mesin

Ada Beberapa Translator


1. Assembler
Source code adalah bahasa assembly, Object code adalah bahasa mesin
*.asm –>assembler–>object code (*.exe/*.com)
2. Compiler
Source code adalah bahasa tingkat tinggi, object code adalah bahasa mesin atau bahasa
assembly. Source code dan data diproses berbeda
3. Interpreter
Interpreter tidak menghasilkan bentuk object code, tetapi hasil translasinya hanya dalam
bentuk internal, dimana program induk harus selalu ada-berbeda dengan compiler
COMPILER vs INTERPRETER
Compiler bisa menangkap berbagai kesalahan dalam 1 program kode sumber secara
sekaligus. Kalau Interpreter cuma bisa menangkap beberapa kesalahan pada 1 baris kode
sumber pada suatu saat

Biasanya program yang dihasilkan compiler lebih cepat dari waktu pelaksanaan program
dengan interpreter.

Kalau compiler menghasilkan kode antara (misal object code) dan harus digabungkan /
dilink menjadi bentuk yang dapat dijalankan mesin / komputer (executable). Kalau
Interpreter biasanya tidak menghasilkan kode antara.

Kalau hendak menjalankan program hasil kompilasi bisa dilakukan tanpa kode sumber.
Kalau interpreter butuh kode sumber

Kalau dengan kompiler, maka pembuatan kode yang bisa dijalankan mesin dilakukan
dalam 2 tahap terpisah, yaitu parsing / pembuatan kode objek dan linking / penggabungan
kode objek dengan library. Kalau interpreter tidak ada proses terpisah.

Kalau compiler membutuhkan linker untuk menggabungkan kode objek dengan berbagai
macam library demi menghasilkan suatu kode yang bisa dijalankan oleh mesin. Kalau
interpreter tidak butuh linker.

Interpreter cocok untuk membuat / menguji coba modul / sub-routine / program-program


kecil. Kalau compiler agak repot karena untuk mengubah suatu modul / kode objek kecil,
maka harus dilakukan proses linking / penggabungan kembali semua objek dengan library
yang diperlukan.

Pada kompiler bisa dilakukan optimisasi / peningkatan kwalitas kode yang bisa dijalankan.
Ada yang dioptimasi supaya lebih cepat, ada yang supaya lebih kecil, ada yang dioptimasi
untuk sistem dengan banyak processor. Kalau interpreter susah / tidak bisa dioptimasikan

Proses kompilasi dikelompokkan ke dalam dua kelompok besar :


1.analisa : program sumber dipecah-pecah dan dibentuk menjadi bentuk antara (inter-
mediate representation)
2.sintesa : membangun program sasaran yang diinginkan dari bentuk

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)

Penganalisa Sintaks
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)

Penganalisa Semantik
memeriksa token dan ekspresi dari batasan-batasan yang ditetapkan. Batasan-batasan
tersebut misalnya :
a. panjang maksimum token identifier adalah 8 karakter,
b. panjang maksimum ekspresi tunggal adalah 80 karakter,
c. nilai bilangan bulat adalah -32768 s/d 32767,
d. operasi aritmatika harus melibatkan operan-operan yang bertipe sama

Pembangkit Kode Antara


membangkitkan kode antara (intermediate code) berdasar-kan pohon parsing. Pohon parse
selanjutnya diterjemahkan oleh suatu penerjemah yang dinamakan penerjemah
berdasarkan sintak (syntax-directed translator). Hasil penerjemahan ini biasanya
merupakan perintah tiga alamat (three-address code) yang merupakan representasi
program untuk suatu mesin abstrak. Perintah tiga alamat bisa berbentuk quadruples (op,
arg1, arg2, result), tripels (op, arg1, arg2). Ekspresi dengan satu argumen dinyatakan
dengan menetapkan arg2 dengan – (strip, dash)

Pengoptimal kode
melakukan optimasi (penghematan space dan waktu komputasi), jika mungkin, terhadap
kode antara

Pembangkit Kode Mesin


membangkitkan kode dalam bahasa target tertentu (misalnya bahasa mesin)

Pembuatan compiler
Bahasa mesin
-Sangat sukar dan sangat sedikit kemungkinannya untuk membuat compiler dengan bahasa
ini, karena manusia susah mempelajari bahasa mesin,
-Sangat tergantung pada mesin,
-Bahasa Mesin kemungkinan digunakan pada saat pembuatan Assembler

Assembly
-Hasil dari program mempunyai Ukuran yang relatif kecil
-Sulit dimengerti karena statement/perintahnya singkat-singkat, butuh usaha yang besar
untuk membuat
-Fasilitas yang dimiliki terbatas

Bahasa Tingkat Tinggi (high level language)


-Lebih mudah dipelajari
-Fasilitas yang dimiliki lebih baik (banyak)
-Memiliki ukuran yang relatif besar, misal membuat compiler pascal dengan menggunakan
bahasa C
-Untuk mesin yang berbeda perlu dikembangkan tahapan-tahapan tambahan.
-Misal membuat compiler C pada Dos bedasarkan compiler C pada unix

Bahasa Tingkat Tinggi (Pemrograman )


-Bahasa yang lebih dikenal oleh manusia, maksudnya adalah statement yang digunakan
menggunakan bahasa yang dipakai oleh manusia (inggris),
-Bahasa pemrograman didefinisikan dengan menentukan bentuk programnya (sintak) dan
arti programnya (semantik)
-Memberikan fasilitas yang lebih banyak, seperti struktur kontrol program yang terstruktur,
blok-blok serta prosedur dan fungsi-fungsi
-Progam mudah untuk di koreksi (debug)
-Tidak tergantung pada salah satu mesin
-Kontrol struktur seperti : kondisi (if .. Then.. Else ),
perulangan (For, while ), Struktur blok (begin.. End { .. } )

Tingkatan Bahasa Pemrograman


-4GL Language
-High level Language
-Assembly Language
-Machine Language

SKENARIO PERANCANGAN BAHASA PEMROGRAMAN


-Tentukan apa yang diinginkan.
-Tentukan feature yang mungkin
-Tentukan desain dan sesuaikan dengan featurenya
-Tentukan rincian, parsing, dan error checking.
-Tuliskan user manual dan help.
-Evaluasilah, jika salah mulai lagi dari langkah 3.
-Jika sudah benar, optimisasilah dan uji segala kemungkinan.
-Cobakan kepada pengguna, tunggu reaksinya.
-Perbaiki bug dan mulai versi baru.

Tools Bantu Compiler


-Free Compiler Construction Tools
http://www.thefreecountry.com/developercity/compiler.html

-TASSKAF. Bahasa TASSKAF ini merupakan subset dari Java. Dapat disusun suatu
program ke byte code yang dapat dijalankan di Java Virtual Machine (JVM).
Pada site tersebut juga tersedia informasi materi kuliah dengan LEX, YACC
http://rw4.cs.uni-sb.de/~martin/COMP/TK/

-GENTLE. Gentle ini merupakan perangkat bantu (toolkit) modern untuk menulis
compiler dan mengimplemntasikannya pada bahasa tertentu. Perangkat bantu ini
mendukung semua proses translasi, dari definisi tree sintaks abstrak, pater matching, smart
traversal dan lain sebagainya. Toolkit ini telah digunakan secara luas di riest dan industri
.http://www.first.gmd.de/gentle/

-ELI. Merupakan suatu lingkungan pemrograman yang memungkinkan membuat suatu


implementasi bahasa pemrograman secara lengkap dari suatu sepsifikasi. Perangkat bantu
ini menangani struktural analisis, analisis nama, type, value dlsb dan akan menghasilkan
kode C. http://www.cs.colorado.edu/~eliuser/
CONTOH SOAL

POSTFIX :

1. IF a > b THEN x := y ELSE x := z


Jawab:

20 a 30 x
21 b 31 z
22 > 32 :=
23 30 33
24 BZ
25 x
26 y
27 :=
28 BR
29 33

2. IF c > d THEN g := y ELSE g := z


Jawab :

11 c 21 g
12 d 22 y
13 > 23 :=
14 21 24
15 BZ
16 g
17 y
18 :=
19 BR
20 24

3. b := 3
WHLE b < 5 DO
b := b + 3
jawab :

10 b 18 b
11 3 19 b
12 := 20 3
13 b 21 +
14 5 22 :=
15 < 23 13
16 25 24 BR
17 BZ 25
4. x := 2
WHLE x < 5 DO
x := x + 2
jawab :

10 x 18 x
11 2 19 x
12 := 20 2
13 x 21 +
14 5 22 :=
15 < 23 13
16 25 24 BR
17 BZ 25

TRIPLES NOTATION :

1. b := c * d + a / e
jawab :

1 *, c, d
2 /, a, e
3 +, (1), (2)
4 :=, b, (3)

2. f := b * c + d / e
jawab :

1 *, b, c
2 /, d, e
3 +, (1), (2)
4 :=, f, (3)

3. IF b < c THEN
b := d – e
ELSE
b := d + e
jawab :

1 <, b, c
2 BZ, (1), (6) bila kondisi 1 loncat ke 6
3 -, d, e
4 :=, b, (3)
5 BR, (8)
6 +, d, e
7 :=, b, (6)
8
4. IF y < z THEN
y := a – b
ELSE
y := a + b
jawab :

9 <, y, z
10 BZ, (9), (16) bila kondisi 9 loncat ke 16
11 -, a, b
12 :=, b, (11)
13 BR, (16)
14 +, d, e
15 :=, b, (14)
16

5. a := c + d * f / e
b:=d * f
jawab :

list intruksi list eksekusi


1. *, d, f 1. 1
2. /, (1), e 2. 2
3. +, c, (2) 3. 3
4. :=, a, (3) 4. 4
5. :=, b, (1) 5. 1
6.5

6. x := a + b * c / d
y:= b * c
jawab :

list intruksi list eksekusi


1. *, b, c 1. 1
2. /, (1), d 2. 2
3. +, a, (2) 3. 3
4. :=, x, (3) 4. 4
5. :=, y, (1) 5. 1
6. 5

QUARDRUPLES NOTATION :

1 a := d * c + b / e
jawab :

1 *, d, c, t1
2 /, b, e, t2
3 +, t1, t2,a
2 b := x * y + d / e
jawab :

4 *, x, y, t1
5 /, d, e, t2
6 +, t1, t2, b

Quardruple :

1 (x+y)*(a+b)
Jawab :

1 +, x, y, t1
2 +, a, b, t2
3 *, t1, t1,t3

Code generator :
LDA x (isi x kedalam acumulator)
ADA y (isi accumulator dijumlahkan dengan y)
STO t1 (simpan accumulator ke t1)
LDA a
ADD b
STO t2
LDA t1
MUL t2
STO t3

Optimasi kode generator diatas :

LDA x
ADA y
STO t1
LDA a
ADD b
STO t2
2 (d+e)*(y+z)
Jawab :

1 +, d, e, t1
2 +, y, z, t2
3 *, t1, t1,t3

Code generator :
LDA d (isi d kedalam acumulator)
ADA e (isi accumulator dijumlahkan dengan e)
STO t1 (simpan accumulator ke t1)
LDA y
ADD z
STO t2
LDA t1
MUL t2
STO t3

Optimasi kode generator diatas :

LDA d
ADA e
STO t1
LDA y
ADD z
STO t2

Anda mungkin juga menyukai