650 likes | 892 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
Contohnotasi yang ambigu Int x =y/z/w; Str =‘1’ +’2’; Str1 = 1 + 2; for(x=1;x<=5;x++) nilai++; cout<<“Kompilasi”;
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
Contoh1 kuadraple: • i=1 1. BLOCK • j=0 2. =,1,,i • while (i<=10) 3. =,0,,j • begin4. <=,i,10,T1 • j=j+1 5. BP,,T1 • i=i+1 6. +,j,1,T2 • end ;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
REVIEW Bahasaadalahkumpulankalimat. Kalimatadalahrangkaiankata. Kataadalah unit terkecilkomponenbahasa yang tidakbisadipisah-pisahkanlagi. Kalimat-kalimat :1.‘Seekorkucingmemakanseekortikus.’; 2.‘Budi menendangsebuah bola.’atau 1.‘A cat eats a mouse’ ; 2.‘Budi kick a ball.’ atau 1.‘if a2 < 9.0 then b2 := a2+a3;’ ; 2.‘for i := start to finish do A[i] := B[i]*sin(i*pi/16.0).’ Note: Dalambahasapemrogramankalimatlebihdikenalsebagaiekspresisedangkankatasebagaitoken.
REVIEW 1.Spesifikasi leksikal, misalnyasetiapkataharustersusunatashurufmatidanhurufhidup yang disusunbergantian, atausetiap token harusdimulaidenganhurufdanselanjutnyabolehdiikutiolehhurufatauangka, 2.Spesifikasi sintaks, misalnyasetiapkalimatmengikutipolasubyek-predikat-obyekatauekspresifor_domengikutipola for-identifier-:=-identifier-to-identifier-do-ekspresi.
REVIEW 3.Aturan-aturan semantik, misalnyakata yang mendahuluikatakerjaharuslahkatabenda yang menggambarkansesuatu yang hidupdanberkaki, atauoperasiperkalianhanyabisadilakukanantaradua operand dengantipe yang sama.
Dalamspesifikasileksikalumumnyadigunakangrammar regular (GR) dalambentukekspresi regular (ER). Contohpola token identifier ditentukanolehgrammar regularberikut : • IaAbA...zAab...z, AaAbA...zA0A1A...9Aab... z01...9 yang ekuivalendenganekspresi regular berikut : • I = (ab...z)(ab...z01...9)* = huruf(hurufangka)*
Bottom-up Parsing Membentuksebuah Token melaluisimbolyaitu : Repeat: -Identifikasi- urutan tereduksi: non-terminal tidak dibangun tetapisemua anak yang telah dibangun. -Reduksi- membangun non-terminal dan memperbarui stackUntil(melakukanreduksisampaisimbol start)
Bottom-up Parsing 1 + (2) + (3) E E + (E) E i E + (2) + (3) E + (E) + (3) E + (3) E E + (E) E E E E E 1 + ( 2 ) + 3 ( )
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.
Dalamspesifikasisintaksbiasanyadigunakancontext free grammar (CFG). Sebagaicontohekspresiif-then E adalah : E if L then L IOA I = huruf(hurufangka)* O <=><=>= A01...9
Scanner Scanner diimplementasikandenganAutomata HinggaDeterministik(AHD/FSA) . Siklustransformasi : GR ER AHN AHD GR. Contoh: scanner (yaitu AHD) untukmengenali identifier adalah: 1 2 huruf Huruf/angka
Membaca program sumber Program Sumber PenunjukKarakter type Text_Pos = record {posisipenunjukkarakter} Row_Numb : word; {bariske-, bisaribuanbaris/program_sumber} Char_Numb : byte; {karakterke-, maksimum 255 karakter/baris} end; varNow_Pos : Text_Pos; {posisisekarang} Line : string; {baris yang sedangdiproses} End_of_line : byte; {posisiakhirbaris yang sedangdiproses}
procedure Next_Character(var Ft : text); {bacakarakterberikut padaprogram_sumber} begin with Now_Pos do {cobatebak, apaituperintah with ... do ?} begin if Char_Numb = End_of_line then begin List_Line; {menampilkankembalibaris yang telahdibaca, besertaerrornya} Next_Line(Ft); {membacabarisberikutnya} Row_Numb:= Row_Numb + 1; Char_Numb:= 1; end else Char_Numb := Char_Numb + 1; character := Line[Char_Numb]; end; end;