technik kompilasi
DESCRIPTION
materi tehnik kompilasi iniTRANSCRIPT
![Page 1: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/1.jpg)
TEKNIKKOMPILASI
SUKRI ADRIANTO, M.Kom
![Page 2: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/2.jpg)
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
T U J U A N
![Page 3: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/3.jpg)
Practice and principles of Compiler building with C, Henk Alblas, Albert Nymeyer, Prentice Hall, 1996
Introduction to The theory of computation, Michael sipser, PWS publishing Company, 1997
The Essence of Compilers, Robin Hunter,Prentice Hal Europe, 1999
Modern Compiler Design, Dick Grune, Henri E. Bal, Et all, John Wiley & Son, 2000
DAFTAR PUSTAKA
![Page 4: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/4.jpg)
Pendahuluan: arti dari Kompilasi Translator: Compiler dan interpreter Bahasa Pemrograman Pembuatan Compiler Konsep bahasa dan Notasi Hirarki Comsky Aturan Produksi Diagram state Notasi BNF Diagram Syntax Kualitas Compiler
Bahasan Materi Kuliah
![Page 5: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/5.jpg)
Beberapa translator Struktur Compiler Lexical Analysis Analysis Syntax Analysis Semantics Error Handling Optimation Tabel informasi
Bahasan Materi Kuliah
![Page 6: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/6.jpg)
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.
ARTI KATA TEKNIK KOMPILASI
![Page 7: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/7.jpg)
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
Translator : Compiler & Interpreter
![Page 8: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/8.jpg)
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
![Page 9: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/9.jpg)
Ada Beberapa Translator1. Assembler
Source code adalah bahasa assembly, Object code
adalah bahasa mesin
2. Compiler
Source code adalah bahasa tingkat tinggi, object code
adalah bahasa mesin atau bahasa assembly. Source
code dan data diproses berbeda
*.asm*.asm AssemblerAssemblerObject code*.exe /*.comObject code*.exe /*.com
![Page 10: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/10.jpg)
3. Interpreter
Interpreter tidak menghasilkan bentuk object code, tetapi
hasil translasinya hanya dalam bentuk internal, dimana
program induk harus selalu ada-berbeda dengan compiler
Source codeSource codeTranslatorTranslator Hasil Hasil
DataData
Hasil Hasil Source code
Source code
ExecutionExecution
DataData
CompilerCompiler
Object CodeObject Code
![Page 11: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/11.jpg)
Translator : Compiler & Interpreter
OBJECTPROGRAM
SourceProgram
Compiler
ERRORMESSAGES
![Page 12: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/12.jpg)
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.
COMPILER vs INTERPRETER
![Page 13: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/13.jpg)
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.
COMPILER vs INTERPRETER
![Page 14: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/14.jpg)
1. analisa : program sumber dipecah-pecah dan dibentuk menjadi bentuk antara (inter-mediate representation)
2. sintesa : membangun program sasaran yang diinginkan dari bentuk antara
Proses kompilasi dikelompokkan ke dalam dua kelompok besar :
![Page 15: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/15.jpg)
Fase-fase proses sebuah kompilasi
![Page 16: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/16.jpg)
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 Leksikal
![Page 17: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/17.jpg)
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 Sintaks
![Page 18: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/18.jpg)
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
Penganalisa Semantik
![Page 19: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/19.jpg)
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)
Pembangkit Kode Antara
![Page 20: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/20.jpg)
melakukan optimasi (penghematan space dan waktu komputasi), jika mungkin, terhadap kode antara
Pengoptimal kode
![Page 21: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/21.jpg)
membangkitkan kode dalam bahasa target tertentu (misalnya bahasa mesin)
Pembangkit Kode Mesin
![Page 22: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/22.jpg)
Contoh Kompilasi
![Page 23: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/23.jpg)
View dari programmer
![Page 24: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/24.jpg)
Mesin View
![Page 25: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/25.jpg)
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
![Page 26: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/26.jpg)
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
Pembuatan compiler
![Page 27: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/27.jpg)
Pembuatan compilerBahasa 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
![Page 28: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/28.jpg)
BootStrap
Untuk membangun sesuatu yang besar, dibangun/dibuat dulu bagian intinya (niklaus Wirth - saat membuat pascal compiler)
Pembuatan compiler
![Page 29: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/29.jpg)
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
BootStrap
PoPo
P1
P2
![Page 30: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/30.jpg)
Contoh dari source program ke dalam kode mesin
Source code Assembly Language Machine language
IF COUNT =10 Compare A to B Compare 3477 2883 GOTO DONE If equal go to C If = go to 23883 ELSE Go to D Go to 23343 GOTO AGAIN ENDIF
Actual machine code
100101010010100010101001010101001010100100101010100101010001010010010
![Page 31: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/31.jpg)
BAHASA SUMBER
![Page 32: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/32.jpg)
Bahasa adalah kumpulan kalimat. Kalimat adalah rangkaian kata. Kata adalah unit terkecil komponen bahasa yang tidak bisa dipisah-pisahkan lagi.
Kalimat-kalimat : ‘Seekor kucing memakan seekor tikus.’ dan ‘Budi menendang sebuah bola.’ adalah dua contoh kalimat lengkap Bahasa Indonesia. ‘A cat eats a mouse’ dan ‘Budi kick a ball.’ adalah dua contoh kalimat lengkap Bahasa Inggeris. ‘if a2 < 9.0 then b2 := a2+a3;’ dan ‘for i := start to finish do A[i] := B[i]*sin(i*pi/16.0).’ adalah dua contoh kalimat lengkap dalam Bahasa Pemrograman Pascal.
Dalam bahasa pemrograman kalimat lebih dikenal sebagai ekspresi sedangkan kata sebagai token
DEFINISI “bahasa sumber”
![Page 33: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/33.jpg)
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 { .. } )
![Page 34: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/34.jpg)
Tingkatan Bahasa Pemrograman
![Page 35: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/35.jpg)
Konstruksi yang diturunkan dari bahasa alami, karena bahasa alami dapat digunakan sebagai panduan untuk perancangan sintaks
Matematika, misal untuk perancangan operasi aritmatika
Bahasa pemrograman yang sudah ada.
Sumber perancangan bahasa
![Page 36: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/36.jpg)
Komunikasi dengan manusia Pencegahan dan deteksi kesalahan Usability Efektifitas pemrograman Compilability (mengurangi
kompleksitas,mis:penggunaan bracket) Efisiensi dengan meminimalisir
ketidakcocokan antara hardware dengan bahasa
Tujuan perancangan bhs program
![Page 37: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/37.jpg)
Machine independent Simplicity :penyederhanaan
komponen bahasa program Orthogonality : kumpulan primitive
yang dikombinasikan dengan berbagai cara dalam membangun kontrol dan struktur data dalam bahasa program
Tujuan perancangan bhs program(2)
![Page 38: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/38.jpg)
Metode pengurutan evaluasi dalam ekspresi :Explicit BracketingOperator bindingBinding adalah asosiasi antara atribut dan entity atau antara operasi dan simbol.Binding time adalah waktu yang dialokasikan untuk menyatukan variable dengan nilainya.
Struktur Ekspresi
![Page 39: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/39.jpg)
Empat aspek dalam struktur data Deklarasi data Tipe data yang tersedia Alokasi storage Lingkup variabel
Struktur Data
![Page 40: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/40.jpg)
Format freelangsung ditampilkan sehingga mudah bagi user untuk memeriksa kebenaran program. Contoh pada VB.
Formattedoutput ditampilkan secara terformat, seperti di C : printf(), delphi/VB : format()
Struktur I/O
![Page 41: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/41.jpg)
ANDAIKAN......
Anda akan menciptakan sebuah bahasa program, coba sebutkan urutan proses yang harus ditentukan/skenario yang dijalani untuk menghasilkan bahasa pemrograman impian Anda tersebut !
![Page 42: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/42.jpg)
1. Tentukan apa yang diinginkan.2. Tentukan feature yang mungkin3. Tentukan desain dan sesuaikan dengan
featurenya4. Tentukan rincian, parsing, dan error checking.5. Tuliskan user manual dan help.6. Evaluasilah, jika salah mulai lagi dari langkah 3.7. Jika sudah benar, optimisasilah dan uji segala
kemungkinan.8. Cobakan kepada pengguna, tunggu reaksinya.9. Perbaiki bug dan mulai versi baru.
SKENARIO PERANCANGAN
![Page 43: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/43.jpg)
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/
Tools Bantu Compiler
![Page 44: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/44.jpg)
Made by :Terrence Parr<almost by
himself>
For 15 Years
ANTLR, ANother Tool for Language Recognition, is a language tool that provides a framework for constructing recognizers, interpreters, compilers, and translators from grammatical descriptions containing actions in a variety of target languages
15 TH ?
![Page 45: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/45.jpg)
IDE SISTEM PEMBELAJARAN CERDAS
What’s a Surprise?
Top Topic Skripsi withCompiler technique
![Page 46: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/46.jpg)
KONSEP dan NOTASI BAHASA
![Page 47: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/47.jpg)
Teknik Kompilasi merupakan kelanjutan dari konsep-konsep
yang telah kita pelajari dalam teori bahasa dan automata
Thn 56-59 Noam chomsky melakukan penggolongan
tingkatan dalam bahasa, yaitu menjadi 4 class
Penggolongan tingkatan itu disebut dengan hirarki Comsky
1959 Backus memperkenalkan notasi formal baru untuk
syntax bahasa yang lebih spesifik
Peter Nour (1960) merevisi metode dari syntax. Sekarang
dikenal dengan BNF (backus Nour Form)
Konsep dan Notasi bahasa
![Page 48: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/48.jpg)
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
Konsep dan Notasi bahasa
![Page 49: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/49.jpg)
Syntax : suatu aturan yang memberitahu
apakah sesuatu kalimat (string) adalah
valid dalam program atau tidak
Semantic : suatu aturan-aturan yang
memberikan arti kepada program
Konsep dan Notasi bahasa
![Page 50: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/50.jpg)
Review Mesin Automata Misal : FSA
Misal :Ada mesin penjual permen yang Memuat aturan2 sbb :Harga Permen Rp.25Mesin tsb dpt menerima koinRp.5 (n),Rp.10 (d)Rp.25 (q)$ = tombol utk mengeluarkan permen.
Kemungkinan2 yang Terjadi diperlihatkan gambar :
![Page 51: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/51.jpg)
Review Mesin Automata Misal : FSA
FSA State Diagram nya adalah :
![Page 52: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/52.jpg)
Contoh lain : FSA
![Page 53: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/53.jpg)
Penggolongan Chomsky Bahasa Mesin Automata Aturan Produksi
Konsep dan Notasi bahasa
Tipe 3 Atau Regular
Finite state automata (FSA) meliputi; deterministic Finite Automata (DFA) & Non Deterministic Finite Automata (NFA)
adalah simbol variabel maksimal memiliki sebuah simbol variabel yang bila ada terletak diposisi paling kanan
Tipe 2 Atau Contex Free
Push Down Automata adalah simbol variabel
Tipe 1 Atau Contex Sensitive
Linier Bounded Automata | | <= | |
Tipe 0 Atau Unrestricted/ Phase Structure/ natural language
Mesin Turing Tidak ada Batasan
![Page 54: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/54.jpg)
menyatakan simbol – simbol yang berada di ruas kiri aturan produksi
menyatakan simbol – simbol yang berada di ruas kanan aturan produksi
Simbol-simbol terdiri dari simbol terminal dan non terminal/variabel (masih bisa diturunkan lagi)
Simbol terminal biasanya dinyatakan dengan huruf kecil, sementara non terminal dengan huruf besar
Keterangan
![Page 55: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/55.jpg)
Tipe O / Unrestricted: Tidak Ada batasan pada aturan produksi Abc De
Tipe 1 / Context sensitive: Panjang string ruas kiri harus lebih kecil
atau sama dengan ruas kananAb DeFCD eF
Tipe 2 / Context free grammar: Ruas kiri haruslah tepat satu simbol
variableB CDeFgD BcDe
Tipe 3 / Regular: Ruas kanan hanya memiliki maksimal 1 simbol non
terminal dan diletakkan paling kanan sendiriA eA efgA efgHC D
Aturan Produksi
![Page 56: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/56.jpg)
Simbol E tidak boleh berada pada ruas kirimisal E Abd
Aturan produksi yang ruas kirinya hanya memuat simbol terminal saja misal : a bd atau ab bd
Aturan produksi yang tidak legal !!!
![Page 57: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/57.jpg)
Hirarki Comsky
RegularRegular
Context free
Context Sensitive
Unrestricted
![Page 58: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/58.jpg)
<program> BEGIN <Statement-list> END
<Statement-list> <statement> | <statement>; <statement-list>
<statement> <var> := <expression> <Expression> <term> | <term><op1> <expression> <term> <factor> | <factor> <op2> <term> <factor> <var> | <constant>
<var> A|B| ….| Z <op1> + | - | = <op2> ^ | * | / <constant> <real_number> | <integer_part>
<real_number> <integer_part> . <fraction> <integer_part> <digit> | <integer_part> < digit> <fraction> <digit> | <digit> <fraction> <digit> 0|1|….|9
Contoh Tata Bahasa Sederhana
![Page 59: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/59.jpg)
BeginA := 1;B := A + 2
END
Contoh
![Page 60: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/60.jpg)
Digunakan untuk mendapatkan token,
mempermudah melakukan analisis lexical
Token adalah simbol terminal dari teori
bahasa dan automata
Diagram State
![Page 61: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/61.jpg)
S
ID
INT
PLUS
MINUS
+
-
huruf
Digit
Huruf, Digit
DigitBlank
Contoh : suatu tata bahasa memiliki himpunan simbol terminal/token berikut (ID, PLUS, MINUS, dan INT)token ID untuk karakter huruf a-z, 0-9, token INT untuk digit, token PLUS untuk Penjumlahan dan token MINUS untuk Pengurangan
![Page 62: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/62.jpg)
Aturan Produksi bisa dinyatakan dengan notasi BNF
BNF menggunakan abstraksi untuk struktur syntax
::= sama identik dengan simbol
| sama dengan atau
< > pengapit simbol non terminal
{ } Pengulangan dari 0 sampai n kali
Misalkan aturan produksi sbb:
E T | T+E | T-E
T a
Notasi BNFnya adalah
E ::= <T> | <T> + <E> | <T> - <E>
T ::= a
Notasi BNF (Backus-Nour Form)
![Page 63: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/63.jpg)
Alat bantu (tools) dalam pembuatan parser/ analisis
sintaksis
Menggunakan simbol persegi panjang untuk non
terminal
Lingkaran untuk simbol terminal
Misalnya
E T | T+E | T-E
Diagram Syntax
T
+
-
E
![Page 64: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/64.jpg)
BNF: <Block> ::= BEGIN <statement> { SEMICOL <statement>}
END
BEGIN Statement END
;
![Page 65: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/65.jpg)
Kualitas dari Compiler Waktu yang dibutuhkan untuk kompilasi;
tergantung dari
Algoritma compiler
Pembuat (compilator) Compiler itu sendiri
Kualitas dari obyek program yang dihasilkan
Ukuran yang dihasilkan
Fasilitas-fasilitas Integrasi yang lainnya
IDE (integrated Development Environment)
![Page 66: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/66.jpg)
Struktur COMPILER
Source programSource program
Lexical Analysis(scanner)
Syntax Analysis
(parser)
Intermediatecode
Code Optimization
CodeGeneration
Object codeObject code
![Page 67: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/67.jpg)
Lexical Analyzer = scanner, Syntax Analyzer, dan Intermediate
Code merupakan fungsi Analisis dalam compiler, yang bertugas
mendekomposisi program sumber menjadi bagian-bagian kecil
Code generation dan Code optimization adalah merupakan fungsi
synthesis yang berfungsi melakukan pembangkitan / pembuatan
dan optimasi program (object program)
Scanner adalah mengelompok-an program asal/sumber menjadi
token
Parser (mengurai) bertugas memeriksa kebenaran dan urutan
dari token-token yang terbentuk oleh scanner
Keterangan
![Page 68: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/68.jpg)
Mengidentifikasikan semua besaran yang membuat suatu bahasa
Mentransformasikan ke token-token
Menentukan jenis dari token-token
Menangani kesalahan
Menangani tabel simbol
Scanner, didesign untuk mengenali - keyword, operator, identifier
Token : separates characters of the source language into group that
logically belong together
Misalnya : konstanta, nama variabel ataupun operator dan delimiter
(atau sering disebut menjadi besaran lexical)
Lexical Analysis (scanner) - berhubungan dengan bahasa
![Page 69: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/69.jpg)
Identifier dapat berupa keyword atau nama kunci, seperti IF..ELSE, BEGIN..END (pada Pascal), INTEGER (pascal), INT, FLOAT (Bhs C)
Konstanta : Besaran yang berupa bilangan bulat (integer), bilangan pecahan (float/Real), boolean (true/false), karakter, string dan sebagainya
Operator; Operator arithmatika ( + - * / ), operator logika ( < = > )
Delimiter; Berguna sebagai pemisah/pembatas, seperti kurung-buka, kurung -tutup, titik, koma, titik-dua, titik-koma, white-space
White Space: pemisah yang diabaikan oleh program, seperti enter, spasi, ganti baris, akhir file
Lexical Analysis ( Besaran leksikal )
![Page 70: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/70.jpg)
Lexical Analysis - Contoh Contoh 1:
ada urutan karakter yang disebut dengan statement
fahrenheit := 32 + celcius * 1.8,
Maka akan diterjemahkan kedalam token-token seperti dibawah ini
identifier fahrenheit
operator :=
integer 32
operator penjumlahan +
Identifier celcius
operator perkalian *
real / float 1.8
![Page 71: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/71.jpg)
Lexical Analysis - Contoh 2
Setiap bentuk dari token di representasi sebagai angka dalam
bentuk internal, dan angkanya adalah unik Misalnya nilai 1 untuk variabel, 2 untuk konstanta, 3 untuk label
dan 4 untuk operator, dst
Contoh instruksi : Kondisi : IF A > B THEN C = D;
Maka scanner akan mentransformasikan kedalam token-token,
sbb:
![Page 72: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/72.jpg)
Lexical Analysis - Contoh 2
Kondisi 3 : 26 IF 20 A 1 > 15
B 1 THEN 21 C 1 D 1 ; 27
Token-token ini sebagai inputan untuk syntax Analyser , token-token
ini bisa berbentuk pasangan item. Dimana Item pertama menunjukkan alamat
atau lokasi dari token pada tabel simbol. Item kedua adalah representasi
internal dari token. Semua token direpresentasikan dengan informasi yang
panjangnya tetap (konstan), suatu alamat (address atau pointer) dan sebuah
integer (bilangan bulat)
![Page 73: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/73.jpg)
Pengelompokan token-token kedalam class syntax (bentuk syntax), seperti procedure, Statement dan expression
Grammar : sekumpulan aturan-aturan, untuk mendefinisikan bahasa sumber
Grammar dipakai oleh syntax analyser untuk menentukan struktur dari program sumber
Proses pen-deteksian-nya (pengenalan token) disebut dengan parsing
Syntax Analyzer
![Page 74: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/74.jpg)
Maka Syntax analyser sering disebut dengan parser
Pohon sintaks yang dihasilkan digunakan untuk semantics analyser yang bertugas untuk menentukan ‘maksud’ dari program sumber.
Misalnya operator penjumlahan maka semantics analyser akan mengambil aksi apa yang harus dilakukan
Syntax Analyzer
![Page 75: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/75.jpg)
Contoh Terdapat statement : ( A + B ) * ( C + D )
Akan menghasilkan bentuk sintaksis:
<factor>, <term> & <expression>
![Page 76: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/76.jpg)
Syntax tree
Pohon sintaks/ Pohon penurunan
(syntax tree/ parse tree) beguna untuk
menggambarkan bagaimana
memperoleh suatu string dengan cara
menurunkan simbol-simbol variable
menjadi simbol-simbol terminal.
Misalnya: S ABA aA | aB bB | B
Penurunan untuk menhasilkan string
aabbb
![Page 77: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/77.jpg)
Parsing atau Proses PenurunanParsing dapat dilakukan dengan cara :
Penurunan terkiri (leftmost derivation) : simbol variable
yang paling kiri diturunkan (tuntas) dahulu
Penurunan terkanan (rightmost derivation): variable
yang paling kanan diturunkan (tuntas) dahulu
Misalkan terdapat ingin dihasilkan string aabbaa dari
context free language: S a AS | a,
A SbA | ba
![Page 78: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/78.jpg)
Penurunan kiri :
S => aAS
=> aSbAS
=> aabAS
=> aaabbaS
=> aabbaa
Parsing atau Proses Penurunan
Penurunan kanan :
S => aAS
=> aAa
=> aSbAa
=> aSbbaa
=> aabbaa
![Page 79: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/79.jpg)
Parsing
Misalnya: S -> aB | bAA -> a | aS |bAAB -> b | bS | aBB
Penurunan untuk string aaabbabbaDalam hal ini perlu untuk melakukan
percobaan pemilihan aturan produksi yang bisa mendapatkan solusi
![Page 80: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/80.jpg)
Perlu memperhatikan 3 hal:Waktu EksekusiPenanganan KesalahanPenanganan Kode
Parsing digolongkan menjadi:
Top-DownPenelusuran dari root ke leaf atau dari simbol awal ke simbol terminalmetode ini meliputi: Backtrack/backup : Brute Force No backtrack : Recursive Descent Parser
Bottom-Up
Metode ini melakukan penelusuran dari leaf ke root
Metode Parsing
![Page 81: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/81.jpg)
Memilih aturan produksi mulai dari kiri
Meng-expand simbol non terminal sampai pada simbol terminal
Bila terjadi kesalahan (string tidak sesuai) maka dilakukan backtrack
Algoritma ini membuat pohon parsing secara top-down, yaitu dengan
cara mencoba segala kemungkinan untuk setiap simbol non-terminal
Contoh suatu language dengan aturan produksi sebagai berikut
S aAd | aB
A b | c
B ccd | ddc
Misal ingin dilakukan parsing untuk string ‘accd’
Parsing: Brute force
![Page 82: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/82.jpg)
Parsing: Brute force(i) S (ii) S (iii) S
a A d a A d
b
Terjadi kegagalan (iii), dilakukan back track
(iv) S (v) S (vi) S
a A d a B a B
c c c
d
Terjadi kegagalan lagi (iv), dilakukan back-track
![Page 83: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/83.jpg)
Kelemahan dari metode-metode brute-force
Mencoba untuk semua aturan produksi yang ada sehingga
menjadi lambat (waktu eksekusi)
Mengalami kesukaran untuk melakukan pembetulan kesalahan
Memakan banyak memakan memori, dikarenakan membuat
backup lokasi backtrack
Grammar yang memiliki Rekursif Kiri tidak bisa diperiksa,
sehingga harus diubah dulu sehingga tidak rekursif kiri, Karena
rekursif kiri akan mengalami Loop yang terus-menerus
Parsing: Brute force
![Page 84: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/84.jpg)
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
accept (diterima)
Brute force : Contoh
![Page 85: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/85.jpg)
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
Brute force : Contoh
![Page 86: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/86.jpg)
Brute force : Aturan produksi Aturan Produksi yang rekursif memiliki ruas kanan (hasil produksi) yang
memuat simbol variabel pada ruas kiri
Sebuah produksi dalam bentuk
A A merupakan produksi rekursif kanan
= berupa kumpulan simbol variabel dan
terminal
contoh: S d S
B ad B
bentuk produksi yang rekursif kiri
A A merupakan produksi rekursif Kiri
contoh:
S S d
B B ad
![Page 87: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/87.jpg)
Aturan produksi : Brute force
Produksi yang rekursif kanan akan menyebabkan penurunan tumbuh kekanan, Sedangkan produksi yang rekursif kiri akan menyebabkan penurunan tumbuh ke kiri.
Contoh: Context free Grammar dengan aturan produksi sebagai berikut:
![Page 88: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/88.jpg)
Dalam Banyak penerapan tata-bahasa, rekursif kiri tidak
diinginkan, Untuk menghindari penurunan kiri yang looping, perlu
dihilangkan sifat rekursif, dengan langkah-langkah sebagai berikut:
Pisahkan Aturan produksi yang rekursif kiri dan yang tidak;
misalnya
Aturan produksi yang rekursif kiri
A A 1 | A 2 | ... | A n
Aturan produksi yang tidak rekursif kiri
A 1 | 2 | ... | n
Aturan produksi : Brute force
![Page 89: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/89.jpg)
lakukan per-ganti-an aturan produksi yang rekursif kiri,
sebagai berikut:
1. A 1 Z | 2 Z | ... | n Z
2 Z 1 | 2 | ... | n
3 Z 1 Z | 2 Z | ... | n Z
Aturan produksi : Brute force
![Page 90: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/90.jpg)
Aturan produksi : Brute force
Pergantian dilakukan untuk setiap aturan produksi dengan simbol ruas kiri
yang sama, bisa muncul variabel Z1, Z2 dst, sesuai dengan variabel yang
menghasilkan rekurisif kiri
Contoh: Tata Bahasa Context free
S Sab | aSc | dd | ff | Sbd
Pisahkan aturan produksi yang rekursif kiri
S Sab | Sbd
Ruas Kiri untuk S: 1=ab , 2=bd
Aturan Produksi yang tidak rekursif kiri
S aSc | dd | ff
dari situ didapat untuk Ruas Kiri untuk S: 1 = aSc, 2 = dd, 3= ff
![Page 91: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/91.jpg)
Aturan produksi : Brute force
Langkah berikutnya adalah penggantian yang rekursif kiri
S Sab | Sbd, dapat digantikan dengan
1. S aScZ1 | ddZ1 | ffZ1
2. Z1 ab | bd
3. Z1 abZ1 | bdZ1
Hasil akhir yang didapat setelah menghilangkan rekursif kiri adalah
sebagai Berikut:
S aSc | dd | ff
S aScZ1 | ddZ1 | ffZ1
Z1 ab | bd
Z1 abZ1 | bdZ1
![Page 92: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/92.jpg)
Kalau pun tidak mungkin menghilangkan rekursif kiri dalam penyusunan
aturan produksi maka produksi rekursif kiri diletakkan pada bagian belakang
atau terkanan, hal ini untuk menghindari looping pada awal proses parsing
Metode ini jarang digunakan, karena semua kemungkinan harus ditelusuri,
sehingga butuh waktu yang cukup lama serta memerlukan memori yang
besar untuk penyimpanan stack (backup lokasi backtrack)
Metode ini digunakan untuk aturan produksi yang memiliki alternatif yang
sedikit
Aturan produksi : Brute force
![Page 93: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/93.jpg)
Parsing dengan Recursive Descent Parser
Salah satu cara untuk meng-aplikasikan bahasa context free
Simbol terminal maupun simbol variabelnya sudah bukan sebuah karakter
Besaran leksikal sebagai simbol terminalnya, besaran syntax sebagai simbol
variablenya /non terminalnya
Dengan cara penurunan secara recursif untuk semua variabel dari awal sampai
ketemu terminal
Tidak pernah mengambil token secara mumdur (back tracking)
Beda dengan turing yang selalu maju dan mundur dalam melakukan parsing
Parsing: Recursive Descent Parser
![Page 94: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/94.jpg)
Semua simbol variabel dijadikan prosedur/fungsi Jika ketemu simbol terminal pada aturan produksi ,
maka panggil prosedurnya Penelusuran bersifat top down mengikuti sintaks
sesuai pola pada diagram sintaks Fungsi/prosedur ditulis untuk setiap non terminal
dari suatu produksi. Setiap fungsi/prosedur akan melemparkan nilai benar atau salah bergantung pada apakah fungsi tersebut mengenali substring yang diterima sebagai ekspansi dari non terminal.
Aturan Produksi memakai Recursif Descent :
![Page 95: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/95.jpg)
Grammar dengan BNF :<program> ::= t_PROG t_ID t_SEMICOL <block> t_DOT<block> ::= t_BEGIN <statement> {t_SEMICOL
<statement>} t_END<statement> ::= t_ID t_ASS <simple exp> | t_IF <exp> t_THEN <statement>| t_IF <exp> t_THEN <statement> t_ELSE
<statement><exp> ::= <simple_exp> t_EQ <simple exp> | <simple_exp> t_LT <simple_exp>| <simple_exp> t_GT <simple_exp>Dst…….
Contoh :
![Page 96: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/96.jpg)
Penggalan program untuk grammar tsb
![Page 97: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/97.jpg)
![Page 98: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/98.jpg)
Proses ini merupakan proses kelanjutan dari proses
kompilasi sebelumnya, yaitu analisa leksikal (scanning)
dan analisa sintaks (parsing)
Bagian terakhir dari tahapan analisis adalah analisis
semantik
Memanfaatkan pohon sintaks yang dihasilkan dari
parsing
Proses analisa sintak dan analisa semantik merupakan
dua proses yang sangat erat kaitannya, dan sulit untuk
dipisahkan
Semantics Analyser
![Page 99: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/99.jpg)
Contoh : A := ( A+B) * (C+D)
Parser hanya akan mengenali simbol-simbol
‘:=‘, ‘+’, dan ‘*’, parser tidak mengetahui
makna dari simbol-simbol tersebut
Untuk mengenali makna dari simbol-simbol
tersebut, Compiler memanggil routin semantics
Semantics Analyser
![Page 100: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/100.jpg)
Untuk mengetahui makna, maka routin ini akan
memeriksa:
Apakah variabel yang ada telah didefinisikan
sebelumnya
Apakah variabel-variabel tersebut tipenya sama
Apakah operand yang akan dioperasikan tersebut ada
nilainya, dan seterusnya
Menggunakan tabel simbol
Pemeriksaan bisa dilakukan pada tabel identifier, tabel
display, dan tabel block
Semantics Analyser
![Page 101: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/101.jpg)
Pengecekan yang dilakukan dapat berupa:
Memeriksa penggunaan nama-nama (keberlakuannya)
Duplikasi
Apakah sebuah nama terjadi pendefinisian lebih dari dua kali. Pengecekan dilakukan
pada bagian pengelolaan block
Terdefinisi
Apakah nama yang dipakai pada program sudah terdefinisi atau belum. Pengecekan
dilakukan pada semua tempat kecuali block
Memeriksa tipe
Melakukan pemeriksaan terhadap kesesuaian tipe dalam statement -
statement yang ada, Misalnya bila terdapat suatu operasi, diperiksa tipe
operand nya
Semantics Analyser
![Page 102: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/102.jpg)
Contohnya;
expresi yang mengikut IF berarti tipenya boolean, akan diperiksa
tipe identifier dan tipe ekspresinya
Bila ada operasi antara dua operand maka tipe operand pertama
harus bisa dioperasikan dengan operand yang kedua
Analisa Semantic sering juga digabungkan dengan intermediate
code yang akan menghasilkan output intermediate code.
Intermediate code ini nantinya akan digunakan pada proses
kompilasi berikutnya (pada bagian back end compilation)
Semantics Analyser
![Page 103: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/103.jpg)
Memperkecil usaha dalam membuat compilator dari sejumlah
bahasa ke sejumlah mesin
Lebih Machine Independent, hasil dari intermediate code dapat
digunakan lagi pada mesin lainnya
Proses Optimasi lebih mudah. Lebih mudah dilakukan pada
intermediate code dari pada program sumber (source program) atau
pada kode assembly dan kode mesin
Intermediate code ini lebih mudah dipahami dari pada kode
assembly atau kode mesin
Kerugiannya adalah melakukan 2 kali transisi, maka dibutuhkan
waktu yang relatif lama
Intermediate Code
![Page 104: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/104.jpg)
Ada dua macam intermediate code yaitu Notasi Postfix dan N-Tuple
Notasi POSTFIX
<Operand> <Operand> < Operator>
Misalnya :
( a +b ) * ( c+d )
maka Notasi postfixnya
ab+ cd+ *
Semua instruksi kontrol program yang ada diubah menjadi notasi postfix,
misalnya
IF <expr> THEN <stmt1> ELSE <stmt2>
Intermediate Code
![Page 105: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/105.jpg)
Diubah ke postfix menjadi ;
<expr> <label1> BZ <stmt1> <label2> BR
< stmt2>
BZ : Branch if zero (salah)BR: melompat tanpa harus ada kondisi yang
ditest
Contoh : IF a > b THEN c := d ELSE c := e
POSTFIX
![Page 106: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/106.jpg)
Contoh : IF a > b THEN c := d ELSE c := e
Dalam bentuk Postfix11 a 19
12 b 20 25
13 > 21 BR
14 22 22 c
15 BZ 23 e
16 c 24 :=
17 d 25
18 :=
bila expresi (a>b) salah, maa loncat ke instruksi 22, Bila expresi (a>b) benar tidak ada loncatan, instruksi berlanjut ke 16-18 lalu loncat ke 25
POSTFIX
![Page 107: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/107.jpg)
Contoh:
WHILE <expr> DO <stmt>
Diubah ke postfix menjadi ; <expr> <label1> BZ <stmt> <label2> BR
Instruksi : a:= 1WHILE a < 5 DO a := a + 1
Dalam bentuk Postfix
10 a 18 a
11 1 19 a
12 := 20 1
13 a 21 +
14 5 22 :=
15 < 23 13
16 25 24 BR
17 BZ 25
POSTFIX
![Page 108: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/108.jpg)
Notasi pada triple dengan format
<operator> <operand> <operand>
Contoh:
A := D * C + B / E
Jika dibuat intermidiate code triple:
1. * , D, C
2. /, B, E
3. +, (1), (2)
4. :=, A, (3)
Perlu diperhatikan presedensi (hirarki) dari operator, operator perkalian dan pembagian mendapatkan prioritas lebih dahulu dari oada penjumlahan dan pengurangan
TRIPLES NOTATION
![Page 109: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/109.jpg)
Contoh lain:
IF X > Y THEN
X := a - b
ELSE
X := a + b
Intermidiate code triple:
1. >, X, Y
2. BZ, (1), (6) bila kondisi 1 loncat ke lokasi 6
3. -, a, b
4. :=, X, (3)
5. BR, , (8)
6. +, a, b
7. :=, X, (6)
TRIPLES NOTATION
![Page 110: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/110.jpg)
Kelemahan dari notasi triple adalah sulit pada saat melakukan
optimasi, maka dikembangkan Indirect triples yang memiliki
dua list; list instruksi dan list eksekusi. List Instruksi berisikan
notasi triple, sedangkan list eksekusi mengatur eksekusinya;
contoh
A := B + C * D / E
F := C * D
List Instruksi List Eksekusi
1. *, C, D 1. 1
2. /, (1), E 2. 2
3. +, B, (2) 3. 3
4. :=, A , (3) 4. 4
5. :=, F, (1) 5. 1
6. 5
TRIPLES NOTATION
![Page 111: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/111.jpg)
Format dari quardruples adalah
<operator> <operand> <operand> <result>
Result atau hasil adalah temporary variable yang dapat ditempatkan pada
memory atau register . Problemnya adalah bagaimana mengelola temporary
variable seminimal mungkin
Contoh:
A := D * C + B / E
Jika dibuat intermidiate codenya :
1. * , D, C, T1
2. / , B, E, T2
3. +, T1, T2, A
Quardruples Notation
![Page 112: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/112.jpg)
Hasil dari tahapan anlisis diterima oleh code
generator (pembangkit kode)
Intermediate code ditansfromasikan
kedalam bahasa assembly atau mesin
Misalnya
(A+B)*(C+D) dan diterjemahkan
kedalam bentuk quadruple:1. +, A, B, T12. + , C, D, T23. *, T1, T2, T3
Dapat ditranslasikan kedalam bahasa
assembly dengan accumulator tunggal:
Quardruples Notation
![Page 113: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/113.jpg)
LDA A ( isi A ke dalam accumulator)ADD B (isi accumulator dijumlahan dengan B)STO T1 ( Simpan isi Accumulator ke T1)LDA CADD D
STO T2LDA T1MUL T2STO T3
hasil dari code generator akan diterima oleh code optimation , Misalnya untuk kode assembly diatas dioptimasikan menjadi:
LDA A
ADD B
STO T1
LDA C
ADD D
MUL T1
STO T2
Code Generator
![Page 114: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/114.jpg)
Perjalanan sebuah intruksi
Source Program X = Y + X Analisis
Leksikal
Analisis
Sintaksis
Code Generator
dan Analisis
sematiks
Tabel
Simbol
Token-token Id1:=Id2+Id1
LDA AADD YSTO X
<assign>
Id1 := <Expr>
Id2 + Id1
![Page 115: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/115.jpg)
Error Handling
Kesalahan Program
Penanganan Kesalahan
Reaksi Compiler Pada kesalahan
Error Recovery
Error repair
![Page 116: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/116.jpg)
Kesalahan Program
Kesalahan Program dapat
berupaKesalahan leksikal
Kesalahan Sintaks
Kesalahan Semantics
![Page 117: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/117.jpg)
Kesalahan Program dapat berupaKesalahan leksikal
Kesalahan dalam mengetik/mengeja
Misal THEN dituliskan dengan TEN atau THN
Kesalahan Sintaks misalnya dalam operasi aritmatika dengan tanda kurung yang
jumlahnya kurang, contoh
A:= X + (B * (C+D)
Kesalahan Semantics
Error Handling - Kesalahan Program
![Page 118: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/118.jpg)
Kesalahan Semantics
Tipe data yang salah
Contoh : int c;
c = 1.5 * 0.78
Variable belum didefinisikan
Misal : B := B + 1
tetapi b belum didefinisikan
Error Handling - Kesalahan Program
![Page 119: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/119.jpg)
Error Handling - Penanganan Kesalahan
Langkah-langkah:Mendeteksi kesalahan
Melaporkan kesalahan
Tindak lanjut perbaikan
![Page 120: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/120.jpg)
Misal: compiler menemukan kesalahan, yang bisa
meliputi Kode kesalahan
Pesan Kesalahan dalam bahasa alami
Nama dan atribut identifier
contoh : error 162 Jumlah: Unknow identifier
Dapat diartikan: Kode kesalahan =162, pesan kesalahan =
unknown identifier, nama identifier = jumlah
Error Handling - Penanganan Kesalahan
![Page 121: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/121.jpg)
Ada Beberapa reaksi yang dilakukan oleh compiler
Reaksi-reaksi yang tidak dapat diterima
Reaksi yang benar, tapi kurang dapat diterima dan
kurang bermanfaat
Error Handling - Reaksi terhadap Kesalahan
![Page 122: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/122.jpg)
Ada Beberapa reaksi yang dilakukan oleh compiler
Reaksi-reaksi yang tidak dapat diterima
Compilator crash: Berhenti atau hang
Looping : compilator tidak bisa berhenti (infinite/onbounded loop)
Menghasilkan Obyek program yang salah : berbahaya, bisa
diketahui/muncul setelah program dieksekusi
Error Handling - Reaksi terhadap Kesalahan
![Page 123: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/123.jpg)
Ada Beberapa reaksi yang dilakukan oleh compiler
Reaksi yang benar, tapi kurang dapat diterima dan
kurang bermanfaat
Compilator menemukan kesalahan pertama, melaporkannya, lalu
berhenti (halt)
Pemrogram membuang waktu untuk melakukan pengulangan
compilasi untuk setiap kali terdapat sebuah error
Error Handling - Reaksi terhadap Kesalahan
![Page 124: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/124.jpg)
Reaksi-reaksi yang dapat diterima
Reaksi yang sudah dapat dilakukan ; Compilator melaporkan Error
Recovery : Pemulihan
Repair : Perbaikan
Reaksi yang belum dapat dilakukan
Compiler mengkoreksi kesalahan
Menghasilkan obyek program sesuai yang diinginkan pemrogram
Compiler memiliki kemampuan untuk ‘mengetahui’ maksud dari
pemrogram
Belum diimplementasikan pada program (sekarang ini)
Error Handling - Reaksi terhadap Kesalahan
![Page 125: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/125.jpg)
Bertujuan mengembalikan parser ke kondisi stabil agar
supaya dapat melanjutkan proses parsing ke posisi
selanjutnya.
Mekanisme Ad Hoc
Recovery yang dilakukan tergantung dari si pembuat compiler
Tidak terikat pada suatu aturan tertentu
Disebut juga dengan istilah purpose error recovery
Syntax directed Recovery
misal begin
A := A + 1 ;
B := B + 1;
C := C + 1
end ;
Error Handling - Error Recovery
![Page 126: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/126.jpg)
Pada contoh diatas, compiler akan mengenali sebagai (dalam Notasi BNF)
begin <statement> ? , statement> ; <statement> end;
? Akan diperlakukan sebagai ‘;’
Second Error Recovery : untuk melokalisir kesalahanPanic Mode
Maju terus sampai ketemu delimiter Contoh : IF A = 1 Kondisi := true; Pada kondisi diatas THEN tidak ada, compiler melanjutkan sampai ketemu
delimiter (;)
Unit Deletion Menghapus keseluruhan suatu unit sintaksik (misalnya : <block>, <exp>,
<statement> dan sebagainya Mempermudah untuk melakukan error repairing
Error Handling - Error Recovery
![Page 127: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/127.jpg)
Context Sensitive Recovery
Berkaitan dengan semantics
contoh : B := ‘Budi Luhur’
Pada awal program variabel B belum dideklarasikan,
maka berdasarkan permunculannya maka diasumsikan
variabel B bertipe string
Error Handling - Error Recovery
![Page 128: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/128.jpg)
Error Handling - Error repair
Memperbaiki kesalahan dan membuat source
program valid (memodifikasi)
Mekanisme Ad Hoc
Tergantung pada sipembuat compiler
Syntax directed Repair
Menyisipkan / membuang simbol terminal yang
dianggap hilang atau yang menyebabkan error
contoh WHILE A < 1
I := I = 1;
compiler akan menyisipkan DO
![Page 129: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/129.jpg)
Error Handling - Error repair
Contoh lain Procedure Increment ;
begin
x := X + 1
end;
end;
Kelebihan simbol end, yang menyebabkan
kesalahan, maka compiler akan
membuangnya
![Page 130: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/130.jpg)
Context Sensitive Repair
Tipe identifier: membuat identifier dummyvar A : Stringbegin
A := 0;end
maka compilator akan memperbaiki kesalahan dengan membuat identifier
baru , misalnya B bertipe integer
Spelling Repair: memperbaiki kesalahan pengetikan pada identifier,
misalnya:
WHILLE A = 1 DO
identifier yang salah tersebut diperbaiki menjadi WHILE
Error Handling - Error repair
![Page 131: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/131.jpg)
Teknik Optimasi
Dependensi Optimasi
Optimasi Lokal
Optimasi Global
Dependensi Optimasibertujuan untuk menghasilkan kode program yang berukuran lebih kecil dan lebih
cepat
Machine Dependent Optimizer
Machine Independent Optimizer (Optimasi lokal dan Optimasi global)
![Page 132: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/132.jpg)
Optimasi Lokal : adalah optimasi yang dilakukan hanya pada
suatu blok dari source code, dengan cara:
Folding
menganti konstata atau ekpresi yang bisa dievaluasi pada saat
compile time dengan nilai komputasinya. Misalnya:
A := 2 + 3 + B bisa diganti dengan A:= 5 + B
5 dapat mengantikan ekspresi 2 + 3
Redundant-Subexpression Elimination
hasilnya digunakan lagi dari pada dilakukan computasi ulang, contoh:A:= B + CX := Y + B + C
Teknik Optimasi : Optimasi Lokal
![Page 133: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/133.jpg)
Teknik Optimasi : Optimasi Lokal
Optimasi dalam sebuah Iterasi
Loop Unrrolling:Menganti suatu loop dengan menulis
statement yang ada dalam loop ditulis beberapa kali
Karena sebuah iterasi pada implemnetasi ke level
rendah, memerlukan : Inisialisasi nilai awal, pada loop dilakukan sekali pada saat
permulaan eksekusi loop
Penge-test-an, 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)
![Page 134: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/134.jpg)
Contoh :FOR I := 1 to 2 DO
A[I] := 0;
dapat dioptimasikan menjadi A[1] := 0;A[2] := 0;
Frequency Reduction: Pemindahan statement ke tempat yang lebih
jarang dieksekusi, contoh
FOR I:= 1 to 10 DO X := 5BEGIN FOR I:= 1 to 10 DO X := 5 BEGIN A := A + 1 A := A + 1 END: END:
Teknik Optimasi : Optimasi Lokal
![Page 135: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/135.jpg)
Strength Reduction
◦ Penggantian suatu operasi dengan operasi lain yang lebih cepat
dieksekusi
◦ misalnya: pada komputer operasi perkalian memerlukan waktu
eksekusi lebih banyak dari pada operasi penjumlahan
◦ contoh lain
A:= A + 1
◦ dapat digantikan dengan
INC(A)
Teknik Optimasi : Optimasi Lokal
![Page 136: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/136.jpg)
Teknik Optimasi : Optimasi GLobalOptimasi global biasanya dilakukan dengan suatu
graph terarah yang menunjukkan jalur yang mungkin
selama eksekusi program
ada dua kegunaan yaitu bagi programmer dan
compiler itu sendiri
Bagi Programmer
◦ Unreachable/dead code: Kode yang tidak pernah
dieksekusi
◦ misalnya :X := 5;
IF X = 0 THEN A := A + 1
Instruksi A := A + 1 tidak pernah dikerjakan
![Page 137: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/137.jpg)
◦ Unused parameter : parameter yang tidak pernah digunakan dalam procedure Misalnya :
procedure penjumlahan(a,b,c ; Integer);var x : integer;begin x := a + b;end
Parameter c tidak pernah digunakan sehingga tidak perlu diikut sertakan
Teknik Optimasi : Optimasi GLobal
![Page 138: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/138.jpg)
Unsused Variabel : variabel yang yang tidak pernah dipergunakan
Program pendek;var a, b: integerbegin
a := 5;end;
B tidak pernah digunakan
Teknik Optimasi : Optimasi GLobal
![Page 139: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/139.jpg)
Variabel : variabel yang dipakai tanpa nilai awal. ContohProgram Awal;var a, b: integerbegin
a := 5 a := a + b;end;
variabel b digunakan tetapi tidak memiliki harga awal
Bagi Compiler◦ Meningkatkan efisiensi eksekusi program◦ Menghilangkan useless code/kode yang tidak terpakai
Teknik Optimasi : Optimasi GLobal
![Page 140: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/140.jpg)
var A, B, C, D, E, I, J, X, Y : integer;begin
B := 5; A := 10 - B / 4 * 3 + 2; C := A + B; Y := 10; D := A + B – E;
for I := 1 to 85 dobegin
X := X + 1;B := B – X;Y := 7;
endWhile Y< 5 do
E := E – B;end
![Page 141: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/141.jpg)
Dua fungsi penting Tabel Informasi
Untuk membantu pemeriksaan kebenaran
semantik dari program sumber
Untuk membantu dan mempermudah dalam
pembuatan intermediate code dan proses
pembuatan kode-kode (pembangkitan kode)
Tabel Informasi
![Page 142: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/142.jpg)
Secara umum, sebuah tabel simbol bisa
memiliki elemen-elemen tabel sebagai
berikut, meskipun tidak semuanya
dipergunakan oleh semua compilerNo.urut identifier: menentukan nomor urut pada
tabel simbol
Nama identifier
Tabel Informasi
![Page 143: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/143.jpg)
Tabel Informasi - Kegunaan
Tipe identifier
Object time address
Dimensi dari identifier yang
bersangkutan
Nomor baris variabel yang
dideklarasikan
Nomor baris variabel yang
direferensikan
Field link
![Page 144: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/144.jpg)
Ada beberapa jenis Tabel Informasi
Tabel identifier; berfungsi menampung semua identifier yang
terdapat dalam program
Tabel Array: berfungsi menampung informasi tambahan untuk
sebuah array
Tabel blok: mencatat varibel-variabel yang ada pada blok yang
sama
Tabel Real: Menyimpan elemen tabel bernilai real
Tabel string: menyimpan informasi string
Tabel display: mencatat blok yang aktif
Tabel Informasi - Implementasi
![Page 145: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/145.jpg)
Tabel Identifier memiliki;No Urut identifier dalam tabel
Nama Identifier
Jenis dari identifier; seperti Prosedur, fungsi, tipe variabel dan
konstanta
Tipe dari identifier yang bersangkutan; seperti Integer (bilangan
bulat), Char, boolean , array, record, file
level dari identifier (depth of block); hal ini menyangkut letak identifier
dalam program, konsepnya sama dengan pembentukan tree, misalnya
main program level 0
Tabel Informasi - Identifier
![Page 146: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/146.jpg)
Untuk identifier, pencatatan dapat berupa seperti;
Alamat relatif/address dari identifier untuk implementasi
Informasi referensi dari identifier terntentu ke alamat tabel
identifier yang lainnya
link; menghubung antar identifier
Normal: digunakan pada pemanggilan parameter, untuk
membedakan parameter by value dan by reference
Contoh (dalam pascal)
Tabel Informasi - Identifier
![Page 147: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/147.jpg)
Program A;
Var B : Integer;
Procedure X (Z: char)
var C : Integer
begin
....dst
Tabel identifier akan mencatat semua identifier;
0 A
1 B
2 X
3 Z
4 C
Tabel Informasi - Identifier
![Page 148: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/148.jpg)
TabId: Array [0..tabmax] of record
nama : String;
link : integer;
Obj : object;
Tipe : Types;
ref : Integer;
normal : Boolean;
Level : 0.. Maxlevel;
address : Integer;
End
Dimana
objek =(konstant, variabel, prosedur, fungsi)
Types = (notipe, int, reals, booleans, chars, arrays, record
Tabel Informasi - contoh
![Page 149: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/149.jpg)
Tabel Array
dipergunakan untuk menyimpan informasi suatu identifier yang
bertipe array, tabel ini memilik field:
No. Urut suatu array dalam tabel
Tipe dari indeks array yang bersangkutan
Tipe element array
Referensi dari elemen array
Index batas atas dan bawah array
Jumlah elemen array
Ukuran total array (total = atas - bawah + 1) x elemen size
Elemen size
Tabel Informasi - Array
![Page 150: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/150.jpg)
Tabel BlokDipergunakan untuk menyimpan informasi
blok-blok yang ada pada tabel utama.
Berisikan field
no urut blok
batas awal blok
batas akhir blok
ukuran parameter/parameter size
ukuran variabel/ variabel size
last variabel
last parameter
Tabel Informasi - Block
![Page 151: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/151.jpg)
Tabel Informasi - BlockContoh
Program A
Var B : Integer;
Procedure X (Z:char);
Var C : Integer;
begin
....
Untuk Blok A Blok B
last variable = 2 4
Variable size = 2 (dianggap int 2 byte) 2
Last parameter = 0 (tanpa parameter) 3
parameter size = 0 1 (char butuh
1
byte)
![Page 152: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/152.jpg)
Tabel Real
Dipergunakan untuk menyimpan nilai dari suatu identifier yang
bertipe real (pecahan). Elemen-elemen dari tabel ini adalah
sebagai berikut;
NO urut elemen
Nilai real suatu variabel real yang mengacu ke indeks tabel ini
Pemikirannya disini setiap tipe yang memiliki oleh suatu bahasa
akan memiliki tabelnya sendiri
Tabel Informasi - Implementasi
![Page 153: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/153.jpg)
Tabel String
Dipergunakan untuk menyimpan informasi string yang terdapat
pada program sumber. Elemen-elemen yang terdapat dalam
tabel ini adalah:
◦ no Urut elemen
◦ Karakter-karakter yang merupakan konstanta
Tabel Informasi - Implementasi
![Page 154: technik kompilasi](https://reader033.vdocuments.mx/reader033/viewer/2022061206/5482b109b4af9f780d8b4894/html5/thumbnails/154.jpg)
Tabel Display
menyimpan informasi-informasi mengenai blok-blok yang lagi
aktif. Elemen-elemen yang terdapat dalam tabel ini adalah:
◦ No Urut tabel
◦ Blok yang aktif
Pengisian tabel display dilakukan dengan konsep stack
Tabel Informasi - Implementasi