370 likes | 567 Views
Procedures, Functions and Methods. REVIEW. Bahasa adalah kumpulan kalimat . Kalimat adalah rangkaian kata . Kata adalah unit terkecil komponen bahasa yang tidak bisa dipisah-pisahkan lagi . Kalimat-kalimat : ‘ Seekor kucing memakan seekor tikus . ’ ;
E N D
REVIEW Bahasaadalahkumpulankalimat. Kalimatadalahrangkaiankata. Kataadalah unit terkecilkomponenbahasa yang tidakbisadipisah-pisahkanlagi. Kalimat-kalimat : ‘Seekorkucingmemakanseekortikus.’; ‘Budi menendangsebuah bola.’atau ‘A cat eats a mouse’ ; ‘Budi kick a ball.’ atau ‘if a2 < 9.0 then b2 := a2+a3;’ ; ‘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_to_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.
Scope (Batasan) Alphabet ∑ : himpunankarakterhuruf, angkadankarakterkhusus String : urutanterbatasdarikarakterdalam alphabet ∑, termasukjuga empty ε. Language: himpunan string tertutuppadaoperasikonkatinasidan union. KleeneClosure (L*): empty ataulebihkonkatinasidari L. Positif Closure (L ) : 1 ataulebihkonkatinasidari L
Ekspresi Regular ER merupakancara formal untukmenggambarkanpolalexim-lexim/token-token. ER mengikutioperasi yang terjadipada alphabet. Misal r dan s adalah ER maka: ER: r|sL(r)U L(s) ER: r.sL(r).L(s) ER: r* (L(r))* ER: r (L(r))
Ekspresi Regular Aturanaljabarbagikonkatinasi: Komutatif : r |s = s|r Asosiatif : r(s|t)= (r|s)|t KonkatinasiAsosiatif: (rs)|t = r|(st) KonkatinasiDistributif:r(s|t) = rs | rt ,atau (s|t)r = sr| tr Identitas : ε.r = r atau r.ε=r Relasi * danε : r =(r| ε)* Idempoten : r** = r* r =r.r* Kelaskarakter : [abc] =a|b|cuntuka,b,cЄ∑atau [a-z] = a| … |z
AturanProduksi 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)*
Token Recognition • ER mengefisienkanpengenal token pada FSA • ER dibangunmulaidari diagram transisi, ER dalam Automata diturunkansebagaialatpenggerakdalammenspesifikasibahasa. ER NDFA e-move NDFA tanpa e-move DFA
Bottom-up Parsing Disebutjugateknikmengurangi(reduce) dengan parser yang membentuksebuah Token melaluisimbolyaitu : Repeat: -Identifikasi- urutan tereduksi: non-terminal tidak dibangun tetapisemua anak yang dibangun. -Reduksi - membangun non-terminal dan memperbarui stack Until(melakukanreduksisampaisimbol start)
Bangunsebuahpohon parser untuksebuah input string, mulaidaridaunmemparserkeatassampaikeakar. Mengurangisimboldari string w ke state awal S. SaABe AAbc | b B d Proses w=‘abbcde’ ReduksiParser buttom up: abbcde aAbcde aAde aABe S PenurunanTerkanan: SaABeaAdeaAbcdeabbcde
MasalahAmbigudariGrammar Contoh: EE+E E(E) Eid Dari contohdiatasmempunyaiperbedaanderivatif(penurunan) terkanan string yang samaid+id*id E id dan EE+E menangani E=E+id
Bottom-up Parsing 1 + (2) + (3) 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;
procedure List_Line; begin write{Now_Pos.Row_Numb : 3, ‘ ‘); writeln(Line); List_Error; {menampilkankesalahan-kesalahan yang terjadi padasuatubaris} End; procedure Next_Line(Ft : text); begin readln(Ft, Line); End_of_line := length(Line) + 1: Line := Line + #32; {karakterspasi} end;
AturanTranslasi Contohaturantranslasi (translation rule) untukbeberapaekspresi regular (ER) atau token. token Aturantranslasi token Aturantranslasi . {Current_Token(1,1)} = {Current_Token(15,1)} , {Current_Token(2,1)} <> {Current_Token(15,2)} ; {Current_Token(3,1)} < {Current_Token(15,3)} : {Current_Token(4,1)} <= {Current_Token(15,4)} := {Current_Token(12,1)} > {Current_Token(15,5)} + {Current_Token(13,1)} >= {Current_Token(15,6)} - {Current_Token(13,2)} identifier {Current_Token(27,Id)} * {Current_Token(14,1)} (+-)angka {Current_Token(28,IN)} / {Current_Token(14,2)} (+-)angka .angka {Current_Token(29,RN)}
Current_Token(tipe,nilai) adalahprocedure yang memberikanspesifikasikepadasebuah token yang barusajaditemukan. • Argumentipeadalahkelompok token . • Argumennilaimerupakannilaidari token tersebut. Tipe = 0 ditetapkanbagitoken yang tidakdikenal.
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";