Sebelum Kita Membahas Mengenai Terapan Teori Bahasa dan Otomata, Kita Harus mengerti Sejarah yang Menggelutinya dulu.....
Sejarah Teori bahasa dan automata
Otomata bermula sebelum komputer ada pada teori di bidang sistem logika matematika atau formal, ilmuwan David Hilbert telah mencoba menciptakan algoritma umum untuk pembuktian (seluruh) persoalan matematika secara otomatis yaitu mampu menentukan salah benarnya sembarang prosisi matematika.
Tahun 1931, KurtGdel mempublikasikan teori ketidaklengkapan dimana membuktikan prosedur/algoritma yang dikehendaki David Hilbert tersebut tidak akan pernah ada. KurtGdel membangun rumus di kalkulus predikat yang diterapkan pada bilangan bulat yang memiliki pernyataan-pernyataan definisi yang tidak dapat dibuktikan maupun dibantah di dalam sistem logika yang mungkin dibangun manusia.
Formalisasi argumen teorema ketidaklengkapan KurtGdel ini berikut penjelasan dan formalisasi selanjutnya dari prosedur efektif secara intuisi merupakan salah satu pencapaian intelektual terbesar abad 20, yaitu abad dimana formalisasi berkembang semarak.
Pengembangan teori otomata, komputasi dan teori bahasa berikutnya difasilitasi perkembangan bidang psyco-linguistic. Bidang psyco-linguistic berupaya menjawab pertanyan-pertanyan berikut:
- Apakah bahasa secara umum?
- Bagaimana manusia mengembangkan bahasa?
- Bagaimana manusia memahami bahasa?
- Bagaimana manusia mengajarkan bahasa ke anak-anaknya?
- Apa gagasan-gagasan yang dapat dinyatakan dan bagaimana caranya?
- Bagaimana manusia membangun kalimat-kalimat dari gagasan-gagasan yang berada di pikirannya?
Sekitar tahun 1950-an, Noam Chomsky menciptakan model matematika sebagai sarana untuk mendeskripsikan bahasa serta menjawab pertanyaan-pertanyaan di atas. Saat ini dimulai pendalaman bidang bahasa computer.
Perbedaan antara bahasa komputer dan bahasa manusia adalah sampai sekarang belum diketahuinya bagaimana cara manusia mengartikan bahasa, sementara dengan pasti dapat mengartikan bahasa pada komputer.Noam Chomsky mengemukakan perangkat format disebut grammar untuk memodelkan properti-properti bahasa.Grammar berisi sejumlah aturan serta menspesifikasikan bahasa tertentu.Bahasa berisi semua string yang dapat dihasilkan menggunakan aturan-aturan grammar.
Meski pembahasan Chomsky terutama ditujukan untuk bahasa alami, grammar mempunyai nilai/manfaat sangat besar di ilmu informatika/komputer karena pencapaian ini digunakan untuk mendeskripsikan dan mendefinisikan sintaks bahasa pemrograman dan bahasa-bahasa formal lainnya.
Grammar diterapkan pada perancangan kompilator dan bidang-bidang di ilmu komputer.McCulloch dan Pittsmengemukakan Mesin Abstrak sederhana yaitu finite automata untuk memodelkan neuron nets.Finite automata juga digunakan untuk merancang switching circuit.
Studi mengenai teori otomata terkait bidang-bidang lain di ilmu komputer.Kemudian ekivalensi antara finite automata dan ekspresi reguler (reguler expression) dikemukakan Stephen Kleene. Sejak saat itu teori bahasa dikaitkan secara erat dengan teori bahasa formal. ubungan teori otomata dan teori pengkodean (coding theory) juga banyak diteliti.
Turing machine seperti komputer modern saat ini dapat mengolah (simbol-simbol di tape) dan mengahasilkan keluaran (simbol-simbol yang berada di tapenya setelah berakhirnya sebarisan pergerakkan) merupakan karya teoritis dari Alan Turing.
- Penerapan Bahasa dan Automata Dalam konsep Keilmuan
Teori automata yang selama ini lebih banyak diterapkan dalam bidang tata bahasa formal khususnya dalam pengembangan sebuah compiler, juga dapat digunakan untuk melakukan pemodelan dan pendekatan pemecahan masalah masalah yang berkaitan dengan aplikasi-aplikasi di dalam bidang kecerdasan Buatan. Bahkan pada beberapa masalah spesifik yang berkaitan dengan keputusan dan model mesin hanya tepat jika solusinya didasarkan pada solusi automata.Kelebihan penggunaan teori automata dibanding pohon keputusan dalam memodelkan ruang keadaan adalah lebih sederhana jika terdapat beberapa keadaan yang berulang. Penerapan teoritis automata untuk pengembangan suatu sistem adalah dengan menggunakan teori automata sebagai sebuah paradigma yang menggabungkan spesifikasi sistem, verifikasi dan sintesis.
A. Kecerdasan buatan
Kecerdasan Buatan adalah bidang ilmu yang mendasarkan bagaimana sebuah komputer bisa bertindak seperti dan sebaik manusia. Dewasa ini, Penggunaan kecerdasan buatan dibutuhkan diberbagai disiplin ilmu. Irisan antara psikologi dan kecerdasan Buatan melahirkan area cognition and psycolinguistic. Irisan antara teknik elektro dengan kecerdasan buatan melahirkan ilmu : pengolahan citra, teori kendali, pengenalan pola dan robotika. Irisan ilmu manajemen dan kecerdasan buatan menghasilkan sistem pendukung keputusan. Adanya irisan penggunaan kecerdasan buatan diberbagai disiplin ilmu menyebabkab cukup rumitnya untuk mengklasifikasikan lingkup bidang ilmu kecerdasan buatan, sehingga pengklasifikasian lingkup kecerdasan buatan didasarkan pada output yang diberikan yaitu pada aplikasi komersial.
Lingkup aplikasi kecerdasan buatan meliputi :
1. sistem pakar
2. Pengolahan bahasa alami
3. Pengenalan ucapan
4. Robotika dan sistem sensor
5. Computer vision
6. Problem solving and planning
7. Permainan
Contoh Penerapan Teori Bahasa & Otomata
seperti : "bikin aplikasi kalkulator pertambahan pake java"
contoh sederhana gw sekarang bikin apliaksi kalkulator pertambahan (simple aja) pake automata jadi aturan produksinya kayak gini : S = A + A + A + …
A = 1…n
n = (Max Integer)
jadi sekarang tingal kita buat DFA nya , singkat cerita dah gw buat kayak gini : wew, jadi gini keterangannya :
A = State Awal
B = Final State
A(1…9) -> B
B(0…9) -> B
B(+) -> C
C(1…9) -> B
btw, ngerti gak ama diagram DFA diatas? kalo gak ngerti mungkin harus belajar automata dulu sekarang kita bua refresentasi dari A, B, C nah karena A, B, C punya kesamaan, yaitu sebagai State jadi kita kita buat aja interface untuk State yang isinya validateCharacter(char), isFinalState(), isStartState() :
23 | public interface State { |
25 | public boolean isStartState(); |
27 | public boolean isFinalState(); |
29 | public State validateChar(Character c) throws Exception; |
Sekarang kita buat untuk penampung karakter nya :
25 | public interface CharHelper { |
27 | public List acceptedCharacters(); |
29 | public State getState(); |
sekarang kita buat implementasinya :
ini implementasi CharHelper :
25 | public class DefaultCharHelper implements CharHelper { |
29 | private List acceptedCharacters; |
31 | public DefaultCharHelper() { |
34 | public DefaultCharHelper(State state, List acceptedCharacters) { |
36 | this .acceptedCharacters = acceptedCharacters; |
39 | public void setAcceptedCharacters(List acceptedCharacters) { |
40 | this .acceptedCharacters = acceptedCharacters; |
43 | public void setState(State state) { |
47 | public List acceptedCharacters() { |
48 | return acceptedCharacters; |
51 | public State getState() { |
ini implementasi State :
26 | public class DefaultState implements State { |
28 | private boolean startState; |
30 | private boolean finalState; |
32 | private List charHelpers = new LinkedList(); |
34 | public DefaultState( boolean startState, boolean finalState) { |
35 | this .startState = startState; |
36 | this .finalState = finalState; |
39 | public DefaultState( boolean startState, boolean finalState, List charHelpers) { |
40 | this .startState = startState; |
41 | this .finalState = finalState; |
42 | this .charHelpers = charHelpers; |
45 | public void addCharHelper(CharHelper charHelper) { |
46 | charHelpers.add(charHelper); |
49 | public boolean isStartState() { |
53 | public boolean isFinalState() { |
57 | public State validateChar(Character c) throws Exception { |
58 | for (CharHelper helper : charHelpers) { |
59 | if (helper.acceptedCharacters().contains(c)) { |
60 | return helper.getState(); |
63 | throw new Exception(); |
dan sekarang kita buat StateManagernya :
27 | public class StateManager { |
31 | public StateManager(State state) { |
35 | public Integer calculate(String input) throws Exception { |
36 | char [] chars = input.toCharArray(); |
38 | for ( char c : chars) { |
40 | state = state.validateChar(c); |
44 | if (!state.isFinalState()) { |
46 | throw new Exception(); |
49 | return calculateValidString(input); |
52 | protected Integer calculateValidString(String input) { |
53 | StringTokenizer tokenizer = new StringTokenizer(input, "+" ); |
54 | List strings = new ArrayList(); |
56 | while (tokenizer.hasMoreTokens()) { |
57 | strings.add(tokenizer.nextToken()); |
61 | for (String string : strings) { |
62 | result += Integer.parseInt(string); |
setelah itu tinggal buat deklarasi karakter yang diterima ama aplikasi yang kita buat , karena dari diagram tadi kita nerima input cuma 0…9 dan karakter ‘+’ jadi kayak gini dibuatnya, dan sebelumnya kita kumpulkan juga menjadi group :
26 | public class StateUtilities { |
28 | private static List zeroToNine; |
30 | private static List oneToNine; |
32 | private static List operators; |
34 | public static List getOneToNine() { |
35 | if (oneToNine == null ) { |
36 | oneToNine = new ArrayList(); |
50 | public static List getOperators() { |
51 | if (operators == null ) { |
52 | operators = new ArrayList(); |
58 | public static List getZeroToNine() { |
59 | if (zeroToNine == null ) { |
60 | zeroToNine = new ArrayList(); |
sekarang tinggal buat aplikasinya :
30 | public static void main(String[] args) { |
32 | DefaultState A = new DefaultState( true , false ); |
33 | DefaultState B = new DefaultState( true , true ); |
34 | DefaultState C = new DefaultState( true , false ); |
37 | CharHelper helper1 = new DefaultCharHelper(B, StateUtilities.getOneToNine()); |
38 | CharHelper helper2 = new DefaultCharHelper(B, StateUtilities.getZeroToNine()); |
39 | CharHelper helper3 = new DefaultCharHelper(C, StateUtilities.getOperators()); |
40 | CharHelper helper4 = new DefaultCharHelper(B, StateUtilities.getOneToNine()); |
43 | A.addCharHelper(helper1); |
44 | B.addCharHelper(helper2); |
45 | B.addCharHelper(helper3); |
46 | C.addCharHelper(helper4); |
49 | StateManager manager = new StateManager(A); |
52 | String input = JOptionPane.showInputDialog( "Masukkan Input Pertambahan : " ); |
55 | JOptionPane.showMessageDialog( null , manager.calculate(input)); |
56 | } catch (Exception e) { |
57 | JOptionPane.showMessageDialog( null , "input yang dimasukkan tidak valid" ); |
sekarang tinggal jalankan kan keluar dialog seperti ini :
misal gw masukin data seperti ini :
dan setelah ditekan ok, maka keluar dialog seperti ini :
artinya hasil penjumlahan adalah 1110, nah kalo gw masukin input yang error misal kayak gini :
maka keluar dialog kayak gini :
Hahahahaa, ternyata buat bikin kalkulator pertambahan aja rumit ya kalo pake automata , apalagi buat yang Lengkap......sido PUNYENG.com
- Http//www.globalkomputer.com
- http://eecchhoo.wordpress.com
- http://indoprogrammer.blogspot.com
Sumber buku
- B. Hariyanto, Teori Bahasa, Otomata, dan Komputasi serta terapannya, Informatika Bandung
oleh
Nama : Siti Nur Fatikhah
NIM : 120911079
Kelas : IF 09 B
Tidak ada komentar:
Posting Komentar