Komponen sebuah Kompilator

32
1 Komponen sebuah Kompilator Program Subjek Penganali sis Leksikal (Scanner) Penganali sis Sintaks (Parser) Penganali sis Semantik Pembentuk Kode Pengoptim al Kode TABEL Program Objek ANALISIS SINTESIS

description

Program Subjek. Program Objek. ANALISIS. SINTESIS. Penganalisis Leksikal (Scanner). Penganalisis Sintaks (Parser). Penganalisis Semantik. Pembentuk Kode. Pengoptimal Kode. TABEL. Komponen sebuah Kompilator. Scanning. - PowerPoint PPT Presentation

Transcript of Komponen sebuah Kompilator

Page 1: Komponen sebuah Kompilator

1

Komponen sebuah Kompilator

Program

Subjek

Penganalisis Leksikal (Scanner)

Penganalisis Sintaks (Parser)

Penganalisis

Semantik

Pembentuk Kode

Pengoptimal Kode

TABEL

Program Objek

ANALISIS SINTESIS

Page 2: Komponen sebuah Kompilator

2

Scanning

Scanning termasuk ke dalam analisis lexical, yaitu proses untuk mengidentifikasi satuan terkecil dari Bahasa, yang disebut Token / Terminal / Daun (identifier, keyword,label, operator aritmetika dan assignment, operator relasional, tanda baca, dsb)

Aspek dalam Scanner : Bagaimana bentuk dan penyajian Token. Metode yang

digunakan Grammar Regular dan Ekspresi Regular

Pengenalan Token. Metode yang digunakan Automata Hingga, dengan penyajian menggunakan Diagram Transisi

Page 3: Komponen sebuah Kompilator

3

Scanning (cont.)

Scanner berinteraksi dengan Parser, dengan cara : Scanner mengolah Program Source secara

terpisah sebagai satu fase, dimana token disimpan dalam sebuah tabel sebelum Parser bekerja

Scanner berinteraksi dengan Parser, dimana scanner dipanggil oleh parser bila token dalam program source diperlukan

Page 4: Komponen sebuah Kompilator

4

Automata Hingga (AH) Automata Hinga (AH) / Finite state Automaton (FA) adalah suatu struktur abstrak yang didefinisikan, terdiri dari :

1. Himpunan Hingga A berisi simbol Input2. Himpunan Hingga S berisi State (internal state)3. Himpunan Hingga Z berisi simbol output4. Sebuah fungsi f: S x Z S, disebut fungsi next state5. Sebuah fungsi g: S x A Z, disebut fungsi output

AH berhubungan dengan Regular Grammar

Jenis AH :1. AH Determinstik (AHD)2. AH Non Deterministik (AHN)3. AHN dengan transisi untai hampa

Page 5: Komponen sebuah Kompilator

5

Automata Hingga Deterministik (AHD)

Automata Hinga Deterministik (AHD) didefinisikan dengan 5 tupel

1. Himpunan Hingga internal state (S)2. Himpunan Hingga simbol input (V)3. Sebuah fungsi f: S x V S ; merupakan fungsi next

state4. State awal (q0 S)

5. Himpunan hingga state penerima S

AHD sering digambarkan dengan cara : Table Transisi State Transisi Digraph

Page 6: Komponen sebuah Kompilator

6

Automata Hingga Deterministik (AHD) (cont.)

Contoh : Diketahui AHD dengan 2 simbol input dan 3 state,

1. V = { a,b}2. S = { q0, q1, q2)3. T = {q0, q1} state penerima4. q0 sebagai state awal5. Fungsi next state didefinisikan f:(S,V)

input

f

a b

q0 q0 q1

q1 q0 q2

q2 q2 q2

Page 7: Komponen sebuah Kompilator

7

Automata Hingga Deterministik (AHD) (cont.)

q2q0 q1

a

a

b b a

b

Periksalah string berikut :

1. abaq0 q0 q1 q0 (diterima)

2. aabbaaq0 q0 q0 q1 q2 q2 q2

(ditolak, state penerima yang ditentukan adalah q0 dan q1, bukan q2)

Page 8: Komponen sebuah Kompilator

8

Automata Hingga Deterministik (AHD) (cont.)

Contoh : Identifikasi Integer String

Grammar : <integer> ::= <digit> | <integer><digit>

inputstate

d d

START INTEGER -

INTEGER INTEGER OUT

OUT (Accept)

Start Integer OUTdelimetersd

d

Page 9: Komponen sebuah Kompilator

9

Automata Hingga Deterministik (AHD) (cont.)

Contoh : Identifikasi Identifier String

<identifier> ::= <letter>|<identifier><letter>|<identifier><digit>

Start Identifier<letter>

<letter>

<digit>

Error

<digit>

Page 10: Komponen sebuah Kompilator

Lexical Analysis (scanner) - Lexical Analysis (scanner) - berhubungan dengan bahasaberhubungan dengan bahasa

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)

Page 11: Komponen sebuah Kompilator

Lexical Analysis ( Lexical Analysis ( Besaran Besaran leksikal )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 sebagainyaOperator; 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

Page 12: Komponen sebuah Kompilator

Lexical Analysis - ContohLexical Analysis - ContohContoh 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 13: Komponen sebuah Kompilator

Lexical Analysis - Contoh 2Lexical 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 14: Komponen sebuah Kompilator

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 15: Komponen sebuah Kompilator

Syntax Analyzer Syntax Analyzer ((Parsing)

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

Page 16: Komponen sebuah Kompilator

Syntax AnalyzerSyntax 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 analyser akan mengambil aksi apa yang harus dilakukan

Page 17: Komponen sebuah Kompilator

ContohContoh Terdapat statement : ( A + B ) * ( C + D )

Akan menghasilkan bentuk sintaksis:

<factor>, <term> & <expression>

Page 18: Komponen sebuah Kompilator

Syntax treeSyntax treePohon 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 19: Komponen sebuah Kompilator

Parsing atau Proses Parsing atau Proses PenurunanPenurunanParsing 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 20: Komponen sebuah Kompilator

Parsing atau Proses Parsing atau Proses PenurunanPenurunan

Penurunan kiri :

S => aAS

=> aSbAS

=> aabAS

=> aaabbaS

=> aabbaa

Penurunan kanan :

S => aAS

=> aAa

=> aSbAa

=> aSbbaa

=> aabbaa

Page 21: Komponen sebuah Kompilator

ParsingParsing

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 22: Komponen sebuah Kompilator

Metode ParsingMetode ParsingPerlu memperhatikan 3 hal:

Waktu Eksekusi Penanganan Kesalahan Penanganan 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

Page 23: Komponen sebuah Kompilator

23

Parsing

Parsing adalah konsturksi atau pembentukan Pohon Sintaks untuk suatu kalimat (ekspresi)

Bila terdapat lebih dari satu pohon sintaks untuk sebuah grammar maka dikatakan grammar tersebut Ambiguous.

Dua cara melakukan validitas sintaks dengan parsing : TOP DOWN Parsing : melakukan derivasi string dari

NT BOTTOM UP Parsing : melakukan reduksi simbol ke

NT

Page 24: Komponen sebuah Kompilator

24

Parsing Top Down

Jika adalah input string, maka derivasi dari Top Down Parse dapat ditunjukkan sebagai berikut :

S … … … Parse Tree untuk Top Down Parsing selalu dimulai dari sebelah kiri

S

NT11 NT12NT1n…….

NT21t

1

2

3

Page 25: Komponen sebuah Kompilator

25

Parsing Top Down (cont.)

Contoh : Parsing Top Down untuk identifier x2 Derivasinya :<identifier> <identifier><digit> <letter><digit> x <digit> x2

a. <identifier>

<identifier> <digit>

<identifier> <identifier> <digit>

<identifier>

<letter>

<identifier> <digit>

<identifier>

<letter>

x

<identifier> <digit>

<identifier>

<letter>

x

2

b

dc e

Page 26: Komponen sebuah Kompilator

26

Parsing Top Down (cont.)

Contoh : ekspresi a + b * c grammar : E ::= T + E | TT ::= V * E | VV ::= <id>

Prediction

Prediction Sentential Form

ET+ETVV<id>ETTV*TV <id>T VV <id>

T+EV+E<id>+E<id>+T<id>+V*T<id>+<id>*T<id>+<id>*V<id>+<id>*<id>

E

T + E

V

id

T

V * T

id V

id

Page 27: Komponen sebuah Kompilator

27

Parsing Bottom Up Parsing Bottom Up membangun pohon sintaks melalui urutan simbol yang direduksi, atau dimulai dengan sebuah string hingga mencapai simbol start Grammar

Contoh : diketahui identifier x2, dengan parsing bottom up menjadi :

a x2

x 2 x 2

<letter>

<letter>2b

x 2

<letter>

<identifier>

<identifier>2c

x 2

<letter>

<identifier>

<digit>

<identifier><digit>d

x 2

<letter>

<identifier>

<digit>

<identifier>

<identifier>e

Page 28: Komponen sebuah Kompilator

28

Relasi Preseden dan Pemakaiannya

Teknik parsing pada metode Bottom-Up dilakukan dengan mencari berulang-ulang, handle (leftmost simple phrase) u dari bentuk sentensial saat itu dan mereduksinya menjadi suatu nonterminal U dnegan memakai reduksi U u

Jadi tujuan utamanya adalah mencari Handle dari sebuah bentuk sentensial yaitu simple phrase terkiri (leftmost) dari bentuk sentensial tersebut.

Masalah tersebut diselesaikan dengan Grammar Preseden

Page 29: Komponen sebuah Kompilator

29

Misal, R dan S berada dalam suatu grammar G. Beberapa bentuk sentensial dapat dibentuk dari simbol R dan G tersebut (…RG…..). Ada tiga kemungkinan yang timbul dalam handle yang dibuat dari R dan S.

R adalah bagian dari suatu handle tapi S tidak (R S) dikatakan R > S (R memiliki Preseden atas S). R harus merupakan ekor dari beberapa produksi U …R. Karena handle berada di kiri S,maka S harus merupakan

terminal

Relasi Preseden dan Pemakaiannya (cont.)

U

RS….….. ………..

handle

Page 30: Komponen sebuah Kompilator

30

R dan S keduanya adalah bagian dalam suatu handle (R S) dikatakan R dan S memiliki Preseden yang sama, dan

harus direduksi secara bersamaan waktu Harus ada suatu produksi U …RS...

Relasi Preseden dan Pemakaiannya (cont.)

U

..….….. … RS..

handle

…. ….

3. S adalah bagian dari suatu handel, tetapi R tidak (S R) dikatakan R < S S merupakan kepala dari beberapa produksi U S…..

U

…….…R S ………..

handle

Page 31: Komponen sebuah Kompilator

31

Contoh : Diketahui, Grammar dengan simbol Start Z dan produksi :Z bMb

M (L | aL Ma)

Berikut ini akan ditunjukkan bentuk sentensial, phon sintaks,handel dari relasi yang dapat diturunkan dari produksi.

Bentuk sentensial : babPohon Sintaks :

Relasi Preseden dan Pemakaiannya (cont.)

Z

b

a

bM

Handel : aRelasi yang diberikan Pohon : b a

a b

Page 32: Komponen sebuah Kompilator

32

Bentuk sentensial : b(LbPohon Sintaks :

Relasi Preseden dan Pemakaiannya (cont.)

Handel : (L

Relasi yang diberikan Pohon : b (

( L

L b

Z

b

(

bM

L

Bentuk sentensial : b(Ma)bPohon Sintaks : Z

b

(

bM

L

M a )

Handel : Ma)

Relasi yang diberikan Pohon : b (

( L

L b