1 / 65

Konsep dan Notasi Bahasa

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.

bianca
Télécharger la présentation

Konsep dan Notasi Bahasa

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. KonsepdanNotasiBahasa

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

  3. MODEL KOMPILATOR

  4. BeberapaFaktorpentingseseorangmemilihbahasapemrograman: • Sintak • Editor • Dokumentasi • Performa • Library • Fleksibilitas • Komunitas • Popularitas

  5. 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).

  6. Contohnotasi yang ambigu void main() { int *bil1, bil2; int *bil3=&bil2; //’*’ tidakdibenarkan *bil3=&bil2; //benardengan ‘*’ }

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

  8. Contohnotasi yang ambigu Int x =y/z/w; Str =‘1’ +’2’; Str1 = 1 + 2; for(x=1;x<=5;x++) nilai++; cout<<“Kompilasi”;

  9. BENTUK INTERNAL SOURCE PROGRAM • Dalammenterjemahkanbahasapemrogramanmakakompilerakanmembentukrepresentasi internal yang berupa: • BentukKuadruple • Merupakansuatuperintahtigaalamatdanmerupakansuatuhasildalambentukkodesumber yang dihasilkanolehanalisasemantik.

  10. BentukUmum: • <operator>,<operand1>,<operand2>,<result> • dimana: <operand1> dan <operand2> sebagaiargumen. • <result> sebagaitempatpenyimpanansementaradarihasilargumen.

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

  12. Contoh : Ekspresi : (A+B) * (C+D) Bentuk intermediate darikodesumberberbentukkuadrupelseperti ( + , A, B, T1) ( + , C, D, T2) ( * , T1, T2, T3)

  13. Bentuk Triple • dimanatempatpenyimpanansementara • (T1, ..., Tn) digantidengannomortempatpenyimpanan (1, ..., n). • BentukUmum: • <operator>, <operand1>, <operand2>

  14. 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)

  15. BentukNotasi Polish • Bentuknotasi polish digunakanuntukmemperlihatkanaritmatikatauekspresi yang logisdanpastiberdasarkan order daritiap-tiap operator yang adasehinggaakanmemberikan 3 bentuknotasi: • Notasi Prefix • dimana operator beradadidepan operand. • Contoh: +AB

  16. Notasi Infix • dimana operator beradadiantara operand. • Contoh: Z * W • Notasi Postfix • dimana operator beradadibelakang operand. • Contoh: AB*

  17. Sebuahekspresi Infix dapatdikonversikankebentuk intermediate yang disebutnotasi polish. Sebuahekspresi infix (A+B)*(C+D) dapatdikonversikansehinggaekivalendengan suffix-polish (postfix-polish) AB+CD+*.

  18. Tiap-tiap operand umumnyamenggunakandualokasi: • Akandiberikandalambentuk integer. • Operand merupakankarakter yang berasaldari identifier. Operand initerdiridari: • - namadarivariabel • - namadariprosedur • - namadarifungsi • - variabelsementara

  19. Aturan-aturannotasi polish sebagaiberikut: • Identifier akanberadadalam order yang samapadanotasi infix. • Operator akanmemberikanordernyabiladievaluasi. • Secaraumumdalamsegmen program operator selalusetelah operand.

  20. 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/

  21. Aturan-aturanpenyelesaiandalam STACK: • Jikaditelusuriadalah identifier ataukonstantamakanilainyaakandidorongkedalam stack dandilanjutkandenganmenelusurisimbolberikutnya. • Bentukumum: • (operand) := (identifier) • Jikaditelusurisuatusimbol operator akanditempatkanpada top stack. • Bentukumum: • (operand)::=(operand1)(operand2)(operator)

  22. Nilai asterik diganti dengan hasil dari proses sebagai temporari sehingga menghasilkan proses LIFO.

  23. Output daripenganalisissemantikdikirimkepembentukkode (code generator). Padasaatitubentuk intermediate program sumber, biasanyaditerjemahkankedalambahasarakitan (assembly language) ataupunkedalambahasamesin (machine language)

  24. Contoh : Bentukkuadrupeldiatas, dapatmenghasilkanbarisanalamat-tunggal (single address), intruksiakumulator-tunggalbahasarakitan (single-accumulator assembly language) berikut :

  25. LDA A Panggil (LOAD) isi A, masukkankedalamakumulator ADD B Tambahkan (ADD) isi B kedalamAkumulator STO T1 Simpan (STORE) isiakumulator kedalampenyimpanan sementara T1

  26. LDA C Panggil (LOAD) isi C, masukkankedalamakumulator ADD D Tambahkan (ADD) isi D kedalamAkumulator STO T2 Simpan (STORE) isiakumulator kedalampenyimpanan sementara T2

  27. LDA T1 Panggil (LOAD) isi T1, masukkankedlmakumulator MUL T2 Kalikan (MULTIPLY) isi T2 denganisiakumulator STO T3 Simpan (STORE) isiakumulator kedlmpenyimpansementara T3

  28. PengembanganKuadruple

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

  30. PengembanganNotasi Polish • Ekspresi • <var> = <expr> • Notasi Polish • <var><expr> = • Contoh: • A = B * C +D • Notasipolishnya : ABC*D+=

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

  32. REVIEW

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

  34. REVIEW 1.Spesifikasi leksikal, misalnyasetiapkataharustersusunatashurufmatidanhurufhidup yang disusunbergantian, atausetiap token harusdimulaidenganhurufdanselanjutnyabolehdiikutiolehhurufatauangka, 2.Spesifikasi sintaks, misalnyasetiapkalimatmengikutipolasubyek-predikat-obyekatauekspresifor_domengikutipola for-identifier-:=-identifier-to-identifier-do-ekspresi.

  35. REVIEW 3.Aturan-aturan semantik, misalnyakata yang mendahuluikatakerjaharuslahkatabenda yang menggambarkansesuatu yang hidupdanberkaki, atauoperasiperkalianhanyabisadilakukanantaradua operand dengantipe yang sama.

  36. Dalamspesifikasileksikalumumnyadigunakangrammar regular (GR) dalambentukekspresi regular (ER). Contohpola token identifier ditentukanolehgrammar regularberikut : • IaAbA...zAab...z, AaAbA...zA0A1A...9Aab... z01...9 yang ekuivalendenganekspresi regular berikut : • I = (ab...z)(ab...z01...9)* = huruf(hurufangka)*

  37. 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)

  38. 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 ( )

  39. AturanProduksimerupakanpusatdaritatabahasa, yang menspesifikasikanbagaimanasuatutatabahasamelakukantransformasisuatu string kebentuklainnya. • Melaluiaturanproduksidapatdidefinisikansuatubahasa yang berhubungandengantatabahasatersebut. • Aturanproduksidinyatakandalambentuk :    • Bisadibaca :  menghasilkan , atau  menurunkan 

  40. SIMBOL : • Simbol Terminal biasanyadinyatakandenganhurufkecil • misalnya : ‘a’, ’b’, ’c’ • Simbol Non Terminal/VariabelbiasadinyatakandenganHurufbesar • misalnya : ‘A’, ‘B’, ‘C’

  41. 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).

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

  43. Dalamspesifikasisintaksbiasanyadigunakancontext free grammar (CFG). Sebagaicontohekspresiif-then E adalah : E if L then L IOA I = huruf(hurufangka)* O  <=><=>= A01...9

  44. Scanner Scanner diimplementasikandenganAutomata HinggaDeterministik(AHD/FSA) . Siklustransformasi : GR  ER  AHN  AHD  GR. Contoh: scanner (yaitu AHD) untukmengenali identifier adalah: 1 2 huruf Huruf/angka

  45. 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}

  46. 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;

More Related