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.
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation
Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement.Téléchargez la présentation en cliquant sur ce lien.Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.
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
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.
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/
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
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 3.Aturan-aturan semantik, misalnyakata yang mendahuluikatakerjaharuslahkatabenda yang menggambarkansesuatu yang hidupdanberkaki, atauoperasiperkalianhanyabisadilakukanantaradua operand dengantipe yang sama.
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.
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;
Connexion au compte
Connectez-vous pour publier votre contenu sur SlideServe.