Thursday, July 22, 2010

Program DFA pada Java

Deterministic Finite Automata (DFA) adalah satu jenis dari Finite Automata (FA) yang berguna sebagai pengenal Bahasa Regular. Karakteristik kunci dari DFA ini adalah tidak membolehkan membaca dari satu transisi untuk satu simbol masukan berisi string berupa karakter / abjad yang sama. Dengan kata lain untuk masukan simbol yang sama DFA tidak bisa mentrasisikannya ke beberapa state yang berbeda. Jika digunakan tabel trasisi untuk mempresentasikan fungsi DFA, maka masing-masing isian di tabel trasisi adalah satu state tunggal (berhingga) dan dapat berpindah ke state lain berdasarkan input dan fungsi transisi. Konsekuensinya, pada DFA lebih mudah mementukan apakah suatu string masukan diterima, karena hanya terdapat paling banyak satu jalur dari state awal. Arah pergerakan (Head) dari state awal hingga state akhir hanya bisa maju saja (ke kanan). Jika jalur simbol masukan dimisalkan sebagai 'pita', maka setelah membaca atau simbol pada pita, kepala pita akan maju ke posisi simbol berikutnya dengan kata lain bersifat otoatis. DFA tidak bisa mengingat, DFA hanya bisa membaca aau mengingat state terkini.

Dibawah ini akan doberikan Source code dari Program DFA pada bahasa Java. State DFA bisa diliha dari gambar.

Source code

import java.util.Scanner;
import java.io.*;

public class StringDFA{
    public static class dfa {
        private static final int A = 0;
        private static final int B = 1;
        private static final int C = 2;
        private int state;
       
        private int gambar(int x, char c){
            switch(x){
                case A: switch(c){
                    case '0': return B;
                    case '1': return A;
                }
                case B: switch(c){
                    case '0': return B;
                    case '1': return C;
                }
                case C: switch(c){
                    case '0': return C;
                    case '1': return C;
                }
                default: return C;
            }
        }
       
        public void awal(){
            state = A;
        }
       
        public void proses(String input){
            for (int i=0; i
                char c = input.charAt(i);
                state = gambar(state, c);
            }
        }
       
        public boolean akhir(){
            return state == C;
        }
    }
   
    public static void main (String[] args){
        dfa test = new dfa();
        Scanner scan = new Scanner(System.in);
        System.out.println ("********************************");
        System.out.println ("*        Program Mesin DFA        *");
        System.out.println ("*     Dengan RE : 1*00*1(0+1)*    *");
        System.out.println ("*                                *");
        System.out.println ("********************************");
        System.out.print ("Input String : ");
        String x = scan.nextLine();
       
        while (x!=null){
            test.awal();
            test.proses(x);
            if (test.akhir())
                System.out.println ("String "+x+" DITERIMA");
            else
                System.out.println ("String "+x+" DITOLAK");
            System.out.print ("\nInput String : ");
            x = scan.nextLine();
        }
    }
}


Untuk program bisa didownload di sini : DOWNLOAD

1 comment: