tugas kompilasi1

Post on 08-Nov-2014

37 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Nama : David Super Natanail Ginting

NPM : 1A112034

Matakuliah : Pengantar Tehnik Kompilasi

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

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

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}

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;

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

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

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

‘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

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

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

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.

top related