Analisis Leksikal


program scanner; {judul program}
uses crt;
var
prg_sumber,f_hasil:text;
karakter:Char;
kata,Nm_token:string;

procedure bacafile; { prosedur membaca file sumber }
begin
read(prg_sumber,karakter);
end;

procedure hasil; {prosedur utk menulis hasil setiap token}
begin
append(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}
var
x : byte;
panjang : integer;
ftext : text;
data : string;

begin
panjang:= length(s); {konversi kata ke huruf kecil}
for x:=1 to panjang do
begin
if s[x] > upcase (s[x]) then
s[x] := s[x]
else
s[x]:= chr(ord(s[x])+32);
end;

assign(ftext,'keyword.txt');
reset(ftext);
while not eof(ftext) do {mencocokkan dgn tabel keyword}
begin
readln(ftext,data);
if s=data then Nm_token:='Keyword';
end;
close(ftext);
end;

procedure periksa; {prosedur memeriksa setiap karakter file sumber}
begin
while not eof(prg_sumber) do {kerjakan sampai akhir file}
begin
bacafile;

if karakter = ''{‘ then {mengabaikan/membuang komentar}
then
begin
repeat
begin
bacafile;
end;
until karakter = '}';
kata:='';
end;

if karakter = chr(39) then {mengecek tanda petik (‘)}
begin
repeat
begin
kata := kata + karakter;
bacafile;
end;
until karakter = chr(39) ;
kata := kata + karakter;
Nm_token := 'Literals';
hasil;
kata :='';
end;

if (karakter in['A'..'Z','a'..'z','_']) then {mengecek karakter/kata}
begin
repeat
begin
kata := kata + karakter;
bacafile;
end;
until (not(karakter in['A'..'Z','a'..'z','_']));
Nm_token:='Identifier';
cekkeyword(kata);
hasil;
kata :='';
end;

if (karakter in['0'..'9']) then {mengecek angka}
begin
repeat
begin
kata := kata + karakter;
bacafile;
end;
until (not(karakter in['0'..'9']));
Nm_token := 'Literal';
hasil;
kata :='';
end;

if (karakter in['+','-','*','/','^']) then
begin
repeat
begin
kata := kata+karakter;
bacafile;
end;
until (not(karakter in['+','-','*','/','^']));
Nm_token :='Operator';

hasil;
kata:='';
end;

if (karakter in['(',')','[',']','^',':',';',',',',']) then
begin
kata:=karakter;
Nm_token :='Punctuation';
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.


OUTPUT HASIL PROGRAM :
        program : Identifier
           Gaji : Identifier
              ; : Punctuation
           uses : Identifier
            crt : Keyword
              ; : Punctuation
            var : Keyword
             gp : Identifier
              , : Punctuation
             gb : Identifier
              , : Punctuation
            pjk : Identifier
              , : Punctuation
             js : Identifier
              , : Punctuation
            tis : Identifier
              , : Punctuation
             ta : Identifier
              , : Punctuation
            tjb : Identifier
              : : Punctuation
           real : Identifier
              ; : Punctuation
            nik : Identifier
              : : Punctuation
         string : Keyword
              [ : Punctuation
             10 : Literal
              ] : Punctuation
              ; : Punctuation
             nk : Identifier
              : : Punctuation
         string : Keyword
              [ : Punctuation
             27 : Literal
              ] : Punctuation
              ; : Punctuation
            sts : Identifier
              : : Punctuation
         string : Keyword
              [ : Punctuation
              9 : Literal
              ] : Punctuation
              ; : Punctuation
             jb : Identifier
              : : Punctuation
         string : Keyword
              [ : Punctuation
             15 : Literal
              ] : Punctuation
              ; : Punctuation
             ja : Identifier
              : : Punctuation
           byte : Identifier
              ; : Punctuation
          begin : Keyword
         clrscr : Keyword
              ; : Punctuation
          write : Identifier
              ( : Punctuation
'Nomor Induk Karyawan=' : Literals
              ) : Punctuation
              ; : Punctuation
         readln : Identifier
              ( : Punctuation
            nik : Identifier
              ) : Punctuation
              ; : Punctuation
          write : Identifier
              ( : Punctuation
'Nama Karyawan=' : Literals
              ) : Punctuation
              ; : Punctuation
         readln : Identifier
              ( : Punctuation
             nk : Identifier
              ) : Punctuation
              ; : Punctuation
          write : Identifier
              ( : Punctuation
      'Status=' : Literals
              ) : Punctuation
              ; : Punctuation
         readln : Identifier
              ( : Punctuation
            sts : Identifier
              ) : Punctuation
              ; : Punctuation
          write : Identifier
              ( : Punctuation
 'Jumlah Anak=' : Literals
              ) : Punctuation
              ; : Punctuation
         readln : Identifier
              ( : Punctuation
             ja : Identifier
              ) : Punctuation
              ; : Punctuation
          write : Identifier
              ( : Punctuation
     'Jabatan=' : Literals
              ) : Punctuation
              ; : Punctuation
         readln : Identifier
              ( : Punctuation
             jb : Identifier
              ) : Punctuation
              ; : Punctuation
          write : Identifier
              ( : Punctuation
  'Gaji Pokok=' : Literals
              ) : Punctuation
              ; : Punctuation
           read : Identifier
              ( : Punctuation
             gp : Identifier
              ) : Punctuation
              ; : Punctuation
             if : Keyword
            sts : Identifier
      'menikah' : Literals
           then : Keyword
          begin : Keyword
            tis : Identifier
              : : Punctuation
              0 : Literal
              1 : Literal
              * : Operator
              p : Identifier
              ; : Punctuation
            end : Keyword
           else : Keyword
          begin : Keyword
            tis : Identifier
              : : Punctuation
              0 : Literal
              ; : Punctuation
            end : Keyword
              ; : Punctuation
             if : Keyword
             ja : Identifier
              3 : Literal
           then : Keyword
          begin : Keyword
             ta : Identifier
              : : Punctuation
              0 : Literal
             05 : Literal
              * : Operator
              p : Identifier
              * : Operator
              a : Identifier
              ; : Punctuation
            end : Keyword
           else : Keyword
             if : Keyword
             ja : Identifier
              3 : Literal
           then : Keyword
          begin : Keyword
             ta : Identifier
              : : Punctuation
              0 : Literal
             05 : Literal
              * : Operator
              p : Identifier
              * : Operator
              ; : Punctuation
            end : Keyword
           else : Keyword
          begin : Keyword
             ta : Identifier
              : : Punctuation
              0 : Literal
              ; : Punctuation
            end : Keyword
              ; : Punctuation
             if : Keyword
             jb : Identifier
      'manager' : Literals
           then : Keyword
          begin : Keyword
            tjb : Identifier
              : : Punctuation
        2000000 : Literal
              ; : Punctuation
            end : Keyword
           else : Keyword
             if : Keyword
             jb : Identifier
   'supervisor' : Literals
           then : Keyword
          begin : Keyword
            tjb : Identifier
              : : Punctuation
        1500000 : Literal
              ; : Punctuation
            end : Keyword
           else : Keyword
             if : Keyword
             jb : Identifier
       'mandor' : Literals
           then : Keyword
          begin : Keyword
            tjb : Identifier
              : : Punctuation
        1000000 : Literal
              ; : Punctuation
            end : Keyword
           else : Keyword
          begin : Keyword
            tjb : Identifier
              : : Punctuation
              0 : Literal
              ; : Punctuation
            end : Keyword
              ; : Punctuation
            pjk : Identifier
              : : Punctuation
              0 : Literal
            025 : Literal
              * : Operator
              p : Identifier
              ; : Punctuation
             js : Identifier
              : : Punctuation
              0 : Literal
             01 : Literal
              * : Operator
              p : Identifier
              ; : Punctuation
             gb : Identifier
              : : Punctuation
              ( : Punctuation
             gp : Identifier
              + : Operator
             is : Identifier
              + : Operator
              a : Identifier
              + : Operator
             jb : Identifier
              ) : Punctuation
              - : Operator
              ( : Punctuation
            pjk : Identifier
              + : Operator
              s : Identifier
              ) : Punctuation
              ; : Punctuation
        writeln : Identifier
              ( : Punctuation
'Tunjangan Istri=' : Literals
              , : Punctuation
            tis : Identifier
              : : Punctuation
              3 : Literal
              : : Punctuation
              2 : Literal
              ) : Punctuation
              ; : Punctuation
        writeln : Identifier
              ( : Punctuation
'Tunjangan Anak=' : Literals
              , : Punctuation
             ta : Identifier
              : : Punctuation
              3 : Literal
              : : Punctuation
              2 : Literal
              ) : Punctuation
              ; : Punctuation
        writeln : Identifier
              ( : Punctuation
'Tunjangan Jabatan=' : Literals
              , : Punctuation
            tjb : Identifier
              : : Punctuation
              3 : Literal
              : : Punctuation
              2 : Literal
              ) : Punctuation
              ; : Punctuation
        Writeln : Identifier
              ( : Punctuation
       'Pajak=' : Literals
              , : Punctuation
            pjk : Identifier
              : : Punctuation
              3 : Literal
              : : Punctuation
              2 : Literal
              ) : Punctuation
              ; : Punctuation
        writeln : Identifier
              ( : Punctuation
   'Jamsostek=' : Literals
              , : Punctuation
             js : Identifier
              : : Punctuation
              3 : Literal
              : : Punctuation
              2 : Literal
              ) : Punctuation
              ; : Punctuation
        writeln : Identifier
              ( : Punctuation
 'Gaji Bersih=' : Literals
              , : Punctuation
             gb : Identifier
              : : Punctuation
              3 : Literal
              : : Punctuation
              2 : Literal
              ) : Punctuation
              ; : Punctuation
        readkey : Identifier
              ; : Punctuation
            end : Keyword

Tidak ada komentar:

Posting Komentar