Aplikasi Deterministic Finite Automata (DFA) dengan Delphi: -Finite State Automata berdasarkan kemampuan berubah state-statenya bisa di kelompokkan ke dalam deterministic maupun non-deterministic.
DFA mempunyai ciri utama yaitu daru satu state tepat satu state berikutnya untuk setiap simbil masukan yang diterima.

Aplikasi Deterministic Finite Automata (DFA) dengan Delphi

Dan di bawah ini List sourcode nya Aplikasi Deterministic Finite Automata (DFA) dengan Delphi :

procedure Ttfmutama.Button2Click(Sender: TObject);
begin
close;
end;
procedure Ttfmutama.FSAfungsi(state : string; transisi:string);
var
i: integer;
begin
for i:=i to strgrdtransisi.RowCount do
begin
if(state='q0') and (transisi='a') then
begin
state:=strgrdtransisi.cells[1,1];
end;

if(state='q0') and (transisi='b') then
begin
state:=strgrdtransisi.cells[2,1];
end;

if(state='q1') and (transisi='a') then
begin
state:=strgrdtransisi.cells[1,2];
end;

if(state='q1') and (transisi='b') then
begin
state:=strgrdtransisi.cells[2,1];
end;

statehasil:=state;
end;

end;

procedure Ttfmutama.Button1Click(Sender: TObject);
var
 j: Integer;
 i: Integer;
 begin
 for j:=1 to strgrdtransisi.RowCount -1 do
 begin
 if (strgrdtransisi.Cells[1,j] ='') and
 (strgrdtransisi.Cells[2,j]='') then
 begin
 showmessage ('bukan GRAF DFA, karena ada input yang kosong');
 end
 else begin
 showmessage('Graf yang dibuat dari tabel transisi adalah DFA');
 end;

end;

end;

procedure Ttfmutama.Button3Click(Sender: TObject);

var
 jumlahstring: integer;
 i,j,k: integer;
 tampung : string;
 stateawal :string;
 stateakhir: string;
begin

if(edtstateawal.Text='') then
 begin
  ShowMessage('state awal harus diisi');
  edtstateawal.SetFocus;
  Exit;
 end;

if(edtstateakhir.Text='') then
 begin
  ShowMessage('state akhir harus diisi');
  edtstateakhir.SetFocus;
  Exit;
 end;

if(edtstateawal.Text='') then
 begin
 ShowMessage('state awal harus diisi');
 edtstateawal.SetFocus;
  Exit;
 end;

 stateawal := edtstateawal.Text;
 stateakhir := edtstateakhir.Text;
 jumlahstring:=0;
 k:=1;

 for i := 1 to length(edtstateawal.Text) do
  begin
   tampung:='';

    for j := k to length(edtstateawal.Text) do
     begin
      tampung:=tampung+''+edtstateawal.Text[j];
     end;
   FSAfungsi(stateawal,edtstateawal.Text[i]);
   mmoketerangan.Lines.Add('('+stateawal+', '+tampung+') = ' + statehasil);
   stateawal:=statehasil;
   Inc(jumlahstring);
   k:=k+1;

   if statehasil='' then
   begin
       break;
   end;

  end;

  if (statehasil=stateakhir) and (jumlahstring=length(edtstateawal.Text)) then
   begin
    mmoketerangan.Lines.Add('String Diterima');
   end

  else
   begin
    mmoketerangan.Lines.Add('String di tolak');
   end;
end;

//mmoketerangan.clear;
//end;

procedure Ttfmutama.FormShow(Sender: TObject);
begin
//form /event/on show/klik dan tulis kode dibawah
 strgrdtransisi.cells[1,0]:='A';
 strgrdtransisi.cells[2,0]:='B';
 strgrdtransisi.cells[0,1]:='q0';
 strgrdtransisi.cells[0,2]:='q1';
 strgrdtransisi.cells[0,3]:='q2';
 strgrdtransisi.cells[1,1]:='q1';
 strgrdtransisi.cells[2,1]:='q0';
 strgrdtransisi.cells[1,2]:='q2';
 strgrdtransisi.cells[2,2]:='q1';
 strgrdtransisi.cells[1,3]:='q2';
 strgrdtransisi.cells[2,3]:='q2';
end;

procedure Ttfmutama.Button4Click(Sender: TObject);
begin
mmoketerangan.Text:='';
 {
 strgrdtransisi.Cells[1,1]:='';
 strgrdtransisi.Cells[1,2]:='';
 strgrdtransisi.Cells[1,3]:='';
 strgrdtransisi.Cells[2,1]:='';
 strgrdtransisi.Cells[2,2]:='';
 strgrdtransisi.Cells[2,3]:='';
 }
 edtstateawal.Text:='';
 Refresh;
end;