Anda di halaman 1dari 8

Implementasi Teori Bahasa Dan Automata Aplikasi Kalkulator Sederhana Dengan Java

Landasan Teori
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 bisa disebut sebagai sebuah teknik rekayasa untuk perancangan sistem komputasi. Beberapa bidang ilmu lain yang mendukung pengembangan metode komputasi : 1. Biologi Mempelajari jaringan neuron yang mengilhami ditemukanannya finite automata. 2. Rangkaian Elektronika Mempelajari teori switching sebagai perancangan perangkat keras menggunakan finite automata. 3. Matematika Mengembangkan system logika yang berguna untuk masalah pembuktian automata. Beberapa model komputasi dalam automata: Finite automata (FA) 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 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 penerapannya adalah kompilasi / translasi bahasa pemograman tingkat tinggi menjadi bahasa mesin yang ekivalen. Finite automata merupakan jenis otomata yang tidak memiliki memori sementara, FA adalah kelas mesin dengan kemampuan paling terbatas. Pushdown Automata (PA) Terdiri dari Deterministic Pushdown Automata (DFA) dan Non Deterministik Pushdown Automata (NDFA). PA memiliki memori sementara dengan mekanisme stack LIFO (Last In First Out). Turing Machine (TM) Memiliki mekanisme Random Access Memory.

11-9-2010

TBA :Tugas I

Dani Rusda Taufani/ 10108645/IF-9

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 katakata 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 = 1n n = (Max Integer)

Berikut ini gambar DFA program.

Penjelasannya sebagai berikut.


A = State Awal B = Final State A(19) -> B B(09) -> B B(+) -> C

11-9-2010

TBA :Tugas I

Dani Rusda Taufani/ 10108645/IF-9

C(19) -> 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; } }

11-9-2010

TBA :Tugas I

Dani Rusda Taufani/ 10108645/IF-9

Implementasi State :
public class DefaultState implements State { private boolean startState; private boolean finalState; private List charHelpers = new LinkedList(); 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 helper.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 = input.toCharArray(); for (char c : chars) { // cek input state = state.validateChar(c);

11-9-2010

TBA :Tugas I

Dani Rusda Taufani/ 10108645/IF-9

} // 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 09 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) {

11-9-2010

TBA :Tugas I

Dani Rusda Taufani/ 10108645/IF-9

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.

Setelah ditekan OK, maka keluar dialog seperti ini.

11-9-2010

TBA :Tugas I

Dani Rusda Taufani/ 10108645/IF-9

Hasil penjumlahan adalah 1110, berikutnya saya mencoba memasukkan input supaya terjadi error, seperti berikut.

Maka akan keluar dialog sebagai berikut.

11-9-2010

TBA :Tugas I

Dani Rusda Taufani/ 10108645/IF-9

Referensi
http://eecchhoo.wordpress.com/2009/01/04/teori-bahasa-dan-automata-bikinaplikasi-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 http://id.wikipedia.org/wiki/Teori_otomata Tanggal 10 Sept 2010, Pukul 19.41 WIB

11-9-2010

TBA :Tugas I

Dani Rusda Taufani/ 10108645/IF-9