tugas kompilasi1

14
Nama : David Super Natanail Ginting NPM : 1A112034 Matakuliah : Pengantar Tehnik Kompilasi

Upload: davidsupernatanailg

Post on 08-Nov-2014

37 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: tugas kompilasi1

Nama : David Super Natanail Ginting

NPM : 1A112034

Matakuliah : Pengantar Tehnik Kompilasi

Page 2: tugas kompilasi1

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

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

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

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

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

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

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

‘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

, : 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

) : 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

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.