Top Banner
1 ANALISIS LEKSIKAL ANALISIS LEKSIKAL ANALISIS LEKSIKAL ANALISIS LEKSIKAL Dr. Nidjo Sandjojo, M.Sc 2.1 Teknik Kompilasi BAB 2. ANALISIS LEKSIKAL à PERAN PENGANALISIS LEKSIKAL à INPUT BUFFERING à SPESIFIKASI TOKEN à PENGENALAN TOKEN à SATU BAHASA UNTUK PENENTUAN (SPECIFYING) PENGANALISIS LEKSIKAL à FINITE AUTOMATA Dr. Nidjo Sandjojo, M.Sc 2.2 Teknik Kompilasi à DARI EKSPRESI REGULAR KE NFA à RANCANGAN PEMBENTUK PENGANALISIS LEKSIKAL à PENGOPTIMASIAN POLA BERDASARKAN-DFA
22

module-02

Nov 14, 2015

Download

Documents

tentang analisi leksikal
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 1ANALISIS LEKSIKALANALISIS LEKSIKALANALISIS LEKSIKALANALISIS LEKSIKAL

    Dr. Nidjo Sandjojo, M.Sc2.1Teknik Kompilasi

    BAB 2. ANALISIS LEKSIKAL

    PERAN PENGANALISIS LEKSIKAL INPUT BUFFERING SPESIFIKASI TOKEN PENGENALAN TOKEN SATU BAHASA UNTUK PENENTUAN (SPECIFYING)

    PENGANALISIS LEKSIKAL

    FINITE AUTOMATA

    Dr. Nidjo Sandjojo, M.Sc2.2Teknik Kompilasi

    DARI EKSPRESI REGULAR KE NFA RANCANGAN PEMBENTUK PENGANALISIS LEKSIKAL PENGOPTIMASIAN POLA BERDASARKAN-DFA

  • 2PERAN PENGANALISIS LEKSIKAL

    source L i ltoken parseget

    next token

    source program Lexical

    Analyzer

    ptreeParser

    Dr. Nidjo Sandjojo, M.Sc2.3Teknik Kompilasi

    Symbol Table

    SOURCE

    CharactersTokens

    PARSERLEXERSOURCE

    TEXT

    Dr. Nidjo Sandjojo, M.Sc2.4Teknik Kompilasi

  • 3PERAN PENGANALISIS LEKSIKAL

    PERAN PENGANALISIS LEKSIKAL ADALAH:

    Membaca karakter input & menghasilkan token Menghilangkan komentar dan ruang kosong Menghubungkan antara pesan kesalahan yang diperoleh

    kompilator dengan program sumber

    Mengenali identifier dan keyword Identifier = variables, arrays, function, etc , token

    Dr. Nidjo Sandjojo, M.Sc2.5Teknik Kompilasi

    Identifier variables, arrays, function, etc., token Keyword = fixed characters: begin, end, if, etc.

    ALASAN PEMISAHAN PHASE ANALISIS

    Phase Analysis dipisah menjadi dua, yaitu: Lexical Analyzer dan Syntax Analyzer dengan alasan:

    Penyederhanaan rancangan Efisiensi kompilator lebih baik Portabilitas kompilator meningkat

    Dr. Nidjo Sandjojo, M.Sc2.6Teknik Kompilasi

  • 4TOKEN, LEXEME dan PATTERN

    Lexeme Pattern Token Suatu rangkaian k kt d

    Peraturan yang j l k t

    Merupakan rangkaian k kt d l tkarakter pada

    program sumber yang cocok atau sesuai dengan pola (pattern) untuk memben-tuk satu token.

    menjelaskan set lexeme yang dapat merepresentasikan satu token tertentu dalam program sumber. Satu set string input

    yang dijelaskan oleh

    karakter yang dalam satu kesatuan memiliki arti tersendiri, dapat berupa: kata kunci (key word),

    operator, identifier constant, rangkaian huruf (literal string); simbol baca (function

    Dr. Nidjo Sandjojo, M.Sc2.7Teknik Kompilasi

    satu peraturan. Harus cocok (match)

    dengan setiap string yang ada dalam set tersebut.

    symbol) misalnya: tanda kurung, koma, titik koma, dan sebagainya.

    TOKEN, LEXEME dan PATTERN

    TOKEN SAMPLE LEXEMES INFORMAL DESCRIPTION OF PATTERN

    const const const

    if if if

    relation = < or or =

    id pi, count, D2 letter followed by letters and digits

    num 3 1416 0 6 02E23 any numeric constant

    Dr. Nidjo Sandjojo, M.Sc2.8Teknik Kompilasi

    num 3.1416, 0, 6.02E23 any numeric constant

    literal "core dumped" any character between " and " except "

  • 5ATTRIBUTE UNTUK TOKEN

    Bila terdapat lebih dari satu pattern yang sesuai dengan satu lexeme, lexical analyzer harus melengkapi informasi tambahan tentang lexeme mana yang dimaksud atau yang sesuai dengantentang lexeme mana yang dimaksud atau yang sesuai dengan phase berikutnya dari kompiltor.

    Token biasanya hanya mempunyai satu atribut yaitu POINTER yang disimpan dalam tabel simbol.

    Dr. Nidjo Sandjojo, M.Sc2.9Teknik Kompilasi

    ATTRIBUTE UTK TOKEN

    CONTOH:

    Pattern num cocok untuk string 0 dan 1, sedangkan code generator harus tahu string mana yang dimaksud, misalnya

    E = M *C**2 akan ditulis berpasangan sbb:

    Dr. Nidjo Sandjojo, M.Sc2.10Teknik Kompilasi

  • 6KESALAHAN LEKSIKAL

    Hanya sedikit kesalahan leksikal (lexical errors) yang dapat dilihat di phase lexical analyzer karena phase ini mempunyai pandangan yang sempit pada program sumberpandangan yang sempit pada program sumber

    Misal; fi(a = = f(x)) dalam bahasa C, maka lexical analyzertidak dapat menjelaskan apa fi tersebut betul sebagai identifieratau salah eja yang seharusnya adalah if

    Dr. Nidjo Sandjojo, M.Sc2.11Teknik Kompilasi

    KESALAHAN LEKSIKAL (Contd)

    KEMUNGKINAN PEMULIHAN KESALAHAN

    Menghapus karakter yang berlebihan Memasukkan karakter yang diduga hilang Menganti karakter yang diduga salah dengan yang benar Menukar letak dari dua karakter yang berdekatan

    Dr. Nidjo Sandjojo, M.Sc2.12Teknik Kompilasi

  • 7INPUT BUFFERING

    Tiga pendekatan umum untuk mengimplementasikan suatu Penganalysis Leksikal (Lexical Analyzer).1 Gunakan pembentuk lexical analyzer seperti kompilator Lex1. Gunakan pembentuk lexical-analyzer seperti kompilator Lex

    untuk menghasilkan penganalisis leksikal dari satu spesifikasi berdasarkan ekspresi reguler.

    2. Menulis lexical analyzer dengan satu sistem bahasa pemrograman konvensional, menggunakan fasilitas I/O untuk membaca input.

    3. Menulis lexical analyzer dengan bahasa assembly dan secara

    Dr. Nidjo Sandjojo, M.Sc2.13Teknik Kompilasi

    y g yekplisit mengatur pembacaan input.

    INPUT BUFFERING (Contd) BUFFER PAIRS

    Satu buffer dibagi menjadi dua bagian

    Dr. Nidjo Sandjojo, M.Sc2.14Teknik Kompilasi

    Jumlah karakter tiap bagian = 1024 (210) atau 4096 (4 X 210) yang merupakan N

    N karakter tersebut dibaca sekaligus untuk ditempatkan di tiap setengah buffer-nya

  • 8INPUT BUFFERING (Contd)

    SENTINEL

    The sentinel is a special character that cannot be part of the source program, and a natural choice is eof.

    Dr. Nidjo Sandjojo, M.Sc2.15Teknik Kompilasi

    SPESIFIKASI TOKEN

    STRINGS & LANGUAGE:

    String adalah satu rangkaian simbol dari alphabet (finite sequence of symbols).

    Kalimat dan kata sering disebut string Panjang string: S |S|; Contoh: banana: |S|=6, String kosong = , sehingga |S|=0,

    Dr. Nidjo Sandjojo, M.Sc2.16Teknik Kompilasi

    Language adalah setiap set dari string pada suatu alphabet yang tetap (set of strings)

  • 9OPERASI PADA BAHASA Terdapat beberapa operasi penting yang dapat diterapkan pada

    bahasa (languages).

    Khusus untuk lexical analysis: union, concatenationKhusus untuk lexical analysis: union, concatenation(rangkaian), closure (pengakhiran/penutupan), exponentiation operator.

    Misal; L sebagai himpunan {A,B, Z,a,b,z} dan D sebagai himpunan {0,1,2,9}1. LD = himpunan huruf dan angka.2. LD = himpunan string terdiri dari satu huruf diikuti oleh satu angka.

    Dr. Nidjo Sandjojo, M.Sc2.17Teknik Kompilasi

    3. L4 = himpunan string 4 huruf.4. L* = himpunan string huruf-huruf termasuk string .5. L(LD)* = himpunan semua string huruf dan angka yang dimulai

    dengan huruf.6. D+ = himpunan semua string angka (satu atau lebih).

    OPERASI PADA BAHASA (Contd)

    OPERASI DEFINISI

    L M { | di L t M} Union (gabungan) L dan M L M = {s | s di L atau M}

    LM = {st | s di L dan t di M}

    L* = Li L* = penyambungan

    i=0 nol atau lebih L

    Union (gabungan) L dan Mditulis L M Sambungan L dan M

    ditulis LM Penutup Kleene L

    ditulis L*

    Dr. Nidjo Sandjojo, M.Sc2.18Teknik Kompilasi

    L+ = Li L+ = penyambungan

    i=1 satu atau lebih L

    ditulis L Penutup Positif L

    ditulis L+

  • 10

    EKSPRESI BERATURAN

    Identifier = satu set string dari huruf-huruf dan angka-angka yang dimulai dengan huruf atau satu huruf diikuti 0 atau huruf-huruf atau angka (digit). g ( g )

    Suatu ekspresi beraturan (regular expression = RE) dibentuk berdasarkan ekspresi beraturan lain yang lebih sederhana.

    Contoh notasi RE: letter(letter|digit)*. Garis tegak berarti atau, tanda kurung digunakan untuk mengelompokkan ekspresi bagian, dan tanda * artinya adalah nol atau lebih kali dari ekspresi yang diberi kurung

    Dr. Nidjo Sandjojo, M.Sc2.19Teknik Kompilasi

    kurung.

    Satu bahasa yang ditunjukkan oleh satu ekspresi beraturan disebut REGULAR SET.

    EKSPRESI BERATURAN (Contd)

    Regular definitions adalah satu urutan dari bentuk : d1 r1

    d2 r2 ... dn rn

    d = nama r = regular expression

    Dr. Nidjo Sandjojo, M.Sc2.20Teknik Kompilasi

  • 11

    EKSPRESI BERATURAN (Contd)

    Non-Regular Sets (himpunan tidak beraturan). Ada bahasa yang tidak dapat dijelaskan dengan regular expression. Ekspresi beraturan tidak dapat digunakan untuk menyatakan bentuk Ekspresi beraturan tidak dapat digunakan untuk menyatakan bentuk

    yang seimbang atau terulang. Misalnya himpunan dari semua rangkaian tanda kurung yang

    seimbang tidak dapat dinyatakan oleh suatu ekspresi beraturan, tetapi dapat dinyatakan dalam suatu tata bahasa bebas konteks (Context Free Grammar (CFG)).

    Rangkaian yang berulang tidak dapat dinyatakan oleh ekspresi

    Dr. Nidjo Sandjojo, M.Sc2.21Teknik Kompilasi

    g y g g p y pberaturan.

    Contoh: {wcw|w adalah rangkaian dari a dan b} tidak dapat dinyatakan sebagai suatu ekspresi beraturan, dan juga tidak dapat dinyatakan dengan tata bahasa bebas konteks.

    EKSPRESI BERATURAN (Contd)

    CONTOH:

    Misal: = {a,b} RE: a|b; yaitu himpunan {a,b} RE: (a|b) (a|b); yaitu himpunan {aa,ab,ba,bb} atau untuk

    RE: aa|ab|ba|bb

    RE: a*; yaitu himpunan string atau beberapa a, yaitu himpunan {, a, aa, aaa, }

    Dr. Nidjo Sandjojo, M.Sc2.22Teknik Kompilasi

    RE: (a|b)*; yaitu himpunan semua string yang terdiri dari atau a atau b. Sama dengan RE: (a*b*)*

    RE: a|a*b; yaitu himpunan a atau {, a, aa, aaa, } diikuti oleh b.

    a*

  • 12

    PENGENALAN TOKEN

    Misal: penggalan tata bahasa sebagai berikut:stmt if exp then stmt

    | if exp then stmt else stmt| if exp then stmt else stmt|

    exp term relop term| term

    term id| num

    Dr. Nidjo Sandjojo, M.Sc2.23Teknik Kompilasi

    PENGENALAN TOKEN (Contd)

    Terminal-terminal tersebut diatas yaitu: if, then, else, relop, id dan num membentuk himpunan rangkaian (string) yang diberikan oleh definisi beraturan sebagai berikut:gif ifthen thenelse elserelop < | | >=id letter(letter|digit)*num digit+( digit+)?(E(+|-)?digit+)?

    Dr. Nidjo Sandjojo, M.Sc2.24Teknik Kompilasi

    num digit (.digit+)?(E(+|-)?digit+)? Lexical analyzer akan mengenali keywords if, then, else serta

    lexeme yang dinyatakan oleh relop, id dan num.

    Keywords adalah kata-kata reserved yang tidak dapat digunakan sebagai identifier (id).

  • 13

    MENGHILANGKAN WHITE SPACE

    Lexical analyzer akan menghilangkan white space (i.e., blanks, tabs, new lines) dengan menggunakan regular definitionsebagai berikut:sebagai berikut: delim blank|newline|tab ws delim

    Sehingga apabila menemukan pola yang cocok dengan ws, maka lexical analyzer tidak akan memberikan token kepada parser tetapi akan melanjutkan mencari character lain setelah

    Dr. Nidjo Sandjojo, M.Sc2.25Teknik Kompilasi

    white space tersebut.

    TRANSITION DIAGRAM (TD)

    Sebagai langkah antara di dalam membentuk lexical analyzer, dibuatlah satu transition diagram.

    TD atau diagram peralihan adalah stylized flowchart (bagan alir) yang dibentuk sebagai langkah antara dalam pembentukan token pada lexical analyzer.

    TD tersebut menggambarkan aksi yang dilakukan bila Lexical Analyzer dipanggil oleh pengurai utk memperoleh token berikutnya (get next token).

    Dr. Nidjo Sandjojo, M.Sc2.26Teknik Kompilasi

    y (g )

  • 14

    TRANSITION DIAGRAM (Contd)

    Dr. Nidjo Sandjojo, M.Sc2.27Teknik Kompilasi

    Catatan: state edge (sisi) accepting state pointer tanda dapat mundur *

    :

    :

    ::

    TRANSITION DIAGRAM (TD)

    Contoh: TD utk pattern > atau >= Pembacaan dimulai dari state 0, membaca karakter berikutnya yaitu >

    utk menuju ke state 6utk menuju ke state 6. Bila yg dibaca benar > maka lanjut, bila bukan maka akan gagal

    mengenali pattern > atau >=. Dari state 6 karakter yg akan dibaca adalah = utk menuju ke state 7. Bila yg dibaca benar = maka berhasil mengenali pola >= bila bukan =

    maka akan menuju ke state 8.

    Dr. Nidjo Sandjojo, M.Sc2.28Teknik Kompilasi

  • 15

    A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (1)

    Ada piranti (tool) khusus yang lazim digunakan utk menentukan lexical analyzers yaitu Lex Compiler dengan inputnya Lex Language.inputnya Lex Language.

    Penggunaannya sebagai berikut: Lihat Fig. 3.17 a.out adalah object program yg merupakan lexical analyzer

    yang dapat merobah rangkaian input menjadi token

    Lex specifications. Program lex terdiri dari 3 bagian :

    Dr. Nidjo Sandjojo, M.Sc2.29Teknik Kompilasi

    p f g g1. Deklarasi (Declarations)2. Aturan Translasi (Translation Rules) 3. Prosedur Tambahan (Auxiliary Procedures)

    A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (2)

    Dr. Nidjo Sandjojo, M.Sc2.30Teknik Kompilasi

  • 16

    %{/* definitions of manifest constantsLT, LE, EQ, NE, GT, GE,

    A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (3)

    IF, THEN, ELSE, ID, NUMBER, RELOP */%}

    /* regular definitions */delim [ \t\n]ws {delim}+letter [A-Za-z]

    Dr. Nidjo Sandjojo, M.Sc2.31Teknik Kompilasi

    letter [A Za z]digit [0-9]id {letter}({letter}|{digit})*number {digit}+(\.{digit}+)?(E[+\-]?{digit}+)?%%

    {ws} {/* no action and no return */}if {return(IF);}then {return(THEN);}

    A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (4)

    else {return(ELSE);}{id} {yylval = install_id(); return(ID);}{number} {yylval = instalI_num(); return(NUMBER);}"" {yylval = GT; return(RELOP);}">=" {yylval = GE; return(RELOP);}%%

  • 17

    install_id() {/* procedure to install the lexeme, whosefirst character is pointed to by yytext and

    A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (5)

    p y yywhose length is yyleng, into the symbol tableand return a pointer thereto */

    }install_num() {

    /* similar procedure to install a lexeme thatis a number */

    Dr. Nidjo Sandjojo, M.Sc2.33Teknik Kompilasi

    }

    Fig. 3.18. Lex program for the tokens of Fig. 3.10.

    A LANGUAGE for SPECIFYING LEXICAL ANALYZERS (6)

    Dr. Nidjo Sandjojo, M.Sc2.34Teknik Kompilasi

  • 18

    FINITE AUTOMATA (1)

    Recognizer suatu bahasa; program yang mengambil string xsebagai input dan menjawab yes bila x adalah kalimat dari bahasa tersebut dan menjawab no bila sebaliknyabahasa tersebut, dan menjawab no bila sebaliknya.

    Regular expression di compile menjadi recognizer dengan membentuk diagram peralihan disebut finite automata(otomata berhingga).

    Finite Automata; dua macam :1. DETERMINISTIC Finite Automata (DFA)

    Dr. Nidjo Sandjojo, M.Sc2.35Teknik Kompilasi

    1. DETERMINISTIC Finite Automata (DFA)2. Non-DETERMINISTIC Finite Automata (NFA)

    FINITE AUTOMATA (2)

    Persamaan DFA & NFA Dapat mengenali pola ekspresi beraturan dengan tepat.

    PerbedaanDFA NFA

    Menghasilkan pengenal lebih cepat.

    Menghasilkan pengenal lebih lambat.

    Dr. Nidjo Sandjojo, M.Sc2.36Teknik Kompilasi

    Ukuran DFA lebih besar untuk hal yg sama.

    Ukuran NFA lebih kecil untuk hal yang sama.

  • 19

    NON-DETERMINISTIC FINITE AUTOMATA (NFA)

    NFA= model matematika yg terdiri dari:1. Satu set state S.2 S t t b l i t ( l h b t i b l i t)2. Satu set symbol input (alphabet simbol input).3. Fungsi transisi move yang memetakan pasangan state-simbol ke

    dalam himpunan state.4. Satu state S0 yg dinyatakan sebagai state awal (start/initial

    state).5. Satu set state F yg dinyatakan sebagai state penerima/ akhir

    ( ti /fi l t t )

    Dr. Nidjo Sandjojo, M.Sc2.37Teknik Kompilasi

    (accepting/final state).

    NFA dapat direpresentasikan dalam bentuk bagan sebagai suatu grafik yang berlabel disebut Transition Graph, dengan nodesebagai state dan sisi berlabel menyatakan fungsi transisi.

    NON-DETERMINISTIC FINITE AUTOMATA (Contd)

    Transition graph untuk mengenali bahasa (a|b)*abb

    Dr. Nidjo Sandjojo, M.Sc2.38Teknik Kompilasi

    Catatan:set state = {0,1,2,3} state awal = state 0set simbol input = {a,b} state penerima = state 3

  • 20

    NON-DETERMINISTIC FINITE AUTOMATA (Contd)

    NFA Memungkinkan terjadi lebih dari satu transisi (simbol)

    yang keluar dari satu state untuk input yang samayang keluar dari satu state untuk input yang sama Dapat dijelaskan dengan Graph Representation yang

    implementasinya dengan menggunakan Tabel Peralihan (Transition table).

    Row = State Column = input symbol (boleh )

    Dr. Nidjo Sandjojo, M.Sc2.39Teknik Kompilasi

    Contoh: Fig 3.19 Fig 3.20

    NON-DETERMINISTIC FINITE AUTOMATA (Contd)

    Dr. Nidjo Sandjojo, M.Sc2.40Teknik Kompilasi

  • 21

    NON-DETERMINISTIC FINITE AUTOMATA (Contd)

    Dr. Nidjo Sandjojo, M.Sc2.41Teknik Kompilasi

    NON-DETERMINISTIC FINITE AUTOMATA (Contd)

    Transition table for the finite automaton aa*|bb* NFA: aa*|bb*

    StateInput Symbols

    a b0 {1,3} - -

    1 - {2} -

    Dr. Nidjo Sandjojo, M.Sc2.42Teknik Kompilasi

    2 - {2} -

    3 - - {4}

    4 - - {4}

  • 22

    DETERMINISTIC FINITE AUTOMATA (DFA)

    DFA adalah kasus khusus NFA yang :1. Tidak ada state dengan transisi ; yaitu transisi input &2. Untuk setiap state s dan simbol input a hanya ada paling

    banyak satu sisi berlabel a yang meninggalkan state s.

    Bila menggunakan transition table untuk merepresentasikan fungsi transisi DFA, setiap entry pada transition table adalah single input.

    Dr. Nidjo Sandjojo, M.Sc2.43Teknik Kompilasi

    DFA untuk mengenali bahasa (a|b)*abb, yang inputnya (string) dibaca ababb mengikuti urutan state 0,1,2,1,2,3 sbb: Fig 3.23

    DETERMINISTIC FINITE AUTOMATA (Contd)

    Dr. Nidjo Sandjojo, M.Sc2.44Teknik Kompilasi