Materi Kuliah Teknik Kompilasi

  TEKNIK

KOMPILASI

Gopa Kustriono Team Penyusun : Zulfiandri

T U J U A N T U J U A N

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

  

   Nymeyer, Prentice Hall, 1996 Practice and principles of Compiler building with C, Henk Alblas, AlbertIntroduction to The theory of computation, Michael sipser, PWS publishing Company, 1997

The Essence of Compilers, Robin Hunter,Prentice Hal Europe, 1999

& Son, 2000 Modern Compiler Design, Dick Grune, Henri E. Bal, Et all, John Wiley

  

Bahasan Materi Kuliah

Bahasan Materi Kuliah

Pendahuluan: arti dari Kompilasi Translator: Compiler dan interpreterBahasa Pemrograman Pembuatan CompilerKonsep bahasa dan Notasi Hirarki ComskyAturan Produksi Diagram stateNotasi BNF Diagram Syntax

  

Bahasan Materi Kuliah

Bahasan Materi Kuliah

  Beberapa translator Struktur Compiler Lexical Analysis Analysis Syntax Analysis Semantics Error Handling

   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

  Translator : Compiler & Translator : Compiler & Interpreter Interpreter Translator :

Adalah suatu program dimana mengambil input

sebuah program yang ditulis pada satu bahasa

program (source language) ke bahasa lain (The object on target language)

   Jika source language adalah high level language, seperti cobol, pascal, fortran maka object

language adalah low-level language atau mesin

Kenapa perlu Kenapa perlu

   Dengan bahasa mesin adalah bahasa bentuk bahasa

Translator ? Translator ?

  bagian komputer seperti bits, register & sangat primitive terendah komputer, berhubungan langsung dengan bagianprogrammer yang membuat program dengan bahasa Jawaban atas pertanyaan ini akan membingungkan bagi Bahasa mesin adalah tidak lebih dari urutan 0 dan 1 mesin.

   micro-code, semacam prosedur dalam bahasa mesin Instruksi dalam bahasa mesin bisa saja dibentuk menjadiBagaimana dengan orang tidak mengerti bahasa mesin

  Ada Beberapa Translator Ada Beberapa Translator 1. Assembler Source code adalah bahasa assembly, Object code adalah bahasa mesin *.asm Assembler *.asm Assembler *.exe /*.com Object code *.exe /*.com Object code

  2. Compiler Source code adalah bahasa tingkat tinggi, object code

  Interpreter tidak menghasilkan bentuk object code, tetapi hasil translasinya hanya dalam bentuk internal, dimana program induk harus selalu ada-berbeda dengan compiler

  Source code Source code Translator Translator Hasil Hasil Hasil Hasil Source code Source code Execution Execution Data Data Compile r Compile r Object Code Object Code

  

Translator : Compiler & Interpreter

Translator : Compiler & Interpreter

  OBJECT PROGRAM Source Program Compiler ERROR MESSAGES COMPILER vs INTERPRETER  menangkap beberapa kesalahan pada 1 baris kode sumber pada kode sumber secara sekaligus. Kalau Interpreter cuma bisa Compiler bisa menangkap berbagai kesalahan dalam 1 program Biasanya program yang dihasilkan compiler lebih cepat dari suatu saat waktu pelaksanaan program dengan interpreter. dijalankan mesin / komputer (executable). Kalau Interpreter dan harus digabungkan / dilink menjadi bentuk yang dapat

Kalau compiler menghasilkan kode antara (misal object code)

biasanya tidak menghasilkan kode antara.

   COMPILER vs INTERPRETER

kode objek dan linking / penggabungan kode objek dengan library.

mesin dilakukan dalam 2 tahap terpisah, yaitu parsing / pembuatan

Kalau dengan kompiler, maka pembuatan kode yang bisa dijalankan Kalau compiler membutuhkan linker untuk menggabungkan kode Kalau interpreter tidak ada proses terpisah.

yang bisa dijalankan oleh mesin. Kalau interpreter tidak butuh linker.

objek dengan berbagai macam library demi menghasilkan suatu kode  mengubah suatu modul / kode objek kecil, maka harus dilakukan program-program kecil. Kalau compiler agak repot karena untuk Interpreter cocok untuk membuat / menguji coba modul / sub-routine / yang diperlukan.

proses linking / penggabungan kembali semua objek dengan library

  Proses kompilasi dikelompokkan ke dalam dua kelompok besar : 1. analisa : program sumber dipecah-pecah dan dibentuk menjadi bentuk antara (inter- 2.

mediate representation)

sintesa : membangun program sasaran yang diinginkan dari

  

Fase-fase proses sebuah

kompilasi

  Penganalisa Leksikal  membaca program sumber, karakter demi karakter. Sederetan (satu atau lebih) karakter

dikelompokkan menjadi satu kesatuan mengacu

kepada pola kesatuan kelompok karakter (token) yang ditentukan dalam bahasa sumber. Kelompok karakter yang membentuk sebuah token

dinamakan lexeme untuk token tersebut. Setiap

token yang dihasilkan disimpan di dalam tabel

simbol. Sederetan karakter yang tidak mengikuti

  Penganalisa Sintaks  memeriksa kesesuaian pola deretan token dengan aturan sintaks yang ditentukan dalam

bahasa sumber. Sederetan token yang tidak

mengikuti aturan sintaks akan dilaporkan sebagai kesalahan sintaks (sintax error).

  Secara logika deretan token yang bersesuaian dengan sintaks tertentu akan dinyatakan sebagai pohon parsing (parse Penganalisa Semantik  memeriksa token dan ekspresi dari batasan- batasan yang ditetapkan. Batasan-batasan tersebut misalnya :

  a. panjang maksimum token identifier adalah 8 karakter,

b. panjang maksimum ekspresi tunggal adalah 80

karakter, c. nilai bilangan bulat adalah -32768 s/d 32767,

  Pembangkit Kode Antara  kan pohon parsing. Pohon parse selanjutnya membangkitkan kode antara (intermediate code) berdasar-

translator). Hasil penerjemahan ini biasanya merupakan

penerjemah berdasarkan sintak (syntax-directed diterjemahkan oleh suatu penerjemah yang dinamakan tiga alamat bisa berbentuk quadruples (op, arg1, arg2, representasi program untuk suatu mesin abstrak. Perintah perintah tiga alamat (three-address code) yang merupakan (strip, dash)

argumen dinyatakan dengan menetapkan arg2 dengan -

result), tripels (op, arg1, arg2). Ekspresi dengan satu

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

  Pembangkit Kode Mesin  membangkitkan kode dalam bahasa target tertentu (misalnya bahasa mesin)

  

Contoh

Kompila

si

  

View dari programmer

View dari programmer

  

Mesin View

Mesin View

  Pembuatan compiler Pembuatan compiler Bahasa mesin Bahasa mesinkemungkinannya untuk membuat Sangat sukar dan sangat sedikit mesin, manusia susah mempelajari bahasa compiler dengan bahasa ini, karena  Sangat tergantung pada mesin,

  Pembuatan compiler Pembuatan compiler Assembly

  Assembly

Hasil dari program mempunyai Ukuran yang

relatif kecil

   Sulit dimengerti karena statement/perintahnya singkat-singkat, butuh usaha yang besar untuk membuat

  Pembuatan compiler Pembuatan compiler Bahasa Tingkat Tinggi (high level language) Bahasa Tingkat Tinggi (high level language) Lebih mudah dipelajari Fasilitas yang dimiliki lebih baik (banyak) pascal dengan menggunakan bahasa C Memiliki ukuran yang relatif besar, misal membuat compiler  tahapan tambahan.

Untuk mesin yang berbeda perlu dikembangkan tahapan-

  Pembuatan compiler Pembuatan compiler BootStrap

  BootStrap 

  Untuk membangun sesuatu yang besar, dibangun/dibuat dulu bagian intinya (niklaus Wirth - saat membuat pascal compiler)

  BootStrap BootStrapPO dibuat dengan assembly, P1 dibuat dari P0, danP2 dibuat dari P1, jadi compiler untuk bahasa P dapat dibuat tidak Po Po P 1 P 2

  

Contoh dari source program

ke dalam kode mesin Source code Assembly Language Machine language ELSE Go to D Go to 23343 GOTO DONE If equal go to C If = go to 23883

  IF COUNT =10 Compare A to B Compare 3477 2883 ENDIF GOTO AGAIN 10010101001010001010100 Actual machine code

  DEFINISI “bahasa kata. Kata adalah unit terkecil komponen bahasa yang tidak Bahasa adalah kumpulan kalimat. Kalimat adalah rangkaian sumber” Kalimat-kalimat : ‘Seekor kucing memakan seekor tikus. bisa dipisah-pisahkan lagi. Budi kick a ball.’ adalah dua contoh kalimat lengkap kalimat lengkap Bahasa Indonesia. ‘A cat eats a mouse dan dan ‘Budi menendang sebuah bola. adalah dua contoh kalimat lengkap dalam Bahasa Pemrograman Pascal. start to finish do A[i] := B[i]*sin(i*pi/16.0).’ adalah dua contoh

Bahasa Inggeris. ‘if a2 < 9.0 then b2 := a2+a3; dan ‘for i :=

Dalam bahasa pemrograman kalimat lebih dikenal sebagai Bahasa Tingkat Tinggi Bahasa Tingkat Tinggi Bahasa yang lebih dikenal oleh manusia, maksudnya adalah statement

  (Pemrograman ) (Pemrograman ) (inggris), yang digunakan menggunakan bahasa yang dipakai oleh manusia

   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 Tidak tergantung pada salah satu mesin Progam mudah untuk di koreksi (debug)Kontrol struktur seperti : kondisi (if .. Then.. Else ), perulangan (For,

  

Tingkatan Bahasa

Pemrograman

  

Sumber perancangan bahasa

  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. Tujuan perancangan bhs program Komunikasi dengan manusia Pencegahan dan deteksi kesalahan Usability Efektifitas pemrograman Compilability (mengurangi kompleksitas,mis:penggunaan bracket) Efisiensi dengan meminimalisir

Tujuan perancangan bhs program(2) Machine independent Simplicity :penyederhanaan komponen bahasa program Orthogonality : kumpulan primitive yang dikombinasikan dengan berbagai cara dalam membangun kontrol dan struktur data dalam bahasa program

Struktur Ekspresi

  Metode pengurutan evaluasi dalam ekspresi : Explicit Bracketing Operator binding

Binding adalah asosiasi antara atribut dan

entity atau antara operasi dan simbol.

  Binding time adalah waktu yang Struktur Data

Empat aspek dalam struktur data

Deklarasi data Tipe data yang tersedia Alokasi storage Lingkup variabel

  Struktur I/O 

  Format free

langsung ditampilkan sehingga mudah

bagi user untuk memeriksa kebenaran

program. Contoh pada VB.

  Formatted output ditampilkan secara terformat, seperti di C : printf(), delphi/VB : format()

ANDAIKAN....

  Anda akan menciptakan sebuah bahasa program, coba sebutkan urutan proses yang harus ditentukan/skenario yang dijalani

  1. Tentukan apa yang diinginkan. 2. Tentukan feature yang mungkin 3.

  Tentukan desain dan sesuaikan dengan featurenya 4. 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.

  SKENARIO PERANCANGAN

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

Tools Bantu Compiler

Pada site tersebut juga tersedia informasi materi kuliah dengan LEX, YACC http:// suatu program ke byte code yang dapat dijalankan di Java Virtual Machine (JVM).

TASSKAF. Bahasa TASSKAF ini merupakan subset dari Java. Dapat disusun

GENTLE. Gentle ini merupakan perangkat bantu (toolkit) modern untuk menulis

rw4.cs.uni-sb.de/~martin/COMP/TK/ matching, smart traversal dan lain sebagainya. Toolkit ini telah digunakan secara mendukung semua proses translasi, dari definisi tree sintaks abstrak, pater compiler dan mengimplemntasikannya pada bahasa tertentu. Perangkat bantu ini

ELI. Merupakan suatu lingkungan pemrograman yang memungkinkan membuat

luas di riest dan industri .http://www.first.gmd.de/gentle/

  

ANTLR, ANother Tool for Language Recognition, is a language tool that provides a

grammatical descriptions containing actions in a variet

framework for constructing recognizers, interpreters, compilers, and translators from

Made by : <almost by himself> Terrence Parr For 15 Years

  15 TH ?

  

IDE SISTEM PEMBELAJARAN

CERDAS a Surprise? What’s Skripsi with Top Topic

  KONSEP

dan NOTASI

BAHASA

  Konsep dan Notasi bahasa Konsep dan Notasi bahasatelah kita pelajari dalam teori bahasa dan automata

Teknik Kompilasi merupakan kelanjutan dari konsep-konsep yang

Thn 56-59 Noam chomsky melakukan penggolongan tingkatan dalam bahasa, yaitu menjadi 4 class 1959 Backus memperkenalkan notasi formal baru untuk syntax Penggolongan tingkatan itu disebut dengan hirarki Comsky

Peter Nour (1960) merevisi metode dari syntax. Sekarang dikenal

bahasa yang lebih spesifik

  Konsep dan Notasi bahasa Konsep dan Notasi bahasa

  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

  Konsep dan Notasi bahasa Konsep dan Notasi bahasa

  Syntax : suatu aturan yang memberitahu apakah sesuatu kalimat (string) adalah valid dalam program atau tidak Semantic : suatu aturan-aturan yang memberikan arti kepada program Review Mesin Automata  Ada mesin penjual permen yang Misal : Misal : FSA Mesin tsb dpt menerima koin Harga Permen Rp.25 Memuat aturan2 sbb : Rp.25 (q) Rp.10 (d) Rp.5 (n), permen. $ = tombol utk mengeluarkan Terjadi diperlihatkan gambar : Kemungkinan2 yang

  

Review Mesin Automata 

FSA State Diagram nya adalah : Misal : FSA

  Contoh lain : FSA

  Konsep dan Notasi bahasa Penggolongan Chomsky Bahasa Mesin Automata Aturan Produksi Atau meliputi; deterministic Tipe 3 Finite state automata (FSA) adalah simbol variabel Regular Finite Automata (DFA) & Non Deterministic Finite terletak diposisi paling kanan simbol variabel yang bila ada maksimal memiliki sebuah Atau Tipe 2 Push Down Automata Automata (NFA) adalah simbol variabel Contex Sensitive Tipe 1 Atau Linier Bounded Automata Contex Free || <= ||

  Tipe 0 Mesin Turing Tidak ada Batasan

   Keterangan  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

  Aturan Produksi Tipe O / Unrestricted: Tidak Ada batasan pada aturan produksi Aturan Produksi Tipe 1 / Context sensitive: Panjang string ruas kiri harus lebih kecil atau sama Abc  De dengan ruas kanan Ab  DeF

Tipe 2 / Context free grammar: Ruas kiri haruslah tepat satu simbol variable

CD  eF D  BcDe B  CDeFg dan diletakkan paling kanan sendiri Tipe 3 / Regular: Ruas kanan hanya memiliki maksimal 1 simbol non terminal

  

Aturan produksi yang tidak

legal !!! Simbol E tidak boleh berada pada ruas kiri misal E  Abd Aturan produksi yang ruas kirinya hanya memuat simbol terminal saja misal : a  bd atau ab  bd

  Hirarki Comsky

Regular

Regular

  Context free

Context Sensitive

Unrestricted

Contoh Tata Bahasa Contoh Tata Bahasa Sederhana Sederhana

   <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>

  

Contoh

Contoh

  Begin A := 1; B := A + 2 END

  Diagram State Diagram State

  Digunakan untuk mendapatkan token, mempermudah melakukan analisis lexical 

  

Token adalah simbol terminal dari teori

  Contoh : suatu tata bahasa memiliki himpunan simbol

token ID untuk karakter huruf a-z, 0-9, token INT untuk digit, token

terminal/token berikut (ID, PLUS, MINUS, dan INT) PLUS untuk Penjumlahan dan token MINUS untuk Pengurangan + PLUS huruf

  ID Huruf, Digit S Digit MINUS INT

  • -

  

Notasi BNF (Backus-Nour

Notasi BNF (Backus-Nour

Aturan Produksi bisa dinyatakan dengan notasi BNF Form) Form) BNF menggunakan abstraksi untuk struktur syntax ::= sama identik dengan simbol  < > pengapit simbol non terminal | sama dengan atau Misalkan aturan produksi sbb: { } Pengulangan dari 0 sampai n kali T  a E  T | T+E | T-E

  Notasi BNFnya adalah E ::= <T> | <T> + <E> | <T> - <E>

  Diagram Syntax Diagram Syntax Alat bantu (tools) dalam pembuatan parser/ analisis sintaksis Lingkaran untuk simbol terminal

Menggunakan simbol persegi panjang untuk non terminal

Misalnya E  T | T+E | T-E E T

  • +
BNF: <Block> ::= BEGIN <statement> { SEMICOL <statement>} END BEGIN Statement END

  ;

Kualitas dari Kualitas dari

   Waktu yang dibutuhkan untuk kompilasi; tergantung dari

Compiler

Compiler

  Algoritma compiler

  Pembuat (compilator) Compiler itu sendiri

   Kualitas dari obyek program yang dihasilkan Fasilitas-fasilitas Integrasi yang lainnya Ukuran yang dihasilkan

  

  Struktur COMPILER Struktur COMPILER Source pr Source pr ogram ogram Lexical Analysis (scanner)

  Syntax A (parser nalysis ) Intermediate code

  Code Optimiza tion Code Generation

  Keterangan

Lexical Analyzer = scanner, Syntax Analyzer, dan Intermediate Code

Keterangan mendekomposisi program sumber menjadi bagian-bagian kecil merupakan fungsi Analisis dalam compiler, yang bertugas 

synthesis yang berfungsi melakukan pembangkitan / pembuatan dan

Code generation dan Code optimization adalah merupakan fungsi

Scanner adalah mengelompok-an program asal/sumber menjadi token

optimasi program (object program)  Parser (mengurai) bertugas memeriksa kebenaran dan urutan dari token-

  Lexical Analysis (scanner) - Lexical Analysis (scanner) -

berhubungan dengan bahasa

Mengidentifikasikan semua besaran yang membuat suatu bahasa

berhubungan dengan bahasa

Mentransformasikan ke token-token Menentukan jenis dari token-token Menangani tabel simbol Menangani kesalahan

Token : separates characters of the source language into group that logically

Scanner, didesign untuk mengenali - keyword, operator, identifier

  belong together

  Lexical Analysis ( Besaran Lexical Analysis ( Besaran

Identifier dapat berupa keyword atau nama kunci, seperti

leksikal ) leksikal ) INT, FLOAT (Bhs C) IF..ELSE, BEGIN..END (pada Pascal), INTEGER (pascal),

   bilangan pecahan (float/Real), boolean (true/false), Konstanta : Besaran yang berupa bilangan bulat (integer), Operator; Operator arithmatika ( + - * / ), operator logika ( < karakter, string dan sebagainya Delimiter; Berguna sebagai pemisah/pembatas, seperti = > ) white-space kurung-buka, kurung -tutup, titik, koma, titik-dua, titik-koma, seperti enter, spasi, ganti baris, akhir file White Space: pemisah yang diabaikan oleh program,

  Lexical Analysis - Contoh Contoh 1: Lexical Analysis - Contoh fahrenheit := 32 + celcius * 1.8, ada urutan karakter yang disebut dengan statement identifier fahrenheit Maka akan diterjemahkan kedalam token-token seperti dibawah ini integer operator := 32 Identifier celcius operator penjumlahan  +

  Lexical Analysis - Contoh 2 Lexical Analysis - Contoh 2bentuk internal, dan angkanya adalah unik

Setiap bentuk dari token di representasi sebagai angka dalam

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, Lexical Analysis - Contoh 2 Kondisi 3: 26 IF 20A 1 > 15 B THEN 1 C 21 D 1 ; 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

  Syntax Analyzer Pengelompokan token-token kedalam class syntax (bentuk Syntax Analyzer syntax), seperti procedure, Statement dan expression

   mendefinisikan bahasa sumber Grammar : sekumpulan aturan-aturan, untukGrammar dipakai oleh syntax analyser untuk menentukan struktur dari program sumber

  Syntax Analyzer Syntax Analyzer 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

  Contoh Contoh Terdapat statement : ( A + B ) * ( C + D )<factor>, <term> & <expression>

Akan menghasilkan bentuk sintaksis:

  Syntax tree Syntax treetree/ parse tree) beguna untuk Pohon sintaks/ Pohon penurunan (syntax suatu string dengan cara menurunkan menggambarkan bagaimana memperoleh simbol terminal. simbol-simbol variable menjadi simbol-

   B  bB | B A  aA | a Misalnya: S  AB

  Parsing atau Proses Parsing atau Proses

  Penurunan Penurunan Parsing dapat dilakukan dengan cara :Penurunan terkiri (leftmost derivation) : simbol variable yang paling kiri diturunkan (tuntas) dahuluPenurunan terkanan (rightmost derivation): variable yang paling kanan diturunkan (tuntas) dahuluMisalkan terdapat ingin dihasilkan string aabbaa dari A  SbA | ba context free language: S  a AS | a,

Parsing atau Proses Parsing atau Proses Penurunan Penurunan

  S => a A S => a SbA S => a abA S => a aabba S Penurunan kanan : S => aA S => aA a => a SbA a => a Sbba a

  Parsing Parsing Misalnya: S -> aB | bA B -> b | bS | aBB A -> a | aS |bAA

  Metode Parsing Perlu memperhatikan 3 hal: Metode Parsing Penanganan Kesalahan Waktu EksekusiPenanganan Kode Parsing digolongkan menjadi: Top-Down metode ini meliputi: Penelusuran dari root ke leaf atau dari simbol awal ke simbol terminal No backtrack : Recursive Descent Parser Backtrack/backup : Brute Force

  

  Parsing: Brute force Parsing: Brute force Meng-expand simbol non terminal sampai pada simbol terminal Memilih aturan produksi mulai dari kiri Algoritma ini membuat pohon parsing secara top-down, yaitu dengan cara mencoba Bila terjadi kesalahan (string tidak sesuai) maka dilakukan backtrack Contoh suatu language dengan aturan produksi sebagai berikut segala kemungkinan untuk setiap simbol non-terminal A  b | c S  aAd | aB

  Parsing: Brute force 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 aA d a B a B Terjadi kegagalan lagi (iv), dilakukan back-track c c c d

  Parsing: Brute force Parsing: Brute force Kelemahan dari metode-metode brute-force Mencoba untuk semua aturan produksi yang ada sehingga menjadi lambat Mengalami kesukaran untuk melakukan pembetulan kesalahan (waktu eksekusi)  backtrack Memakan banyak memakan memori, dikarenakan membuat backup lokasiGrammar yang memiliki Rekursif Kiri tidak bisa diperiksa, sehingga harus

  Brute force : Contoh Terdapat grammar/tata bahasa G = (V,T,P,S), dimana Brute force : Contoh T= (“i”,”*”,”/” ,”+”,”-”) Simbol Terminal V= (“E”,”T”,”F”) Simbol NonTerminal (variable) String yang diinginkan adalah i * i S=”E” Simbol Awal / Start simbol 1. E  T | T + E | T - E aturan produksi (P) yang dicobakan adalah F  i T  F | F * T | F / T

  Brute force : Contoh Brute force : Contoh T  F | T* F | T / F

  2. E  T | E+T | E-T accept (diterima) F  i  Meskipun ada rekursif kiri, tetapi tidak diletakkan sebagai aturan yang paling kiri T  T* F | T / F | F

  Brute force : Aturan Brute force : Aturan produksi 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 contoh: S  d S  = berupa kumpulan simbol variabel dan terminal bentuk produksi yang rekursif kiri B  ad B contoh: A  A  merupakan produksi rekursif Kiri B  B ad S  S d

  Aturan produksi : Brute Aturan produksi : Brute force force Produksi yang rekursif kanan akan menyebabkan penurunan menyebabkan penurunan tumbuh ke kiri. tumbuh kekanan, Sedangkan produksi yang rekursif kiri akan sebagai berikut:

Contoh: Context free Grammar dengan aturan produksi

  

Aturan produksi : Brute force

Aturan produksi : Brute force

  Dalam Banyak penerapan tata-bahasa, rekursif kiri tidak diinginkan, Untuk menghindari penurunan kiri yang looping, perlu dihilangkan sifat rekursif, dengan langkah-langkah sebagai berikut:  Aturan produksi yang rekursif kiri

Pisahkan Aturan produksi yang rekursif kiri dan yang tidak; misalnya

  A  A 1 | A 2 | ... | A n

  

Aturan produksi : Brute force

Aturan produksi : Brute force

   berikut: lakukan per-ganti-an aturan produksi yang rekursif kiri, sebagai 2 Z  1 | 2 | ... | n

  1. A  1 Z | 2 Z | ... | n Z

  3 Z  1 Z | 2 Z | ... | n Z

  Aturan produksi : Brute Pergantian dilakukan untuk setiap aturan produksi dengan simbol ruas kiri yang sama, bisa muncul Aturan produksi : Brute force force variabel Z1, Z2 dst, sesuai dengan variabel yang menghasilkan rekurisif kiri

  Contoh: Tata Bahasa Context free S  Sab | aSc | dd | ff | SbdS Sab | Sbd Pisahkan aturan produksi yang rekursif kiri Aturan Produksi yang tidak rekursif kiri Ruas Kiri untuk S: 1=ab , 2=bd dari situ didapat untuk Ruas Kiri untuk S: 1 = aSc, 2 = dd, 3= ff S  aSc | dd | ff

  Aturan produksi : Brute Aturan produksi : Brute force force S  Sab | Sbd, dapat digantikan dengan Langkah berikutnya adalah penggantian yang rekursif kiri

  1. S  aScZ1 | ddZ1 | ffZ1 2. Z1  ab | bd 3. Z1  abZ1 | bdZ1

   Berikut: Hasil akhir yang didapat setelah menghilangkan rekursif kiri adalah sebagai S  aScZ1 | ddZ1 | ffZ1 S  aSc | dd | ff

  Z1  ab | bd

  Aturan produksi : Kalau pun tidak mungkin menghilangkan rekursif kiri dalam penyusunan aturan Aturan produksi : Brute force produksi maka produksi rekursif kiri diletakkan pada bagian belakang atau Brute force terkanan, hal ini untuk menghindari looping pada awal proses parsing

   sehingga butuh waktu yang cukup lama serta memerlukan memori yang besar Metode ini jarang digunakan, karena semua kemungkinan harus ditelusuri, untuk penyimpanan stack (backup lokasi backtrack)

   Metode ini digunakan untuk aturan produksi yang memiliki alternatif yang sedikit

Parsing: Recursive Parsing: Recursive Descent Parser Descent Parser

  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 terminalnyaDengan cara penurunan secara recursif untuk semua variabel dari awal sampai ketemu terminalTidak pernah mengambil token secara mumdur (back tracking) Beda dengan turing yang selalu maju dan mundur dalam melakukan parsing

  Aturan Produksi memakai Recursif Descent :  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 Contoh : <program> ::= t_PROG t_ID t_SEMICOL <block> t_DOT Grammar dengan BNF : <statement> ::= t_ID t_ASS <simple exp> | <block> ::= t_BEGIN <statement> {t_SEMICOL <statement>} t_END

t_IF <exp> t_THEN <statement> t_ELSE <statement>

t_IF <exp> t_THEN <statement>| <simple_exp> t_LT <simple_exp>| <exp> ::= <simple_exp> t_EQ <simple exp> | Dst……. <simple_exp> t_GT <simple_exp>

  

Penggalan program untuk

grammar tsb

  Semantics Analyser Semantics Analysersebelumnya, yaitu analisa leksikal (scanning) dan analisa sintaks

Proses ini merupakan proses kelanjutan dari proses kompilasi

Bagian terakhir dari tahapan analisis adalah analisis semantik

(parsing) Proses analisa sintak dan analisa semantik merupakan dua Memanfaatkan pohon sintaks yang dihasilkan dari parsing

proses yang sangat erat kaitannya, dan sulit untuk dipisahkan

Semantics Analyser Semantics Analyser

   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 Semantics Analyser Untuk mengetahui makna, maka routin ini akan memeriksa: Apakah variabel yang ada telah didefinisikan sebelumnyaApakah variabel-variabel tersebut tipenya sama Apakah operand yang akan dioperasikan tersebut ada nilainya,

   dan seterusnya Menggunakan tabel simbolPemeriksaan bisa dilakukan pada tabel identifier, tabel display,

  

Semantics Analyser

Semantics Analyser

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

  

Semantics Analyser

Semantics Analyser

  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 Memperkecil usaha dalam membuat compilator dari sejumlah bahasa ke Intermediate Code

Lebih Machine Independent, hasil dari intermediate code dapat digunakan lagi

sejumlah mesin

Proses Optimasi lebih mudah. Lebih mudah dilakukan pada intermediate code

pada mesin lainnya mesin dari pada program sumber (source program) atau pada kode assembly dan kode  mesin Intermediate code ini lebih mudah dipahami dari pada kode assembly atau kodeKerugiannya adalah melakukan 2 kali transisi, maka dibutuhkan waktu yang

  Intermediate Code Intermediate Code

  Ada dua macam intermediate code yaitu Notasi Postfix dan N-Tuple <Operand> <Operand> < Operator> Notasi POSTFIX Misalnya : ( a +b ) * ( c+d ) maka Notasi postfixnya ab+ cd+ *

  Semua instruksi kontrol program yang ada diubah menjadi notasi postfix, misalnya

  Diubah ke postfix menjadi ; <expr> <label1> BZ <stmt1> <label2> BR < stmt2> BR: melompat tanpa harus ada kondisi yang ditest BZ : Branch if zero (salah)

Contoh : IF a > b THEN c := d ELSE c := e Contoh : IF a > b THEN c := d ELSE c := e Dalam bentuk Postfix 11 a 19 13 > 21 BR 12 b 20 25 15 BZ 23 e 14 22 22 c 17 d 25 16 c 24 :=

  POSTFIX Contoh: WHILE <expr> DO <stmt>

POSTFIX

Instruksi : a:= 1

Diubah ke postfix menjadi ; <expr> <label1> BZ <stmt> <label2> BR

Dalam bentuk Postfix WHILE a < 5 DO a := a + 1 12 := 20 1 11 1 19 a 10 a 18 a 15 < 23 13 14 5 22 := 13 a 21 + 17 BZ 25 16 25 24 BR

  Notasi pada triple dengan format TRIPLES NOTATION Contoh: <operator> <operand> <operand> Jika dibuat intermidiate code triple: A := D * C + B / E 2. /, B, E 1. * , D, C 4. :=, A, (3) 3. +, (1), (2) pengurangan pembagian mendapatkan prioritas lebih dahulu dari oada penjumlahan dan Perlu diperhatikan presedensi (hirarki) dari operator, operator perkalian dan

  

TRIPLES NOTATION

Contoh lain:

TRIPLES NOTATION

IF X > Y THEN X := a + b ELSE X := a - b Intermidiate code triple: 1. >, X, Y 3. -, a, b