Download - tugas kompilasi1
![Page 1: tugas kompilasi1](https://reader035.vdokumen.com/reader035/viewer/2022081813/545f7794af79592b708b4f05/html5/thumbnails/1.jpg)
Nama : David Super Natanail Ginting
NPM : 1A112034
Matakuliah : Pengantar Tehnik Kompilasi
![Page 2: tugas kompilasi1](https://reader035.vdokumen.com/reader035/viewer/2022081813/545f7794af79592b708b4f05/html5/thumbnails/2.jpg)
Umtuk memenuhi dan melengkapi materi tugas pada mata kuliah “Pengantar Tehnik Kompilasi” maka saya mancari refrensi di media online untuk program sederhana untuk di analisis (pembacaan setiap kata/karakter suatu program untuk diterjemahkan ke jenis-jenis token)
Jenis token yang saya gunakan disini ada 4 jenis pokok yaitu :1. identifier bisa berupa keyword atau variabel2. Konstanta3. Operator4. Delimiter
Source program yang dibaca juga dalam bahasa pascal, disini saya contohkan program untuk mengurutkan angka, listingnya sebagai berikut :
Program Urut_Bilangan;Uses Wincrt;Var A, B, C : integer;Begin {mulai program utama}Writeln(‘Program Mengurut Bilangan’);Writeln(‘ ‘);Writeln;Write(‘Masukkan Nilai A: ‘);readln(A);Write(‘Masukkan Nilai B: ‘);readln(B);Write(‘Masukkan Nilai C: ‘);readln(C);Writeln;if (A<= B) and (A<= C) thenif (B<= C) thenWriteln(A,' ',B,' ',C)elseWriteln(A,' ',C,' ',B)else if (B<= A) and (B<= C) thenif (A<= C) thenWriteln(B,' ',A,' ',C)elseWriteln(B,' ',C,' ',A)else if (C<= A) and (C<= B) thenif (A<= B) thenWriteln(C,' ',A,' ',B)elseWriteln(C,' ',B,' ',A)End.
Dari program sumber tersebut, akan kita baca setiap karakter demi karakter, sehingga karakter/kata dalam program tersebut bisa dikelompokkan ke dalam 4 jenis token diatas. Kita ketahui, keyword adalah kata baku yang sudah disediakan oleh bahasa pemrograman, sehingga
![Page 3: tugas kompilasi1](https://reader035.vdokumen.com/reader035/viewer/2022081813/545f7794af79592b708b4f05/html5/thumbnails/3.jpg)
untuk memudahkan pengelompokan kata tersebut sebagai keyword atau bukan, terlebih dahulu dibuat file teks yang berisi daftar keyword dalam pascal. Saya coba buat file keyword.txt yang isinya :
andarraybegincaseconstdivdodowntoelseendfileforfunctiongotoifinlabelmodnilnotoforpackedprocedureprogramrecordrepeatsetthentotypeuntilusesvarwhilewithabsarctanbooleancharchrcos
![Page 4: tugas kompilasi1](https://reader035.vdokumen.com/reader035/viewer/2022081813/545f7794af79592b708b4f05/html5/thumbnails/4.jpg)
disposeeofeolnexpfalsegetinputintegerlnmaxintnewoddordoutputpackpagepredputreadreadlnrealresetrewriteroundsinsqrsqrtsucctexttruetruncunpackwritewritelnwincrtstring
File teks ini nanti akan dicocokkan dengan setiap kata yang ditemukan dalam file sumber, sehingga bisa diidentifikasi kata tsb keyword atau bukan. Bila ada keyword yang belum masuk, silakan tambahkan saja di file teks tersebut.
Contoh program dalam bahasa pascal yang bisa digunakan untuk melakukan analisis leksikal :
program scanner; { judul program}
![Page 5: tugas kompilasi1](https://reader035.vdokumen.com/reader035/viewer/2022081813/545f7794af79592b708b4f05/html5/thumbnails/5.jpg)
uses Wincrt;varprg_sumber,f_hasil:text;karakter:Char;kata,Nm_token:string;
procedure bacafile; { prosedur membaca file sumber }beginread(prg_sumber,karakter);end;
procedure hasil; {prosedur utk menulis hasil setiap token}beginappend(f_hasil); {menambah hasil scan ke file hasil}writeln(f_hasil, kata : 15, ' : ', Nm_token);writeln(kata : 15, ' : ', Nm_token); {mencetak hasil scan ke layar}end;
function cekkeyword(s:string):string; {fungsi mengecek keyword atau bukan}varx : byte;panjang : integer;ftext : text;data : string;
beginpanjang:= length(s); {konversi kata ke huruf kecil}for x:=1 to panjang dobeginif s[x] upcase (s[x]) thens[x] := s[x]elses[x]:= chr(ord(s[x])+32);end;
assign(ftext,’keyword.txt’);reset(ftext);while not eof(ftext) do {mencocokkan dgn tabel keyword}beginreadln(ftext,data);if s=data then Nm_token:=’Identifier / Keyword’;end;close(ftext);end;
![Page 6: tugas kompilasi1](https://reader035.vdokumen.com/reader035/viewer/2022081813/545f7794af79592b708b4f05/html5/thumbnails/6.jpg)
procedure periksa; {prosedur memeriksa setiap karakter file sumber}beginwhile not eof(prg_sumber) do {kerjakan sampai akhir file}beginbacafile;
if karakter = ‘{‘ then {mengabaikan/membuang komentar}beginrepeatbeginbacafile;end;until karakter = ‘}’;kata:=”;end;
if karakter = chr(39) then {mengecek tanda petik (‘)}beginrepeatbeginkata := kata + karakter;bacafile;end;until karakter = chr(39) ;kata := kata + karakter;Nm_token := ‘Konstanta’;hasil;kata :=”;end;
if (karakter in['A'..'Z','a'..'z','_']) then {mengecek karakter/kata}beginrepeatbeginkata := kata + karakter;bacafile;end;until (not(karakter in['A'..'Z','a'..'z','_']));Nm_token:=’Identifier / Variabel’;cekkeyword(kata);hasil;kata :=”;end;
if (karakter in['0'..'9']) then {mengecek angka}begin
![Page 7: tugas kompilasi1](https://reader035.vdokumen.com/reader035/viewer/2022081813/545f7794af79592b708b4f05/html5/thumbnails/7.jpg)
repeatbeginkata := kata + karakter;bacafile;end;until (not(karakter in['0'..'9']));Nm_token := ‘Konstanta / Integer’;hasil;kata :=”;end;
if (karakter in['+','-','*','/','','^']) thenbeginrepeatbeginkata := kata+karakter;bacafile;end;until (not(karakter in['+','-','*','/','','^']));Nm_token :=’Operator’;
hasil;kata:=”;end;
if (karakter in['(',')','[',']‘,’^',’:',’;',’,',’.’]) thenbeginkata:=karakter;Nm_token :=’Delimiter’;hasil;kata:=”;end;end;
end;
begin {=program utama=}clrscr;assign(prg_sumber,’urut.pas’); {menetapkan file sumber}reset(prg_sumber); {membaca file sumber}assign(f_hasil,’hasil.txt’); {menetapkan file hasil}rewrite(f_hasil); {menghapus isi file hasil}periksa; {menjalankan prosedur scan}close(prg_sumber); {menutup file}close(f_hasil);
![Page 8: tugas kompilasi1](https://reader035.vdokumen.com/reader035/viewer/2022081813/545f7794af79592b708b4f05/html5/thumbnails/8.jpg)
readln;end.
Jika program tersebut dijalankan, hasil analisisnya muncul di layar, dan juga terbentuk file teks yang saya beri nama hasil.txt, isinya sebagai berikut :
Program : Identifier / KeywordUrut_Bilangan : Identifier / Variabel; : DelimiterUses : Identifier / KeywordWincrt : Identifier / Keyword; : DelimiterVar : Identifier / KeywordA : Identifier / Variabel, : DelimiterB : Identifier / Variabel, : DelimiterC : Identifier / Variabel: : Delimiterinteger : Identifier / Keyword; : DelimiterBegin : Identifier / KeywordWriteln : Identifier / Keyword( : Delimiter‘Program Mengurut Bilangan’ : Konstanta) : Delimiter; : DelimiterWriteln : Identifier / Keyword( : Delimiter‘ ‘ : Konstanta) : Delimiter; : DelimiterWriteln : Identifier / Keyword; : DelimiterWrite : Identifier / Keyword( : Delimiter‘Masukkan Nilai A: ‘ : Konstanta) : Delimiter; : Delimiterreadln : Identifier / Keyword( : DelimiterA : Identifier / Variabel) : Delimiter; : DelimiterWrite : Identifier / Keyword( : Delimiter
![Page 9: tugas kompilasi1](https://reader035.vdokumen.com/reader035/viewer/2022081813/545f7794af79592b708b4f05/html5/thumbnails/9.jpg)
‘Masukkan Nilai B: ‘ : Konstanta) : Delimiter; : Delimiterreadln : Identifier / Keyword( : DelimiterB : Identifier / Variabel) : Delimiter; : DelimiterWrite : Identifier / Keyword( : Delimiter‘Masukkan Nilai C: ‘ : Konstanta) : Delimiter; : Delimiterreadln : Identifier / Keyword( : DelimiterC : Identifier / Variabel) : Delimiter; : DelimiterWriteln : Identifier / Keyword; : Delimiterif : Identifier / Keyword( : DelimiterA : Identifier / Variabel<= : Operator) : Delimiterand : Identifier / Keyword( : DelimiterA : Identifier / Variabel<= : Operator) : Delimiterthen : Identifier / Keywordif : Identifier / Keyword( : DelimiterB : Identifier / Variabel<= : Operator) : Delimiterthen : Identifier / KeywordWriteln : Identifier / Keyword( : DelimiterA : Identifier / Variabel, : Delimiter' ' : Konstanta, : DelimiterB : Identifier / Variabel, : Delimiter' ' : Konstanta
![Page 10: tugas kompilasi1](https://reader035.vdokumen.com/reader035/viewer/2022081813/545f7794af79592b708b4f05/html5/thumbnails/10.jpg)
, : DelimiterC : Identifier / Variabel) : Delimiterelse : Identifier / KeywordWriteln : Identifier / Keyword( : DelimiterA : Identifier / Variabel, : Delimiter' ' : Konstanta, : DelimiterC : Identifier / Variabel, : Delimiter' ' : Konstanta, : DelimiterB : Identifier / Variabel) : Delimiterelse : Identifier / Keywordif : Identifier / Keyword( : DelimiterB : Identifier / Variabel<= : Operator) : Delimiterand : Identifier / Keyword( : DelimiterB : Identifier / Variabel<= : Operator) : Delimiterthen : Identifier / Keywordif : Identifier / Keyword( : DelimiterA : Identifier / Variabel<= : OperatorC : Identifier / Variabel) : Delimiterthen : Identifier / KeywordWriteln : Identifier / Keyword( : DelimiterB : Identifier / Variabel, : Delimiter' ' : Konstanta, : DelimiterA : Identifier / Variabel, : Delimiter' ' : Konstanta, : DelimiterC : Identifier / Variabel
![Page 11: tugas kompilasi1](https://reader035.vdokumen.com/reader035/viewer/2022081813/545f7794af79592b708b4f05/html5/thumbnails/11.jpg)
) : Delimiterelse : Identifier / KeywordWriteln : Identifier / Keyword( : DelimiterB : Identifier / Variabel, : Delimiter' ' : Konstanta, : DelimiterC : Identifier / Variabel, : Delimiter' ' : Konstanta, : DelimiterA : Identifier / Variabel) : Delimiterelse : Identifier / Keywordif : Identifier / Keyword( : DelimiterC : Identifier / Variabel<= : Operator) : Delimiterand : Identifier / Keyword( : DelimiterC : Identifier / Variabel<= : Operator) : Delimiterthen : Identifier / Keywordif : Identifier / Keyword( : DelimiterA : Identifier / Variabel<= : OperatorB : Identifier / Variabel) : Delimiterthen : Identifier / KeywordWriteln : Identifier / Keyword( : DelimiterC : Identifier / Variabel, : Delimiter' ' : Konstanta, : DelimiterA : Identifier / Variabel, : Delimiter' ' : Konstanta, : DelimiterB : Identifier / Variabel) : Delimiterelse : Identifier / Keyword
![Page 12: tugas kompilasi1](https://reader035.vdokumen.com/reader035/viewer/2022081813/545f7794af79592b708b4f05/html5/thumbnails/12.jpg)
Writeln : Identifier / Keyword( : DelimiterC : Identifier / Variabel, : Delimiter' ' : Konstanta, : DelimiterB : Identifier / Variabel, : Delimiter' ' : Konstanta, : DelimiterA : Identifier / Variabel) : DelimiterEnd : Identifier / Keyword. : Delimiter
Disitu terlihat setiap karakter atau kata di program sumber dikelompokkan ke 4 jenis pokok token dalam analisis leksikal.