13.07.2015 Views

[ TEKNIK KOMPILASI ] - Universitas Budi Luhur - Lecture

[ TEKNIK KOMPILASI ] - Universitas Budi Luhur - Lecture

[ TEKNIK KOMPILASI ] - Universitas Budi Luhur - Lecture

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

[ <strong>TEKNIK</strong> <strong>KOMPILASI</strong> ][ Hari Soetanto ]DIKTAT KULIAH<strong>Universitas</strong> <strong>Budi</strong> <strong>Luhur</strong>Fakultas Teknologi InformasiRevisi Nop 20101 Hari Soetanto – Teknik Kompilasi – 2010


TUJUAN Mengetahui Penerapan konsep ilmu komputer pada perilaku komputeryaitu algoritma, arsitektur komputer, stuktur data maupun penerapanteori bahasa dan automata Compiler adalah merupakan konstruksi inti dari penerapan ilmu komputerDAFTAR PUSTAKA Practice and principles of Compiler building with C, Henk Alblas, Albert Nymeyer,Prentice Hall, 1996 Introduction to The theory of computation, ,Michael sipser, PWSpublishingCompany, 1997 The Essence of Compilers, Robin Hunter,Prentice Hal Europe, 1999 Modern Compiler Design, Dick Grune, Henri E. Bal, Et all, John Wiley &Son, 2000Materi yang akan dibahas• 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• Beberapa translator• Struktur Compiler• Lexical Analysis + contoh• Analysis Syntax + contoh• Analysis Semantics + contoh• Error Handling• Optimation• Tabel informasi2 Hari Soetanto – Teknik Kompilasi – 2010


ARTI KATA <strong>TEKNIK</strong> <strong>KOMPILASI</strong>Teknikadalah suatu Metode atau CaraKompilasiSuatu Proses mengabungkan serta menterjermahkan sesuatu (source program)menjadi bentuk lainCompile :language.To translate a program written in a high-level programming language into machineTranslator : Compiler & InterpreterTranslator :adalah suatu program dimana mengambil input sebuah program yangditulis pada satu bahasa program (source language) ke bahasa lain (The object on targetlanguage)Jika source language adalah high level language, seperti cobol, pascal,fortran dan object language adalah low-level language atau mesin language.Maka translator seperti ini disebut COMPILERProses perubahan dari source program menjadi object program melaluisuatu translator yaitu compiler atau interpreter, meskipun beda pada prosesmenterjemahkan tetapi fungsi dari interpreter dan compiler adalah samaDibawah ini ilustrasi sebuah peterjemah compiler menterjemahkan source codemejadi object file3 Hari Soetanto – Teknik Kompilasi – 2010


Gambar 1: proses penterjemahkanBagi user yang hanya pengguna mungkin kata-kata translator adalahmembingungkan, Kenapa perlu Translator? Pertanyaan ini akan / membingungkan bagi programmer yang membuatprogram dengan bahasa mesin.Latar Belakang Bahasa Mesin adalah bentuk bahasa terendah pada komputer, kita dapatberhubungan/komunikasi langsung dengan bagian-bagian yang ada didalamkomputer seperti bits, register & sangat primitive Bahasa mesin adalah tidak lebih dari urutan bit-bit 0 dan 1 Instruksi dalam bahasa mesin bisa saja dibentuk menjadi micro-code, semacamprosedur dalam bahasa mesinBagaimana dengan orang tidak mengerti bahasa mesin ?Bagi user yang tidak mengerti bahasa mesin akan mengalami masalah, Hal inidisebabkan karena mereka harus belajar duhulu bahasa mesin, dan akan4 Hari Soetanto – Teknik Kompilasi – 2010


ergantung pada jenis mesin komputer yang digunakan. Jika jenis komputermengalami perubahan maka dapat dipastikan bahwa user harus memperlajari lagi bahasamesin dengan jenis komputer yang baru5 Hari Soetanto – Teknik Kompilasi – 2010


Oleh karena itu manusia berusaha dan menciptakan suatu bahasa yang dapatdimengerti baik oleh manusia maupun oleh komputer, Bahasa yang demikian inisering disebut dengan bahasa tingkat tinggi.Untuk era sekarang user tidak lagi banyak dipusingkan mengenai penterjemahkarena kemudahan-kemudahan yang diberikan oleh bahasa tingkat tinggi sekarangsangatlah memudahkan dan lebih fleksibel dalam bekerja pada mesin-mesin komputeryang berbeda.Dibawah ini terdapat ilustrasi mengenai bit-bit yang dikenal oleh komputer dalammengerjakan sesuatuGambar 2 dibawah merupakan Ilustrasi dari data –data yang dikenal dan di proses olehkomputer6 Hari Soetanto – Teknik Kompilasi – 2010


Pemrograman menggunakan Bahasa tingkat tinggi, dan apa yang disebut denganbahasa tingkat tinggi: Bahasa yang lebih dikenal oleh manusia, maksudnya adalah statement yangdigunakan memakai istilah / bahasa yang dipakai oleh manusia; contoh bahasa inggris, Memberikan fasilitas yang lebih banyak, seperti struktur kontrol programyang terstruktur, memiliki blok-blok, serta prosedur dan fungsi-fungsi Struktur kontrol program dapat berupa seperti :o kondisi (if .. Then.. Else ),o perulangan (For, while ),o Struktur blok (begin.. End { .. } )Program mudah untuk di koreksi dan diperbaiki (debug)Tidak tergantung pada salah satu jenis mesin komputerBahasa pemrograman tingkat tinggi biasanya masih membutuhkan translatorOleh karena itu dari bahasa tingkat tinggi kedalam bahasa mesin makadibutuhkan sesuatu untuk menterjemahkan agar mesin (komputer) mengerti apa yanginginkan oleh manusia. Menerjemahkan statement bahasa tingkat tinggi ke dalam bahasatingkat rendah dapat dibedakan menjadi dua; melalui interpreter atau compileryang fungsinya adalah sama yaitu menterjemahkan.Ada Beberapa jenis Translator untuk menterjemahkan agar dikenali olehmesin, diantaranya7 Hari Soetanto – Teknik Kompilasi – 2010


1. AssemblerSource code adalah bahasa assembly, Object code adalah bahasa mesinGambar 3: Penterjemah assembler2. CompilerSource code adalah bahasa tingkat tinggi, object code adalah bahasamesin atau bahasa assembly. Source code dan data diproses berbedaGambar 4: Penterjemah Compiler3. InterpreterInterpreter tidak menghasilkan bentuk object code, tetapi hasiltranslasinya hanya dalam bentuk internal, dimana program induk harus selalu adaberbedadengan compilerGambar 5: Penterjemah Interpreter8 Hari Soetanto – Teknik Kompilasi – 2010


Pembuatan compilerKompiler yang bagus adalah yang dapat bekerja dengan baik pada mesin- mesincomputer dan tidak membutuhkan proses yang lamaAda beberapa cara dalam membuat suatu penterjemah dalam hal inimisalnya compiler, dan bahasa yang digunakan untuk membuat compiler punberagam misalnya ;Bahasa mesin Sangat sukar dan sangat sedikit kemungkinannya untuk membuat compilerdengan bahasa ini, karena manusia susah mempelajari bahasa mesin, Sangat tergantung pada mesin, Bahasa Mesin kemungkinan digunakan pada saat pembuatan AssamblerAssembly Hasil dari program mempunyai Ukuran yang relatif kecil Sulit dimengerti karena statement/perintahnya singkat-singkat, butuh usahayang besar untuk membuat compiler dengan bahasa ini Fasilitas yang dimiliki terbatasBahasa Tingkat Tinggi (high level language) Lebih mudah dipelajari Fasilitas yang dimiliki lebih baik (banyak) Memiliki ukuran yang relatif besar, misal membuat compiler pascal denganmenggunakan bahasa C Untuk mesin yang berbeda perlu dikembangkan tahapan-tahapan tambahan.Misal membuat compiler C pada Dos bedasarkan compiler C pada unixBootStrap Untuk membangun sesuatu yang besar, dibangun/dibuat dulu bagian intinya (niklausWirth - sangat membuat pascal compiler) PO dibuat dengan assembly, P1 dibuat dari P0, dan P2 dibuat dari P1,jadi compiler untuk bahasa P dapat dibuat tidak harus dengan menggunakanassembly secara keseluruhan9 Hari Soetanto – Teknik Kompilasi – 2010


Contoh dari source program ke dalam kode mesinSource code Assembly Language Machine languageIF COUNT =10 Compare A to B Compare 3477 288310 Hari Soetanto – Teknik Kompilasi – 2010


GOTO DONE If equal go to C If = go to 23883ELSE Go to D Go to 23343GOTOAGAIN ENDIFActual machine code100101010010100010101001010101001010100100101010100101010001010010010Konsep dan Notasi bahasaUntuk membuat penterjemah seperti compiler perlu dibuat standard atauaturan atau tata bahasa, seperti manusia berkomunikasi mempunyai tata bahasa agar lawanbicaranya dapat mengerti yang dibicarakan.Demikian juga untuk menerterjemahkan kedalam mesin (computer) harusdibuat suatu aturan agar computer dapat mengerti apa yang diinginkan olehmanusia melalui program yang dibuatnya; Teknik Kompilasi merupakan kelanjutan dari konsep-konsep yang telah kitapelajari dalam teori bahasa dan automata Tata bahasa (grammar) adalah sekumpulan dari himpunan variabel-variabel, simbolsimbolterminal, simbol non-terminal, simbol awal yang dibatasi olehaturan-aturan produksi Tahun 56-59 Noam chomsky melakukan penggolongan tingkatan dalambahasa, yaitu menjadi 4 class Penggolongan tingkatan itu disebut dengan hirarki Comsky 1959 Backus memperkenalkan notasi formal baru untuk syntax bahasayang lebih spesifik Peter Nour (1960) merevisi metode dari syntax. Sekarang dikenal denganBNF (backus Nour Form)11 Hari Soetanto – Teknik Kompilasi – 2010


Contoh Tata Bahasa Sederhana BEGIN END | ; := | | | A|B| ….| Z + | - | = ^ | * | / | . | < digit> | 0|1|….|9ContohBeginEndA := 1;B := A + 212 Hari Soetanto – Teknik Kompilasi – 2010


13 Hari Soetanto – Teknik Kompilasi – 2010


Tabel 1: Aturan Produksi14 Hari Soetanto – Teknik Kompilasi – 2010


15 Hari Soetanto – Teknik Kompilasi – 2010


Keterangan Gambar Tipe O / Unrestricted:Tidak Ada batasan pada aturan produksiAbc 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 kanansendiriA eA efgA efgHC DPenjelas pengenai aturan produksiAturan ProduksiAturan produksi digunakan agar penerapan pada pembuatan tata bahasadikomputer dapat lebih mudah dan menghasilkan suatu penterjemah yang dapatdiandalkan. Aturan produksi dinyatakan dalam bentuk , menghasilkan / menurunkan simbol-simbol untuk ruas kiri dan simbol-simbol untuk ruas kanan Simbol-simbol bisa berupa ternimal dan Non-terminal, dimana Non-terminalmasih bisa diturunkan menjadi simbol yang lainnya16 Hari Soetanto – Teknik Kompilasi – 2010


Umumnya simbol terminal disimbol-kan dengan huruf kecil (a,b,c dst), Sedangkanuntuk simbol non-terminal disimbolkan dengan huruf besar (A, B, C, dst) Contoh aturan produksi :T a , T menghasilkan aE T | T + E , E mengasilkan T, atauE menghasilkan T + EDiagram StateBagi pembuat penterjemah yaitu manusia harus sering menguji tata bahasayang dibuat, salah satu ilustrasi pengujian agar yang diinginkan sesuai denganyang diharapkan, maka digunakan suatu gambar yaitu yang dinamakan dengandiagram state Digunakan untuk mendapatkan token, mempermudah melakukan analisislexical Token adalah simbol terminal dari teori bahasa dan automata Contoh token ID untuk karakter huruf a-z, 0-9, token INT untuk digit,token PLUS untuk menjumlahan dan token MINUS untuk PenguranganDibawah ini contoh gambar diagram statePLUS+ShurufIDHuruf, DigitMINUS -BlankDigitINTDigit17 Hari Soetanto – Teknik Kompilasi – 2010


Struktur CompilerKeterangan Lexical Analyzer = scanner, Syntax Analyzer, dan Intermediate Code merupakan fungsiAnalisis dalam compiler, yang bertugas mendekomposisi program sumber menjadibagian-bagian kecil Code generation dan Code optimization adalah merupakan fungsi synthesisyang 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 tokentokenyang terbentuk oleh scanner20 Hari Soetanto – Teknik Kompilasi – 2010


Lexical Analysis (scanner)berhubungan dengan bahasa, Sering disebut dengan scanner, bertugas sebelum prosesCode dilakukan, dimana tugas lexical analisis ini mendekomposisi program sumbermenjadi bagian-bagian kecilTugas tugasnya secara detail adalah Mengidentifikasikan semua besaran yang membuat/membangun suatu bahasa Mentransformasikan ke token-token Menentukan jenis dari token-token Menangani kesalahan Menangani tabel simbol Scanner, didesign untuk mengenali - keyword, operator, identifiero Token : separates characters of the source language into group that logically belongtogether Misalnya : konstanta, nama variabel ataupun operator dan delimiter (atausering disebut menjadi besaran lexical)Contoh : besaran leksikal 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, gantibaris, akhir file21 Hari Soetanto – Teknik Kompilasi – 2010


Lexical Analysis - Contoh Contoh 1:ada urutan karakter yang disebut dengan statementfahrenheit := 32 + celcius * 1.8,Maka akan diterjemahkan kedalam token-token seperti dibawah iniidentifier fahrenheitoperator :=integer 32operator penjumlahan +Identifier celciusoperator perkalian *real / float 1.8 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 4untuk operator, dst Contoh instruksi :Kondisi : IF A > B THEN C = D; Maka scanner akan mentransformasikan kedalam token-token, sbb:‹ Kondisi 3‹ : 26‹ IF 20‹ A 1‹ > 1522 Hari Soetanto – Teknik Kompilasi – 2010


‹ B 1‹ THEN 21‹ C 1‹ D 1‹ ; 27Token-token ini sebagai inputan untuk syntax Analyser , token-token inibisa berbentuk pasangan item. Dimana Item pertama menunjukkan alamat atau lokasi daritoken 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 (bilanganbulat)Syntax AnalyzerBagian kedua dari compiler bertugas memeriksa kebenaran dan urutan dari token-token yangterbentuk oleh lexical analysis.Tugas dari syntax analyser adalah: Pengelompokan token-token kedalam class syntax (bentuk syntax), sepertiprocedure, 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 Maka Syntax analyser sering disebut dengan parser Pohon sintaks yang dihasilkan digunakan untuk semantics analyser yangbertugas untuk menentukan maksud‘ dari program sumber, misalnya operatorpenjumlahan maka semantics analyser akan mengambil aksi apa yang harusdilakukan Terdapat statement : ( A + B ) * ( C + D ) Akan menghasilkan bentuk sintaksis: , & 23 Hari Soetanto – Teknik Kompilasi – 2010


Expression> * ( )( ) + + D B CA24 Hari Soetanto – Teknik Kompilasi – 2010


Syntax tree• Pohon sintaks/ Pohon penurunan (syntax tree/ parse tree) beguna untuk menggambarkanbagaimana memperoleh suatu string dengan cara menurunkan simbol-simbol variablemenjadi simbol-simbol terminal. Misalnya:S ABA aA | aB bB | BSABa A b Ba b Bb Penurunan untuk menghasilkan string aabbbParsing atau Proses PenurunanParsing dapat dilakukan dengan cara : Penurunan terkiri (leftmost derivation): simbol variable yang palingkiri diturunkan (tuntas) dahulu Penurunan terkanan (rightmost derivation): variable yang paling kananditurunkan (tuntas) dahulu Misalkan: ingin dihasilkan string aabbaa dari context free language:S a AS | a ,A SbA | ba25 Hari Soetanto – Teknik Kompilasi – 2010


Penurunan kiri : S => aAS=> aSbAS=> aabAS=> aaabbaS=> aabbaa Penurunan kanan : S=> aAS=> aAa=> aSbAa=> aSbbaa=> aabbaa Misalnya:S -> aB | bAA -> a | aS |bAA B-> b | bS | aBBSaBa B Ba B B b Sb b S b Aa B abPenurunan untuk string aaabbabba26 Hari Soetanto – Teknik Kompilasi – 2010


Dalam hal ini perlu untuk melakukan percobaan pemilihan aturan produksi yangbisa mendapatkan solusiMetode ParsingPerlu memperhatikan 3 hal: Waktu Eksekusi Penanganan Kesalahan Penanganan KodeParsing digolongkan menjadi top down dan bottom up:• Top-Down parsingPenelusuran dari root ke leaf atau dari simbol awal ke simbol terminalmetode ini meliputi:• Backtrack/backup : Brute Force• No backtrack : Recursive Descent Parser• Bottom-Up parsingMetode ini melakukan penelusuran dari leaf ke rootTop down parsing dengan menggunakan metode backtrack/bakup atau disebut dengan istilahBrute force• 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 mencobasegala kemungkinan untuk setiap simbol non-terminal• Contoh suatu language dengan aturan produksi sebagai berikutS aAd | aBA b | cB ccd | ddc27 Hari Soetanto – Teknik Kompilasi – 2010


• Misal ingin dilakukan parsing untuk string ‘accd’(i) S (ii) S (iii) Sa A d a A dbTerjadi kegagalan (iii), dilakukan back track(iv) S (v) S (vi) S.a A d a B a Bc c c dTerjadi kegagalan lagi (iv), dilakukan back-trackKelemahan dari metode-metode brute-force• Mencoba untuk semua aturan produksi yang ada sehingga menjadi lambat (waktueksekusi)• 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 dulusehingga tidak rekursif kiri, Karena rekursif kiri akan mengalami Loop yang terus-menerusContohTerdapat grammar/tata bahasa G = (V,T,P,S), dimanaV= (“E”,”T”,”F”) Simbol NonTerminal (variable)T= (“i”,”*”,”/” ,”+”,”-”) Simbol TerminalS=”E”Simbol Awal / Start simbolString yang diinginkan adalah i * iaturan produksi (P) yang dicobakan adalah1. E T | T + E | T - E28 Hari Soetanto – Teknik Kompilasi – 2010


T F | F * T | F / TF iaccept (diterima)2. E T | E+T | E-TT F | T* F | T / FF iaccept (diterima)• Meskipun ada rekursif kiri, tetapi tidak diletakkan sebagai aturan yang paling kiri3. E E+T | E-T | TT T* F | T / F | FF iRekursif kiri, program akan mengalami loopBrute force : Aturan produksiAturan Produksi yang rekursif memiliki ruas kanan (hasil produksi) yang memuatsimbol variabel pada ruas kiriSebuah produksi dalam bentukA A merupakan produksi rekursif kanan = berupa kumpulan simbol variabel dan terminalcontoh:S d SB ad Bbentuk produksi yang rekursif kiriA A merupakan produksi rekursif Kiricontoh:S S dB B adProduksi yang rekursif kanan akan menyebabkan penurunan tumbuh kekanan,Sedangkan produksi yang rekursif kiri akan menyebabkan penurunan tumbuh ke kiri.29 Hari Soetanto – Teknik Kompilasi – 2010


Contoh: Context free Grammar dengan aturan produksi sebagai berikut:Dalam Banyak penerapan tata-bahasa, rekursif kiri tidak diinginkan, Untuk menghindaripenurunan kiri yang looping, perlu dihilangkan sifat rekursif, dengan langkah-langkah sebagaiberikut:• Pisahkan Aturan produksi yang rekursif kiri dan yang tidak; misalnyaAturan produksi yang rekursif kiriA A 1 | A 2 | ... | A nAturan produksi yang tidak rekursif kiriA 1 | 2 | ... | n• lakukan per-ganti-an aturan produksi yang rekursif kiri, sebagai berikut:1. A 1 Z | 2 Z | ... | n Z2 Z 1 | 2 | ... | n3 Z 1 Z | 2 Z | ... | n Z• Pergantian dilakukan untuk setiap aturan produksi dengan simbol ruas kiri yang sama, bisamuncul variabel Z1, Z2 dst, sesuai dengan variabel yang menghasilkan rekurisif kiriContoh: Tata Bahasa Context freeS Sab | aSc | dd | ff | Sbd• Pisahkan aturan produksi yang rekursif kiriS Sab | Sbd30 Hari Soetanto – Teknik Kompilasi – 2010


Ruas Kiri untuk S: 1=ab , 2=bd• Aturan Produksi yang tidak rekursif kiriS aSc | dd | ffdari situ didapat untuk Ruas Kiri untuk S: 1 = aSc, 2 = dd, 3= ff• Langkah berikutnya adalah penggantian yang rekursif kiriS Sab | Sbd, dapat digantikan dengan1. S aScZ1 | ddZ1 | ffZ12. Z1 ab | bd3. Z1 abZ1 | bdZ1• Hasil akhir yang didapat setelah menghilangkan rekursif kiri adalah sebagai Berikut:S aSc | dd | ffS aScZ1 | ddZ1 | ffZ1Z1 ab | bdZ1 abZ1 | bdZ1 Kalau pun tidak mungkin menghilangkan rekursif kiri dalampenyusunan aturan produksi maka produksi rekursif kiri diletakkan padabagian belakang atau terkanan, hal ini untuk menghindari looping pada awal prosesparsing Metode ini jarang digunakan, karena semua kemungkinan harus ditelusuri,sehingga butuh waktu yang cukup lama serta memerlukan memori yangbesar untuk penyimpanan stack (backup lokasi backtrack) Metode ini digunakan untuk aturan produksi yang memiliki alternatif yangsedikitTop down parsing dengan menggunakan metode no backtrack atau disebut dengan istilahRecursive Descent ParserParsing 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 variablenya31 Hari Soetanto – Teknik Kompilasi – 2010


non terminalnya• Dengan cara penurunan secara recursif untuk semua variabel dari awal sampai ketemuterminal• Tidak pernah mengambil token secara mumdur (back tracking)• Beda dengan turing yang selalu maju dan mundur dalam melakukan parsingParsing: Bottom-Up ParsingMetode ini melakukan penelusuran dari leaf ke rootKelemahan dari metode-metode brute-force• Mencoba untuk semua aturan produksi yang ada sehingga menjadi lambat (waktueksekusi)• 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 dulusehingga tidak rekursif kiri, Karena rekursif kiri akan mengalami Loop yang terusmenerus32 Hari Soetanto – Teknik Kompilasi – 2010


Semantics AnalyserPengecekan yang dilakukan dapat berupa: Memeriksa penggunaan nama-nama (keberlakuannya)o DuplikasiApakah sebuah nama terjadi pendefinisian lebih dari dua kali. Pengecekan dilakukanpada bagian pengelolaan blocko TerdefinisiApakah nama yang dipakai pada program sudah terdefinisi atau belum.Pengecekan dilakukan pada semua tempat kecuali block Memeriksa tipeMelakukan pemeriksaan terhadap kesesuaian tipe dalam statementstatementyang ada, Misalnya bila terdapat suatu operasi, diperiksa tipeoperand nyaContohnya; expresi yang mengikut IF berarti tipenya boolean, akan diperiksatipe identifier dan tipe ekspresinya Bila ada operasi antara dua operand maka tipe operand pertama harus bisadioperasikan dengan operand yang keduaAnalisa Semantic sering juga digabungkan dengan intermediate code yangakan menghasilkan output intermediate code. Intermediate code ini nantinya akandigunakan pada proses kompilasi berikutnya (pada bagian back endcompilation)Intermediate Code• Memperkecil usaha dalam membuat compilator dari sejumlah bahasa ke sejumlah mesin• Lebih Machine Independent, hasil dari intermediate code dapat digunakan lagi pada mesinlainnya• Proses Optimasi lebih mudah. Lebih mudah dilakukan pada intermediate code dari padaprogram sumber (source program) atau pada kode assembly dan kode mesin• Intermediate code ini lebih mudah dipahami dari pada kode assembly atau kode mesin33 Hari Soetanto – Teknik Kompilasi – 2010


• Kerugiannya adalah melakukan 2 kali transisi, maka dibutuhkan waktu yang relatif lamaAda dua macam intermediate code yaitu Notasi Postfix dan N-TupleNotasi POSTFIX Misalnya :( a +b ) * ( c+d ) maka Notasi postfixnya ab+cd+ *Semua instruksi kontrol program yang ada diubah menjadi notasipostfix, misalnyaIF THEN ELSE Diubah ke postfix menjadi ; BZ BR < stmt2>BZ : Branch if zero (salah)BR: melompat tanpa harus ada kondisi yang ditestContoh : IF a > b THEN c := dELSE c := eDalam bentuk Postfix11 a12 b13 >14 2215 BZ16 c17 d18 :=1920 2534 Hari Soetanto – Teknik Kompilasi – 2010


21 BR22 c23 e24 :=25bila 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 25Contoh:WHILE DO Diubah ke postfix menjadi ; BZ BRInstruksi : a:= 1WHILE a < 5 DOa := a + 1Dalam bentuk Postfix10 a11 112 :=13 a14 515


25 BRTRIPLES NOTATIONNotasi pada triple dengan format Contoh:A := D * C + B / EJika dibuat intermidiate code triple:1. * , D, C2. /, B, E3. +, (1), (2)4. :=, A, (3)Perlu diperhatikan presedensi (hirarki) dari operator, operatorperkalian dan pembagian mendapatkan prioritas lebih dahulu dari padapenjumlahan dan penguranganContoh lain:IF X > Y THENX := a – bELSEX := a + bIntermidiate code triple:1. >, X, Y36 Hari Soetanto – Teknik Kompilasi – 2010


2. BZ, (1), (6) bila kondisi 1 loncat ke lokasi 63. -, a, b4. :=, X, (3)5. BR, , (8)6. +, a, b7. :=, X, (6)Kelemahan dari notasi triple adalah sulit pada saat melakukan optimasi,maka dikembangkan Indirect triples yang memiliki dua list; list instruksi danlist eksekusi. List Instruksi berisikan notasi triple, sedangkan list eksekusi mengatureksekusinya;contohA := B + C * D / EF := C * DList InstruksiList Eksekusi1. *, C, D 1. 12. /, (1), E 2. 23. +, B, (2) 3. 34. :=, A , (3) 4. 45. :=, F, (1) 5. 16. 5Quardruples NotationFormat dari quardruples adalah Result atau hasil adalah temporary variable yang dapat ditempatkan pada memory atauregister. Problemnya adalah bagaimana mengelola temporary variable seminimalmungkin37 Hari Soetanto – Teknik Kompilasi – 2010


Contoh:A := D * C + B / EJika dibuat intermidiate codenya :1. * , D, C, T12. / , B, E, T23. +, T1, T2, A 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, T3Dapat ditranslasikan kedalam bahasa assembly dengan accumulator tunggal:LDA A ( isi A ke dalam accumulator)ADD B (isi accumulator dijumlahan dengan B)STO T1 ( Simpan isi Accumulator ke T1)LDA CADD DSTO T2LDA T1MUL T2STO T3hasil dari code generator akan diterima oleh code optimation , Misalnyauntuk kode assembly diatas dioptimasikan menjadi:LDA AADD BSTO T1LDA CADD DMUL T138 Hari Soetanto – Teknik Kompilasi – 2010


STOT2Perjalanan sebuah intruksi39 Hari Soetanto – Teknik Kompilasi – 2010


Error Handling• Kesalahan Program• Penanganan Kesalahan• Reaksi Compiler Pada kesalahan• Error Recovery• Error repairKesalahan Program dapat berupa Kesalahan leksikalo Kesalahan dalam mengetik/mengejao Misal THEN dituliskan dengan TEN atau THN Kesalahan Sintaks misalnya dalam operasi aritmatika dengan tanda kurung yang jumlahnya kurang,contoho A:= X + (B * (C+D) Kesalahan Semanticso Tipe data yang salah• Contoh : int c;• c = 1.5 * 0.78o Variable belum didefinisikan• Misal : B := B + 1• tetapi B belum didefinisikan Langkah-langkah:o Mendeteksi kesalahano Melaporkan kesalahano Tindak lanjut perbaikan Misal: compiler menemukan kesalahan, yang bisa meliputio Kode kesalahano Pesan Kesalahan dalam bahasa alamio Nama dan atribut identifiero contoh : error 162 Jumlah: Unknow identifier40 Hari Soetanto – Teknik Kompilasi – 2010


o Dapat diartikan: Kode kesalahan =162, pesan kesalahan = unknownidentifier, nama identifier = jumlahAda 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/munculsetelah program dieksekusi Reaksi yang benar, tapi kurang dapat diterima dan kurang bermanfaat Compilator menemukan kesalahan pertama, melaporkannya, lalu berhenti(halt) Pemrogram membuang waktu untuk melakukan pengulangan kompilasi untuksetiap kali terdapat sebuah error Reaksi-reaksi yang dapat diterimao Reaksi yang sudah dapat dilakukan ; Compilator melaporkan Error• Recovery : Pemulihan• Repair : Perbaikano Reaksi yang belum dapat dilakukan• Compiler mengkoreksi kesalahan• Menghasilkan obyek program sesuai yang diinginkan pemrogram• Compiler memiliki kemampuan untuk ”mengetahui‘ maksud daripemrogram• Belum diimplementasikan pada program (sekarang ini)Bertujuan mengembalikan parser ke kondisi stabil agar supaya dapat melanjutkan prosesparsing ke posisi selanjutnya.o Mekanisme Ad Hoco Recovery yang dilakukan tergantung dari si pembuat compilero Tidak terikat pada suatu aturan tertentuo Disebut juga dengan istilah purpose error recoveryo Syntax directed Recovery41 Hari Soetanto – Teknik Kompilasi – 2010


misalbeginA := A + 1B := B + 1;C := C + 1end ;Pada contoh diatas, compiler akan mengenali sebagai (dalam Notasi BNF)begin ? , statement> ; end;? Akan diperlakukan sebagai ”;‘oSecond Error Recovery : untuk melokalisir kesalahano Panic Mode• Maju terus sampai ketemu delimiter• Contoh : IF A = 1 Kondisi := true;• Pada kondisi diatas THEN tidak ada, compiler melanjutkansampai ketemu delimiter (;)o Unit Deletiono Menghapus keseluruhan suatu unit sintaksik (misalnya :, , dan sebagainyao Mempermudah untuk melakukan error repairingo Context Sensitive Recoveryo Berkaitan dengan semanticso contoh : B := ”<strong>Budi</strong> <strong>Luhur</strong>‘o Pada awal program variabel B belum dideklarasikan, makaberdasarkan permunculannya maka diasumsikan variabel B bertipestringError Handling - Error repairMemperbaiki kesalahan dan membuat source program valid (memodifikasi)42 Hari Soetanto – Teknik Kompilasi – 2010


Mekanisme Ad Hoc• Tergantung pada sipembuat compiler Syntax directed Repair• Menyisipkan / membuang simbol terminal yang dianggap hilang atau yangmenyebabkan error• contoh WHILE A < 1I := I = 1;• compiler akan menyisipkan DO• Contoh lainProcedure Increment ;beginx := X + 1end;end;• Kelebihan simbol end, yang menyebabkan kesalahan, maka compiler akanmembuangnya Context Sensitive Repair• Tipe identifier: membuat identifier dummyvar A : StringbeginA := 0;endmaka compilator akan memperbaiki kesalahan dengan membuat identifierbaru , misalnya B bertipe integer• Spelling Repair: memperbaiki kesalahan pengetikan pada identifier, misalnya:WHILLE A = 1 DOidentifier yang salah tersebut diperbaiki menjadi WHILE43 Hari Soetanto – Teknik Kompilasi – 2010


Teknik Optimasi• Dependensi Optimasi• Optimasi Lokal• Optimasi Global• Dependensi Optimasibertujuan untuk menghasilkan kode program yang berukuran lebih kecil dan lebih cepato Machine Dependent Optimizero Machine Independent Optimizer (Optimasi lokal dan Optimasi global)Optimasi Lokal : adalah optimasi yang dilakukan hanya pada suatu blok dari source code, dengan cara: Foldingmenganti konstata atau ekpresi yang bisa dievaluasi pada saat compile time dengannilai komputasinya.Misalnya:A := 2 + 3 + B bisa diganti dengan A:= 5 + B5 dapat mengantikan ekspresi 2 + 3 Redundant-Subexpression Eliminationhasilnya digunakan lagi dari pada dilakukan computasi ulang, contoh:A:= B + CX := Y + B + C Optimasi dalam sebuah Iterasi• Loop Unrrolling:Menganti suatu loop dengan menulis statement yang adadalam loop ditulis beberapa kali• Karena sebuah iterasi pada implemnetasi ke level rendah, memerlukan :• Inisialisasi nilai awal, pada loop dilakukan sekali pada saat permulaaneksekusi loop• Penge-test-an, apakah variabel loop telah mencapai kondisi terminasi• Adjustment yaitu: penambahan atau pengurangan nilai pada variabelloop dengan jumlah tertentu• Operasi yang terjadi pada tubuh perulangan (loop body)44 Hari Soetanto – Teknik Kompilasi – 2010


45 Hari Soetanto – Teknik Kompilasi – 2010


Contoh :FOR I := 1 to 2 DOA[I] := 0;dapat dioptimasikan menjadiA[1] := 0;A[2] := 0;o Frequency Reduction: Pemindahan statement ke tempat yang lebih jarangdieksekusi, contohFOR I:= 1 to 10 DO X := 5BEGINFOR I:= 1 to 10 DOX := 5BEGINA := A + 1 A := A + 1END:END:o Strength Reductiono Penggantian suatu operasi dengan operasi lain yang lebih cepatdieksekusio misalnya: pada komputer operasi perkalian memerlukanwaktu eksekusi lebih banyak dari pada operasi penjumlahano contoh lainA:= A + 1o dapat digantikan denganINC(A)o Optimasi GlobalOptimasi global biasanya dilakukan dengan suatu graph terarah yangmenunjukkan jalur yang mungkin selama eksekusi program.ada dua kegunaan optimasi global yaitu bagi programmer dan untuk compiler itusendiri; diantarao Bagi Programmer (pembuat program dengan bahasa tingkat tinggi)46 Hari Soetanto – Teknik Kompilasi – 2010


o Unreachable/dead code: Kode yang tidak pernah dieksekusi• misalnya : X :=5;IF X = 0 THEN A :=A + 1InstruksiA := A + 1tidak pernah dikerjakan karena kondisi X tidak pernahmenjadi 0, sehingga memperlambat proseso Unused parameter : parameter yang tidak pernah digunakandalam procedureo misalnya : (dengan menggunakan bahasa pascal)procedure penjumlahan(a,b,c ; Integer);var x : integer;beginx := a + b;endo parameter c tidak pernah digunakan sehingga tidak perludiikut sertakan disebabkan pada prosedur penjumlahan ctidak pernah dikenakan suatu proses atau nilaio Unsused Variabel: variabel yang yang tidak pernah dipergunakanProgram pendek;var a, b: integerbegina := 5;end;Variabel b tidak pernah digunakan dalammanipulasi, sehingga47 Hari Soetanto – Teknik Kompilasi – 2010


tidak perlu untuk dideklarasikano Variabel : variabel yang dipakai tanpa nilai awal. ContohProgram Awal; vara, b: integer begina := 5a := a + b;endo variabel b digunakan tetapi tidak memiliki harga awaloBagi Compilero meningkatkan efisiensi eksekusi programo menghilangkan useless code/kode yang tida terpakaiTabel InformasiDua fungsi penting untuk tabel informasi untuk membantu pemeriksaan kebenaran semantik dari program sumber untuk membantu dan mempermudah dalam pembuatan intermediate code dan prosespembangkitan kodeSecara umum, sebuah tabel simbol bisa memiliki elemen-elemen tabel sebagaiberikut, meskipun tidak semuanya dipergunakan oleh semua compiler No.urut identifier: menentukan nomor urut pada tabel simbol Nama identifier Tipe identifier Object time address Dimensi dari identifier yang bersangkutano Nomor baris variabel yang dideklarasikano Nomor baris variabel yang direferensikano Field link48 Hari Soetanto – Teknik Kompilasi – 2010


Tabel Informasi - ImplementasiAda beberapa jenis Tabel Informasio Tabel identifier; berfungsi menampung semua identifier yang terdapat dalamprogramo Tabel Array: berfungsi menampung informasi tambahan untuk sebuah arrayo Tabel blok: mencatat varibel-variabel yang ada pada blok yang samao Tabel Real: Menyimpan elemen tabel bernilai realo Tabel string: menyimpan informasi stringo Tabel display: mencatat blok yang aktifTabel Informasi - IdentifierTabel 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 identifierdalam program, konsepnya sama dengan pembentukan tree, misalnya mainprogram level 0Untuk 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 membedakanparameter by value dan by reference Contoh (dalam pascal)Program A;Var B : Integer;Procedure X (Z: char)49 Hari Soetanto – Teknik Kompilasi – 2010


var C : Integerbegin....dstTabel identifier akan mencatat semua identifier;0 A1 B2 X3 Z4 CcontohTabIe: Array [0..tabmax] of record nama :String;link : integer; Obj :object; Tipe :Types; ref : Integer;normal : Boolean;Level : 0.. Maxlevel;address : Integer;endDimanaobjek =(konstant, variabel, prosedur, fungsi)Types = (notipe, int, reals, booleans, chars, arrays, recordTabel Informasi - ArrayTabel Array dipergunakan untuk menyimpan informasi suatu identifier yang bertipearray, tabel ini memilik field: No. Urut suatu array dalam tabel Tipe dari indeks array yang bersangkutan Tipe element array Referensi dari elemen array50 Hari Soetanto – Teknik Kompilasi – 2010


Index batas atas dan bawah array Jumlah elemen array Ukuran total array (total = atas - bawah + 1) x elemen size Elemen sizeTabel BlokDipergunakan untuk menyimpan informasi blok-blok yang ada pada tabel utama. Berisikanfieldo no urut bloko batas awal bloko batas akhir bloko ukuran parameter/parameter sizeo ukuran variabel/ variabel sizeo last variabelo last parameterContohProgram AVar B : Integer;Procedure X (Z:char);Var C : Integer;begin....Untuk Blok A Blok Blast variable = 2 4Variable size = 2 (dianggap integer 2 byte) 2Last parameter = 0 (tanpa parameter) 3parameter size = 0 1 (char butuh 1 byte)Tabel Real51 Hari Soetanto – Teknik Kompilasi – 2010


Dipergunakan untuk menyimpan nilai dari suatu identifier yang bertipereal (pecahan). Elemen-elemen dari tabel ini adalah sebagai berikut; NO urut elemen Nilai real suatu variabel real yang mengacu ke indeks tabel iniPemikirannya disini setiap tipe yang memiliki oleh suatu bahasa akan memilikitabelnya sendiriTabel StringDipergunakan untuk menyimpan informasi string yang terdapat pada programsumber. Elemen-elemen yang terdapat dalam tabel ini adalah:o no Urut elemeno Karakter-karakter yang merupakan konstantaTabel Displaymenyimpan informasi-informasi mengenai blok-blok yang lagi aktif.Elemen- elemen yang terdapat dalam tabel ini adalah:o No Urut tabelo Blok yang aktifPengisian tabel display dilakukan dengan konsep stack52 Hari Soetanto – Teknik Kompilasi – 2010


Soal-soal Latihan Teknik KompilasiSoal Multiple choice1. Yang disebut dengan bahasa mesin adalah suatu bahasa yang:a. Sangat sukar dan sangat sedikit kemungkinannya untuk membuat compiler denganbahasa jenis inib. Fasilitas yang dimiliki lebih baikc. Memiliki ukuran yang relatif besard. Lebih mudah dipelajari2. Yang disebut dengan bahasa assembly adalah suatu bahasa yang:a. Sangat sukar dan sangat sedikit kemungkinannya untuk membuat compiler denganbahasa inib. Fasilitas yang dimiliki lebih Sedikitc. Memiliki ukuran yang relatif besard. Lebih mudah dipelajari3. Yang disebut dengan bahasa Tingkat tinggi adalah suatu bahasa yang:a. Sangat sukar dan sangat sedikit kemungkinannya untuk membuat compiler denganbahasa inib. Fasilitas yang dimiliki lebih Sedikitc. Memiliki ukuran yang relatif kecild. Lebih mudah dipelajari4. Yang dimaksud dengan BootSrap, adalaha. Bagaimana orang mengerti bahasa mesinb. Penggunaan bahasa tingkat tinggic. Untuk membangun sesuatu yang besar dibangun dulu bagian intinyad. Untuk menghidupkan komputer5. Noam chomsky melakukan penggolongan tingkatan dalam bahasa, dikenal denganistilaha. BNFb. Chomsky Hierarkyc. Tata Bahasa53 Hari Soetanto – Teknik Kompilasi – 2010


d. Grammar6. Aturan produksi yang ada menggunakan simbol-simbol:a.b. A bc.d. b A7. Menurut comsky terdapat 4 penggolongan dalam aturan produksi, yangtermasuk pada kategori Unrestricted: Tidak Ada batasan pada aturan produksi,adalaha. Tipe 0b. Tipe 1c. Tipe 2d. Tipe 38. Menurut comsky terdapat 4 penggolongan dalam aturan produksi, yang termasuk padakategori Context sensitive: Panjang string ruas kiri harus lebih kecil atau sama denganruas kanan, adalaha. Tipe 0b. Tipe 1c. Tipe 2d. Tipe 39. Menurut comsky terdapat 4 penggolongan dalam aturan produksi, yang termasuk padakategori Context Free Grammar: Ruas kiri haruslah tepat satu simbol variable, adalaha. Tipe 0b. Tipe 1c. Tipe 2d. Tipe 310.Menurut comsky terdapat 4 penggolongan dalam aturan produksi, yang termasukpada kategori Regular: Ruas kanan hanya memiliki maksimal 1 simbol terminal dandiletakkan paling kanan sendiri, adalaha. Tipe 0b. Tipe 154 Hari Soetanto – Teknik Kompilasi – 2010


c. Tipe 2d. Tipe 311.Yang dimaksud dengan Diagram State, pada teknik Kompilasi adalaha. Digunakan untuk mendapatkan token, mempermudah melakukan analisis lexicalb. Digunakan untuk mendapatkan token, mempermudah melakukan analisis syntaxc. Aturan produksi yang dikenalkan oleh comskyd. Simbol terminal12.Yang dimaksud dengan TOKEN, pada teknik Kompilasi adalaha. Digunakan untuk mendapatkan token, mempermudah melakukan analisis lexicalb. Digunakan untuk mendapatkan token, mempermudah melakukan analisis syntaxc. Alat bantu (tools) dalam pembuatan parser/ analisis sintaksisd. Simbol terminal13.Yang dimaksud dengan Diagram Syntax, pada teknik Kompilasi adalaha. Digunakan untuk mendapatkan token, mempermudah melakukan analisis lexicalb. Digunakan untuk mendapatkan token, mempermudah melakukan analisis syntaxc. Alat bantu (tools) dalam pembuatan parser/ analisis sintaksisd. Simbol terminal14.Translator yang Source codenyabahasa mesin, disebut dengana. Assemblerb. Compilerc. Interpreterd. Suplieradalah bahasa assembly, dan Object code adalah15.Translator yang Source code nya adalah bahasa tingkat tinggi, object code adalah bahasamesin atau bahasa assembly. Source code dan data diproses berbeda, disebut dengan :a. Assemblerb. Compilerc. Interpreterd. Suplier16.Translator yang idak menghasilkan bentuk object code, tetapi hasil translasinya hanya55 Hari Soetanto – Teknik Kompilasi – 2010


dalam bentuk internal, dimana program induk harus selalu ada-berbeda dengancompiler, disebut dengan :a. Assemblerb. Compilerc. Interpreterd. Suplier17.Memgelompokkan program asal/sumber menjadi token disebut dengana. Scannerb. Parserc. Lexicerd. Interpreter18.Yang bertugas untuk memeriksa kebenaran dan urutan dari token-token yang terbentukoleh scanner, disebut dengan:a. Scannerb. Parserc. Lexicerd. Interpreter19.Tugas dari anlysis lexixal adalaha. Mentransformasikan ke dalam bentuk token-tokenb. Proses pendeteksian token-tokenc. Untuk mengenali makna dari simbol-simbold. Memeriksa variabel sudah dideklarasikan atau belum20.Tugas dari Semantics analyser adalaha. Mentransformasikan ke dalam bentuk token-tokenb. Proses pendeteksian token-tokenc. Untuk mengenali makna dari simbol-simbold. Memeriksa variabel sudah dideklarasikan atau belum21.Tugas dari Syntax analyser adalaha. Mentransformasikan ke dalam bentuk token-tokenb. Proses pengelompokan token-token kedalam class syntaxc. Untuk mengenali makna dari simbol-simbol56 Hari Soetanto – Teknik Kompilasi – 2010


d. Memeriksa variabel sudah dideklarasikan atau belum22.Tugas dari Intermidiate code, adalaha. Mentransformasikan ke dalam bentuk token-tokenb. Proses pengelompokan token-token kedalam class syntaxc. Memperkecil usaha dalam membuat compilator dari sejumlah bahasa ke sejumlahmesind. Memeriksa variabel sudah dideklarasikan atau belum23.Fungsi dari Tabel simbol, adalah :a. Mentransformasikan ke dalam bentuk token-tokenb. Proses pengelompokan token-token kedalam class syntaxc. Memperkecil usaha dalam membuat compilator dari sejumlah bahasa ke sejumlahmesind. Menindak lanjuti untuk perbaikan24.Rekasi-reaksi yang tidak dapat diterima pada suatu compiler adalah; kecualia. Compiler crash: hangb. Loopingc. Mengahasilkan obyek yang salahd. Menemukan kesalahan yang pertama25.Rekasi-reaksi yang benar, tapi kurang diterima pada suatu compiler adalah;a. Compiler crash: hangb. Loopingc. Mengahasilkan obyek yang salahd. Menemukan kesalahan yang pertama26.Rekasi-reaksi yang dapat diterima pada suatu compiler adalah; kecualia. Recoveryb. Repairc. Mengkoreksi kesalahand. Menemukan kesalahan yang pertama27.Pada teknik Optimasi di tahapan compiler, ada beberapa teknik kompilasidiantaranya adalah dibawah ini: kecuali57 Hari Soetanto – Teknik Kompilasi – 2010


a. Dependency optimasib. Lokal optimasic. Global optimasid. Best Optimasi28.Tujuan dari dependency Optimasi adalah untuka. Menghasilkan error kesalahanb. Mengbetulkan kesalahanc. Menghasilkan kode program yang kecil dan lebih cepatd. Menghasilkan execute file29.Yang dimaksud dengan optimasi lokal adalaha. Optimasi yang dilakukan hanya pada suatu blok daru source codeb. Optimasi yang dilakukan dengan cara seperti graph terarah yang menunjukkan jaluryang mungkin selama execusic. Menghasilkan kode program yang kecil dan lebih cepatd. Optimasi yang dilakukan oleh programmer30.Yang dimaksud dengan optimasi global adalaha. Optimasi yang dilakukan hanya pada suatu blok daru source codeb. Optimasi yang dilakukan dengan cara seperti graph terarah yang menunjukkan jaluryang mungkin selama execusic. Menghasilkan kode program yang kecil dan lebih cepatd. Optimasi yang dilakukan oleh interpreter58 Hari Soetanto – Teknik Kompilasi – 2010


59 Hari Soetanto – Teknik Kompilasi – 2010

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!