510 likes | 735 Views
Konsep dan Notasi Bahasa. Pokok Bahasan. Pengantar Kompilasi Perancangan Bahasa Pemrograman Konsep dan Notasi Bahasa Analisis Leksikal Analisis Sintaksis Analisis Semantik Kode Antara Pembangkitan Kode Penanganan Kesalahan Teknik Optimasi Tabel Informasi. MODEL KOMPILATOR.
E N D
Pokok Bahasan • Pengantar Kompilasi • Perancangan Bahasa Pemrograman • Konsep dan Notasi Bahasa • Analisis Leksikal • Analisis Sintaksis • Analisis Semantik • Kode Antara • Pembangkitan Kode • Penanganan Kesalahan • Teknik Optimasi • Tabel Informasi
BeberapaFaktorpentingseseorangmemilihbahasapemrograman: • Sintak • Editor • Dokumentasi • Performa • Library • Fleksibilitas • Komunitas • Popularitas
SINTAKS • Infiks: Notasiumumdalamekspresimatematika, operator diletakkandiantaradua operand(subjekdanobjek). Kelemahannyamembutuhkantandakurungdalammenentukanmanadahuluuntukdikerjakan. • Prefiks:Notasi yang umumbagikomputer, operator didepanoperand.Operatorinidigunakanolehbahasa LIPS. Tidakperlutandakurung, cukupdenganhirarkidari tree operasi yang di parser. • Postfiks: Operator dilakukansetelah operand. Notasiinilebihmudahdiimplementasimenggunakan stack(tumpukan).
Contohnotasi yang ambigu void main() { int *bil1, bil2; int *bil3=&bil2; //’*’ tidakdibenarkan *bil3=&bil2; //benardengan ‘*’ }
Contohnotasi yang ambigu If(data != newd) if(data >newd) if(right) insert(newd,right); else if(data<newd) //milik if sebelumnya if(left) insert(newd,left); Else if(data=newd) insert(newd,mid);//milik if pertama
BENTUK INTERNAL SOURCE PROGRAM • Dalammenterjemahkanbahasapemrogramanmakakompilerakanmembentukrepresentasi internal yang berupa: • BentukKuadruple • Merupakansuatuperintahtigaalamatdanmerupakansuatuhasildalambentukkodesumber yang dihasilkanolehanalisasemantik.
BentukUmum: • <operator>,<operand1>,<operand2>,<result> • dimana: <operand1> dan <operand2> sebagaiargumen. • <result> sebagaitempatpenyimpanansementaradarihasilargumen.
Contoh: • A * B + C * D (A-B) / (C-D) • maka: maka: • *, A, B, T1 -, A, B, T1 • *, C, D, T2 -, C, D, T2 • +, T1, T2, T3 /, T1, T2, T3
Contoh : Ekspresi : (A+B) * (C+D) Bentuk intermediate darikodesumberberbentukkuadrupelseperti ( + , A, B, T1) ( + , C, D, T2) ( * , T1, T2, T3)
Bentuk Triple • dimanatempatpenyimpanansementara • (T1, ..., Tn) digantidengannomortempatpenyimpanan (1, ..., n). • BentukUmum: • <operator>, <operand1>, <operand2>
Contoh: • A + B * C (A*B) ^ (C-D) • maka: maka: • (1), *, B, C (1), *, A , B • (2), +,A, (1) (2), -, C, D • (3), ^, (1), (2)
BentukNotasi Polish • Bentuknotasi polish digunakanuntukmemperlihatkanaritmatikatauekspresi yang logisdanpastiberdasarkan order daritiap-tiap operator yang adasehinggaakanmemberikan 3 bentuknotasi: • Notasi Prefix • dimana operator beradadidepan operand. • Contoh: +AB
Notasi Infix • dimana operator beradadiantara operand. • Contoh: Z * W • Notasi Postfix • dimana operator beradadibelakang operand. • Contoh: AB*
Sebuahekspresi Infix dapatdikonversikankebentuk intermediate yang disebutnotasi polish. Sebuahekspresi infix (A+B)*(C+D) dapatdikonversikansehinggaekivalendengan suffix-polish (postfix-polish) AB+CD+*.
Tiap-tiap operand umumnyamenggunakandualokasi: • Akandiberikandalambentuk integer. • Operand merupakankarakter yang berasaldari identifier. Operand initerdiridari: • - namadarivariabel • - namadariprosedur • - namadarifungsi • - variabelsementara
Aturan-aturannotasi polish sebagaiberikut: • Identifier akanberadadalam order yang samapadanotasi infix. • Operator akanmemberikanordernyabiladievaluasi. • Secaraumumdalamsegmen program operator selalusetelah operand.
Contoh: • (A+B) * (C-D) • maka: • A + B = AB+ P • C - D = CD- Q • P * Q = PQ* AB+CD-* • (A*B) / C • maka: • A * B = AB* P • P / C = PC/ AB*C/
Aturan-aturanpenyelesaiandalam STACK: • Jikaditelusuriadalah identifier ataukonstantamakanilainyaakandidorongkedalam stack dandilanjutkandenganmenelusurisimbolberikutnya. • Bentukumum: • (operand) := (identifier) • Jikaditelusurisuatusimbol operator akanditempatkanpada top stack. • Bentukumum: • (operand)::=(operand1)(operand2)(operator)
Nilai asterik diganti dengan hasil dari proses sebagai temporari sehingga menghasilkan proses LIFO.
Output daripenganalisissemantikdikirimkepembentukkode (code generator). Padasaatitubentuk intermediate program sumber, biasanyaditerjemahkankedalambahasarakitan (assembly language) ataupunkedalambahasamesin (machine language)
Contoh : Bentukkuadrupeldiatas, dapatmenghasilkanbarisanalamat-tunggal (single address), intruksiakumulator-tunggalbahasarakitan (single-accumulator assembly language) berikut :
LDA A Panggil (LOAD) isi A, masukkankedalamakumulator ADD B Tambahkan (ADD) isi B kedalamAkumulator STO T1 Simpan (STORE) isiakumulator kedalampenyimpanan sementara T1
LDA C Panggil (LOAD) isi C, masukkankedalamakumulator ADD D Tambahkan (ADD) isi D kedalamAkumulator STO T2 Simpan (STORE) isiakumulator kedalampenyimpanan sementara T2
LDA T1 Panggil (LOAD) isi T1, masukkankedlmakumulator MUL T2 Kalikan (MULTIPLY) isi T2 denganisiakumulator STO T3 Simpan (STORE) isiakumulator kedlmpenyimpansementara T3
Contoh 1: • i=1 1. BLOCK • j=0 2. =,1,,i • while i<=10 3. =,0,,j • j=j+1 4. <=,i,10,T1 • i=i+1 5. BP,,T1 • end 6. +,j,1,T2 • 7. =T2,,j • 8. +,i,1,T3 • 9. =T3,,i • 10. BLOCKEND
PengembanganNotasi Polish • Ekspresi • <var> = <expr> • Notasi Polish • <var><expr> = • Contoh: • A = B * C +D • Notasipolishnya : ABC*D+=
Array • Deklarasi array A notasipolishnya: A ADEC • Deklarasi array A[L1U1,...,LnUn] • Notasipolishnya: L1U1,...,LnUnA ADEC • Contoh: • Array A[1:7,1:10] • Notasipolishnya: 17110 A ADEC
AturanProduksimerupakanpusatdaritatabahasa, yang menspesifikasikanbagaimanasuatutatabahasamelakukantransformasisuatu string kebentuklainnya. • Melaluiaturanproduksidapatdidefinisikansuatubahasa yang berhubungandengantatabahasatersebut. • Aturanproduksidinyatakandalambentuk : • Bisadibaca : menghasilkan , atau menurunkan
SIMBOL : • Simbol Terminal biasanyadinyatakandenganhurufkecil • misalnya : ‘a’, ’b’, ’c’ • Simbol Non Terminal/VariabelbiasadinyatakandenganHurufbesar • misalnya : ‘A’, ‘B’, ‘C’
Diagram Keadaan • Diagram keadaan (State Transition Diagram) digunakanuntukmendapatkan token (token adalahsimbol terminal padateoribahasa) yaitumelakukananalisisleksikalterhadap program sumber. • Misalkansuatubahasamemilikihimpunansimbol terminal/token (t_PLUS, t_MIN, t_ID, t_INT).
Contoh : VAR jumlah : integer • VAR dan Integer : Keyword • Jumlah : sebuahnama yang dideklarasikansendiriolehpemrogram • Token t_IDharusdiawalidengankarakterhuruf (A-Z, a-z) danbisadiikuti digit (0-9) atauhuruf • Token t_INTharusdiawali digit danbisadiikutidengan digit. • Blank merupakanbagian program sumber yang diabaikan (dilewati) sepertispasi.
Backus Naur Form • Salahsatucara formal untukmendefinisikansuatubahasa formal atau CFG. BNF memilikibanyakvariasi yang disesuaikankebutuhanpemakai. Salahsatunyagabunganoperasi + dan * dalamEkspresi Regular.
NOTASI BNF Beberapasimbolnotasi BNF (Backus Naur Form/Backus Norm Form) :
DIAGRAM SINTAKS : • Diagram sintaksmerupakanalat bantu dalampembentukan parser/analisissintaksis. • Notasi yang terdapatpada diagram sintaks : • Empatpersegipanjangmelambangkansimbolvariabel/non terminal. • Bulatanmelambangkansimbol terminal.
Diagram Sintaks • Merupakancarauntukmerepresentasikansintakatau token dalambentukgambar. Bentukdarisintak diagram adalahkotakuntukmenampilkanelemen, elipsuntukmenampilkankarakteratauhimpunankarakter, sertapanahuntuk literal.
Literal adalahrangkaiankarakter yang mendefinisikantipe data dasar, ada 3 macam: a. String: dimulaidandiakhirioleh ASCII 39 dan ASCII 34 atau ASCII 96 b. Integer: dimulaikarakter ASCII 45 atau ASCII 43 dandiikutisatuataulebihkarakter digit Digit + - Sintaks Diagram integer Token
Contoh Diagram Sintaks Condition statement if Then If-statment End-if ; Else if statement else Condition statement Then Else-if
AturanPenulisan BNF <expression> ::= <term> | <expression> "+" <term> <term> ::= <factor> | <term> "*" <factor> <factor> ::= <constant> | <variable> | "(" <expression> ")" <variable> ::= "x" | "y" | "z" <constant> ::= <digit> | <digit> <constant> <digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
AturanPenulisan EBNF expression = term , {"+" , term}; term = factor , {"*" , factor}; f actor = constant | variable | "(" , expression , ")"; variable = "x" | "y" | "z"; constant = digit , {digit}; digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";