Rabu, 04 Mei 2011

Class Deterministic Finite Automata (DFA) dengan JAVA

Menerjemahkan gambar DFA dengan menggunakan JAVA digunakan pendekatan dengan switch case. Kenapa tidak dengan if else ? salah satu alasannya adalah apabila jumlah state sangat banyak, maka akan tidak efektif untuk kinerja program.
Berikut adalah contoh sebuah class DFA yang merupakan soal UTS no.4, Teknik Informatika,UWKS.


 1 /**
 2  *
 3  * @author Erfan
 4  */
 5 public class DFA1 {
 6 
 7 //REGULAR EXPRESSION = ab(a+b)*
 8 //deklarasi STATE dalam bentuk variabel
 9  private final int A=0;
10  private final int B=1;
11  private final int C=2;
12  private final int D=3;
13  private final int E=4;
14  private final int F=5;
15  private final int G=6;
16  private final int H=7;
17 
18  //definisi is_final untuk setiap state yang ada
19  private boolean final_state[]={false,true,false,true,true,true,false,true};
20 
21  //Variable penyimpan uji string
22  private String Uji;
23 
24  //Variabel kursor State
25  private int state;
26  
27  public DFA1(String input_string){
28  Uji=input_string;
29  //menghilangkan spasi pada string input
30  Uji=Uji.trim();
31  //membuat char input menjadi alphabet kecil
32  Uji=Uji.toLowerCase();
33  this.State_Awal();
34  this.Proses_Uji();
35  }
36 private void State_Awal(){
37     state=0;
38 }
39 
40 //function untuk menguji state pada diagram DFA
41 private int DFA(int x, char c){
42 switch(x){
43 case A: switch(c){
44         case 'a': return B;
45         case 'b': return C;
46     }
47     case B: switch(c){
48         case 'a': return  D;
49         case 'b': return E;
50     }
51     case C: switch(c){
52         case 'a': return C;
53         case 'b': return C;
54     }
55     case D: switch(c){
56         case 'a': return C;
57         case 'b': return E;
58     }
59     case E: switch(c){
60         case 'a': return F;
61         case 'b': return B;
62     }
63     case F:switch(c){
64         case 'a': return G;
65         case 'b': return H;
66     }
67     case G:switch(c){
68         case 'a': return G;
69         case 'b': return B;
70     }
71     case H:switch(c){
72         case 'a':return F;
73         case 'b':return H;
74     }
75 }
76 return 0;
77 }
78 
79 private void Proses_Uji(){
80 
81     for (int i=0;i < Uji.length();i++){
82     char c=Uji.charAt(i);
83     state=DFA(state,c);
84     }
85 
86 }
87 public boolean hasil_akhir(){
88     return final_state[state];
89     }
90 }
91 
92 

Catatan : class diatas dapat dengan mudah diubah, sesuai dengan gambar dfa yang akan digunakan.
yaitu dengan merubah jumlah variabel statenya dan switch case pada method DFA.

Unduh contoh aplikasi DFA dengan tampilan GUI sederhana.
Unduh disini

3 komentar: