Implementasi Teori Bahasa Dan
Implementasi Teori Bahasa Dan
Automata – Aplikasi Kalkulator
Automata – Aplikasi Kalkulator
Sederhana Dengan Java
Sederhana Dengan Java
Landasan Teori
Landasan Teori
Teori bahasa dan automata merupakan salah satu komponen ilmu informatika, teori ini Teori bahasa dan automata merupakan salah satu komponen ilmu informatika, teori ini merupakan ide dan model fundamental yang mendasari sebuah system komputasi, teori ini juga merupakan ide dan model fundamental yang mendasari sebuah system komputasi, teori ini juga bisa disebut sebag
bisa disebut sebagai sebuai sebuah teknik reah teknik rekayasa untuk perankayasa untuk perancangan scangan sistem kompistem komputasi.utasi.
Beberapa bidang ilmu lain yang mendukung pengembangan metode komputasi : Beberapa bidang ilmu lain yang mendukung pengembangan metode komputasi :
1.
1. BiologiBiologi
Mempelajari jaringan neuron yang mengilhami di
Mempelajari jaringan neuron yang mengilhami di temutemukanannya finite kanannya finite automata.automata. 2.
2. Rangkaian ElektronikaRangkaian Elektronika
Mempelajari teori switching sebagai perancangan perangkat keras menggunakan finite Mempelajari teori switching sebagai perancangan perangkat keras menggunakan finite automata.
automata.
3.
3. MatematikaMatematika
Mengembangkan system logika yang berguna untuk masalah pembuktian automata. Mengembangkan system logika yang berguna untuk masalah pembuktian automata. Beberapa model komputasi dalam automata:
Beberapa model komputasi dalam automata:
Finite automata (FA) Finite automata (FA)
Sering juga disebut dengan Finite State Automata (FSA). Terdiri dari Deterministic Finite Sering juga disebut dengan Finite State Automata (FSA). Terdiri dari Deterministic Finite Automata (DFA) dan Non Deterministik Finite Automata (NDFA). Teori dasar dari FA sangat Automata (DFA) dan Non Deterministik Finite Automata (NDFA). Teori dasar dari FA sangat umum yaitu system pada saat berada di salahsatu state dari sejumlah state bergerak diantara umum yaitu system pada saat berada di salahsatu state dari sejumlah state bergerak diantara state-state secara dapat diproduksi yang bergantung pada masukan ke system. Salah satu state-state secara dapat diproduksi yang bergantung pada masukan ke system. Salah satu penerapanny
penerapannya a adalah adalah kompilasi kompilasi / / translasi translasi bahasa bahasa pemopemograman graman tingkat tingkat tinggi tinggi menjamenjadi di bahasbahasaa mesin yang ekivalen. Finite automata merupakan jenis otomata yang tidak memiliki memori mesin yang ekivalen. Finite automata merupakan jenis otomata yang tidak memiliki memori sem
sementara, entara, FA adalah kelas mesin dengan kemampuFA adalah kelas mesin dengan kemampuan palian paling terbatas.ng terbatas.
Pushdown Automata (PA) Pushdown Automata (PA)
Terdiri dari Deterministic Pushdown Automata (DFA) dan Non Deterministik Pushdown Terdiri dari Deterministic Pushdown Automata (DFA) dan Non Deterministik Pushdown Automata (NDFA). PA memiliki memori sementara dengan mekanisme stack LIFO (Last In Automata (NDFA). PA memiliki memori sementara dengan mekanisme stack LIFO (Last In First Out)
First Out)..
Turing Machine (TM) Turing Machine (TM)
Memiliki mekanisme Random Access Memory. Memiliki mekanisme Random Access Memory.
Dalam teori bahasa dan Automata digunakan model state (State Machine Model) atau biasa disebut model transisi (State Transition Model), pengembangan teori automata difasilitasi dengan perkembangan bidang Psycho Linguistik.
Teori Bahasa
Teori bahasa membicarakan bahasa formal (formal language), terutama untuk kepentingan perancangan kompilator (compiler) dan pemroses naskah (text processor). Bahasa formal adalah kumpulan kalimat. Semua kalimat dalam sebuah bahasa dibangkitkan oleh sebuah tata bahasa (grammar) yang sama. Sebuah bahasa formal bisa dibangkitkan oleh dua atau lebih tata bahasa berbeda. Dikatakan bahasa formal karena grammar diciptakan mendahului pembangkitan setiap kalimatnya. Bahasa manusia bersifat sebaliknya; grammar diciptakan untuk meresmikan kata-kata yang hidup di masyarakat. Dalam pembicaraan selanjutnya ‘bahasa formal’ akan disebut ‘bahasa’ saja..
Pada pembuatan programnya, saya akan membuat aplikasi kalkulator pertambahan yang mengimplementasikan konsep automata. Secara sederhana programnya akan seperti ini.
S = A + A + A + … A = 1…n
n = (Max Integer)
Berikut ini gambar DFA program.
Penjelasannya sebagai berikut.
A = State Awal B = Final State
A(1…9) -> B
B(0…9) -> B B(+) -> C
C(1…9) -> B
Selanjutnya buatkan representasi dari A, B, C. Karena A, B, C punya kesamaan yaitu sebagai State jadi kita kita buat aja interface untuk State yang isinya
validateCharacter(char), isFinalState(), isStartState()
public interface State {
public boolean isStartState(); public boolean isFinalState();
public State validateChar(Character c) throws Exception; }
Berikutnya buatkan penampung karakter.
public interface CharHelper {
public List acceptedCharacters(); public State getState();
}
Sekarang dibuatkan implementasi CharHelper.
public class DefaultCharHelper implements CharHelper { private State state;
private List acceptedCharacters; public DefaultCharHelper() { }
public DefaultCharHelper(State state, List acceptedCharacters) { this.state = state;
this.acceptedCharacters = acceptedCharacters; }
public void setAcceptedCharacters(List acceptedCharacters) { this.acceptedCharacters = acceptedCharacters; } public void setState(State state) { this.state = state; } public List acceptedCharacters() { return acceptedCharacters; } public State getState() { return state; } }
Implementasi State :
public class DefaultState implements State { private boolean startState;
private boolean finalState;
private List charHelpers = new L inkedList();
public DefaultState(boolean startState, boolean finalState) { this.startState = startState;
this.finalState = finalState; }
public DefaultState(boolean startState, boolean finalState, List charHelpers) {
this.startState = startState; this.finalState = finalState; this.charHelpers = charHelpers; }
public void addCharHelper(CharHelper charHelper) { charHelpers.add(charHelper); } public boolean isStartState() { return startState; } public boolean isFinalState() { return finalState; }
public State validateChar(Character c) throws Exception { for (CharHelper helper : charHelpers) {
if (helper.acceptedCharacters().contains(c)) { return h elper.getState(); } } throw new Exception(); } }
Berikutnya buatkan StateManager.
public class StateManager { private State state;
public StateManager(State state) { this.state = state;
}
public Integer calculate(String input) throws Exception { char[] chars = i nput.toCharArray();
for (char c : chars) { // cek input
}
// cek apakah state akhir merupakan final state if (!state.isFinalState()) {
// jika tidak berarti error throw new Exception(); }
return calculateValidString(input); }
protected Integer calculateValidString(String input) {
StringTokenizer tokenizer = new StringTokenizer(input, "+"); List strings = new ArrayList();
while (tokenizer.hasMoreTokens()) { strings.add(tokenizer.nextToken()); }
Integer result = 0;
for (String string : strings) {
result += Integer.parseInt(string); }
return result; }
}
Setelah itu tinggal buat deklarasi karakter yang diterima oleh aplikasi yang telah dibuat, karena dari diagram tadi kita nerima input cuma 0…9 dan karakter ‘+’ jadi kayak gini dibuatnya dan sebelumnya dikumpulkan juga menjadi group.
public class StateUtilities {
private static List zeroToNine; private static List oneToNine; private static List operators; public static List getOneToNine() {
if (oneToNine == null) { oneToNine = new ArrayList(); oneToNine.add('1'); oneToNine.add('2'); oneToNine.add('3'); oneToNine.add('4'); oneToNine.add('5'); oneToNine.add('6'); oneToNine.add('7'); oneToNine.add('8'); oneToNine.add('9'); } return oneToNine; }
public static List getOperators() { if (operators == null) {
operators = new ArrayList(); operators.add('+');
}
return operators; }
public static List getZeroToNine() { if (zeroToNine == null) { zeroToNine = new ArrayList(); zeroToNine.add('0'); zeroToNine.add('1'); zeroToNine.add('2'); zeroToNine.add('3'); zeroToNine.add('4'); zeroToNine.add('5'); zeroToNine.add('6'); zeroToNine.add('7'); zeroToNine.add('8'); zeroToNine.add('9'); } return zeroToNine; } }
Berikutnya jalankan programnya, maka akan keluar dialog seperti ini.
Saya coba dengan memasukkan seperti berikut.
Hasil penjumlahan adalah 1110, berikutnya saya mencoba memasukkan input supaya terjadi error, seperti berikut.
Referensi
http://eecchhoo.wordpress.com/2009/01/04/teori-bahasa-dan-automata-bikin-aplikasi-kalkulator-pertambahan-pake-java/ Tanggal 10 Sept 2010, Pukul 19.27 WIB
http://farhan-hariri88.blogspot.com/2010/07/teori-bahasa-dan-automata.html
Tanggal 10 Sept 2010, Pukul 19.30 WIB
http://prayoga.wordpress.com/category/teori-bahasa-dan-automata/ Tanggal 10 Sept
2010, Pukul 19.38 WIB