1 { Program : Scanner Sederhana untuk Source Program Pascal }
2 { Created : 04/12/2018 ILMU KOMPUTER UIN-SU }
3 4 program scanner; 5 6 var 7 prg_sumber,f_hasil:text; 8 karakter:Char; 9 kata,Nm_token:string; 10 11 procedure bacafile; { prosedur membaca file sumber } 12 begin 13 read(prg_sumber,karakter); 14 end; 15 16 procedure hasil; {prosedur utk menulis hasil setiap token} 17 begin 18 append(f_hasil); {menambah hasil scan ke file hasil} 19 writeln(f_hasil, kata : 15, ' : ', Nm_token); 20 writeln(kata : 15, ' : ', Nm_token); {mencetak hasil scan ke layar} 21 end; 22 23 function cekkeyword(s:string):string; {fungsi mengecek keyword atau bukan} 24 var 25 x : byte; 26 panjang : integer; 27 ftext : text; 28 data : string; 29 30 begin 31 panjang:= length(s); {konversi kata ke huruf kecil} 32 for x:=1 to panjang do 33 begin 34 if s[x]=upcase (s[x]) then 35 s[x] := s[x] 36 else 37 s[x]:= chr(ord(s[x])+32); 38 end; 39 40 assign(ftext,'keyword.txt'); 41 reset(ftext); 42 while not eof(ftext) do {mencocokkan dgn tabel keyword} 43 begin 44 readln(ftext,data); 45 if s=data then Nm_token:='Identifier / Keyword'; 46 end; 47 close(ftext); 48 end; 49 50 procedure periksa; {prosedur memeriksa setiap karakter file sumber} 51 begin 52 while not eof(prg_sumber) do {kerjakan sampai akhir file} 53 begin 54 bacafile; 55 if karakter ='{' then {mengabaikan/membuang komentar} 56 begin 57 repeat 58 begin 59 bacafile; 60 end; 61 until karakter = '}'; 62 kata:=''; 63 end; 64 65 if karakter = chr(39) then {mengecek tanda petik (‘)} 66 begin 67 repeat 68 begin 69 kata := kata + karakter; 70 bacafile; 71 end; 72 until karakter = chr(39) ; 73 kata := kata + karakter; 74 Nm_token := 'Konstanta'; 75 hasil; 76 kata :=''; 77 end; 78 79 if (karakter in['A'..'Z','a'..'z','_']) then {mengecek karakter/kata} 80 begin 81 repeat 82 begin 83 kata := kata + karakter; 84 bacafile; 85 end; 86 until (not(karakter in['A'..'Z','a'..'z','_'])); 87 Nm_token:='Identifier / Variabel'; 88 cekkeyword(kata); 89 hasil; 90 kata :=''; 91 end; 92 93 if (karakter in['0'..'9']) then {mengecek angka} 94 begin 95 repeat 96 begin 97 kata := kata + karakter; 98 bacafile; 99 end; 100 until (not(karakter in['0'..'9'])); 101 Nm_token := 'Konstanta / Integer'; 102 hasil; 103 kata :=''; 104 end; 105 106 if (karakter in['+','-','*','/',',','^']) then 107 begin 108 repeat 109 begin 110 kata := kata+karakter; 111 bacafile; 112 end; 113 until (not(karakter in['+','-','*','/',',','^'])); 114 Nm_token :='Operator'; 115 hasil; 116 kata:=''; 117 end; 118 119 if (karakter in['(',')','[',']','^',':',';',',','.']) then 120 begin 121 kata:=karakter; 122 Nm_token :='Delimiter'; 123 hasil; 124 kata:=''; 125 end; 126 end; 127 end; 128 129 begin {=program utama=} 130 Writeln('Contoh Program Scanner PASCAL '); 131 assign(prg_sumber,'URUT.PAS'); {menetapkan file sumber} 132 reset(prg_sumber); {membaca file sumber} 133 assign(f_hasil,'hasil.txt'); {menetapkan file hasil} 134 rewrite(f_hasil); {menghapus isi file hasil} 135 periksa; {menjalankan prosedur scan} 136 close(prg_sumber); {menutup file} 137 close(f_hasil); 138 readln; 139 end.