teori bahasa dan automata : bikin aplikasi kalkulator pertambahan pake java


Calculator wew, sekitar 5 bulan yang lau gw dapet matakuliah Teori Bahasa dan Automata, dan kata Mrs Mira (selaku dosen gw) katanya ini baik kalo kita mo buat bahasa pemrograman baru πŸ˜€

wew, kayaknya gak perlu dipelajari :D, wonk gw gak kan bikin bahasa pemrograman baru kok πŸ˜€

tapi ternyata pas kesini, ternyara di automata juga belajar “parsing”

wkkkkkkkkk πŸ‘Ώ

wah gak nyangka makin kesini ternyata automata makin penting :D, contohnya kalo kita bikin aplikasi yang butuh parsing, dan juga regex πŸ˜€

ternyata bahasa pemrograman yang dimaksud tuh bukan hanya kayak java, C++, tapi bisa juga MySQL πŸ˜€

jadi nanti gw pengennya bikin bahasa SQL baru, jadi kalo biasanya kita pake “SELECT * FROM TABLENAME”, nanti gw pengennya kayak gini “TAMPILKAN SELURUH DATA DARI TABEL ORANG” heheheh, kayaknya keren!!!!

nach 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 :D, singkat cerita dah gw buat kayak gini :

DFA

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() πŸ˜€ :

/*
 *  BACA DENGAN TELITI !!!
 * 
 *  Anda boleh menggunakan, mengubah, menghapus, menambah, dan
 *  melakukan hal yang anda inginkan ke dalam source code ini.
 * 
 *  Dan saya tidak bertanggung jawab atas kesalahan,
 *  bug, atau keanehan yang ada dalam source code ini, dan
 *  saya juga TIDAK MENERIMA PERTANYAAN dari Anda
 *  mengenai isi source code ini.
 * 
 *  Semoga source code ini bermanfaat bagi Anda, dan juga
 *  bermanfaat bagi project yang sedang Anda buat.
 * 
 *  Salam saya, Eko Kurniawan Khannedy
 */
package org.eecchhoo.wordpress.automata;

/**
 *
 * @author echo
 */
public interface State {

    public boolean isStartState();

    public boolean isFinalState();

    public State validateChar(Character c) throws Exception;
}

sekarang kita buat untuk penampung karakter nya :

/*
 *  BACA DENGAN TELITI !!!
 * 
 *  Anda boleh menggunakan, mengubah, menghapus, menambah, dan
 *  melakukan hal yang anda inginkan ke dalam source code ini.
 * 
 *  Dan saya tidak bertanggung jawab atas kesalahan,
 *  bug, atau keanehan yang ada dalam source code ini, dan
 *  saya juga TIDAK MENERIMA PERTANYAAN dari Anda
 *  mengenai isi source code ini.
 * 
 *  Semoga source code ini bermanfaat bagi Anda, dan juga
 *  bermanfaat bagi project yang sedang Anda buat.
 * 
 *  Salam saya, Eko Kurniawan Khannedy
 */
package org.eecchhoo.wordpress.automata;

import java.util.List;

/**
 *
 * @author echo
 */
public interface CharHelper {

    public List acceptedCharacters();

    public State getState();
}

sekarang kita buat implementasinya :

ini implementasi CharHelper :

/*
 *  BACA DENGAN TELITI !!!
 * 
 *  Anda boleh menggunakan, mengubah, menghapus, menambah, dan
 *  melakukan hal yang anda inginkan ke dalam source code ini.
 * 
 *  Dan saya tidak bertanggung jawab atas kesalahan,
 *  bug, atau keanehan yang ada dalam source code ini, dan
 *  saya juga TIDAK MENERIMA PERTANYAAN dari Anda
 *  mengenai isi source code ini.
 * 
 *  Semoga source code ini bermanfaat bagi Anda, dan juga
 *  bermanfaat bagi project yang sedang Anda buat.
 * 
 *  Salam saya, Eko Kurniawan Khannedy
 */
package org.eecchhoo.wordpress.automata;

import java.util.List;

/**
 *
 * @author echo
 */
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;
    }
}

ini implementasi State :

/*
 *  BACA DENGAN TELITI !!!
 * 
 *  Anda boleh menggunakan, mengubah, menghapus, menambah, dan
 *  melakukan hal yang anda inginkan ke dalam source code ini.
 * 
 *  Dan saya tidak bertanggung jawab atas kesalahan,
 *  bug, atau keanehan yang ada dalam source code ini, dan
 *  saya juga TIDAK MENERIMA PERTANYAAN dari Anda
 *  mengenai isi source code ini.
 * 
 *  Semoga source code ini bermanfaat bagi Anda, dan juga
 *  bermanfaat bagi project yang sedang Anda buat.
 * 
 *  Salam saya, Eko Kurniawan Khannedy
 */
package org.eecchhoo.wordpress.automata;

import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author echo
 */
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();
    }
}

dan sekarang kita buat StateManagernya :

/*
 *  BACA DENGAN TELITI !!!
 * 
 *  Anda boleh menggunakan, mengubah, menghapus, menambah, dan
 *  melakukan hal yang anda inginkan ke dalam source code ini.
 * 
 *  Dan saya tidak bertanggung jawab atas kesalahan,
 *  bug, atau keanehan yang ada dalam source code ini, dan
 *  saya juga TIDAK MENERIMA PERTANYAAN dari Anda
 *  mengenai isi source code ini.
 * 
 *  Semoga source code ini bermanfaat bagi Anda, dan juga
 *  bermanfaat bagi project yang sedang Anda buat.
 * 
 *  Salam saya, Eko Kurniawan Khannedy
 */
package org.eecchhoo.wordpress.automata;

import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

/**
 *
 * @author echo
 */
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);
        }

        // 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 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 :

/*
 *  BACA DENGAN TELITI !!!
 * 
 *  Anda boleh menggunakan, mengubah, menghapus, menambah, dan
 *  melakukan hal yang anda inginkan ke dalam source code ini.
 * 
 *  Dan saya tidak bertanggung jawab atas kesalahan,
 *  bug, atau keanehan yang ada dalam source code ini, dan
 *  saya juga TIDAK MENERIMA PERTANYAAN dari Anda
 *  mengenai isi source code ini.
 * 
 *  Semoga source code ini bermanfaat bagi Anda, dan juga
 *  bermanfaat bagi project yang sedang Anda buat.
 * 
 *  Salam saya, Eko Kurniawan Khannedy
 */
package org.eecchhoo.wordpress.automata;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author echo
 */
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;
    }
}

sekarang tinggal buat aplikasinya :

/*
 *  BACA DENGAN TELITI !!!
 * 
 *  Anda boleh menggunakan, mengubah, menghapus, menambah, dan
 *  melakukan hal yang anda inginkan ke dalam source code ini.
 * 
 *  Dan saya tidak bertanggung jawab atas kesalahan,
 *  bug, atau keanehan yang ada dalam source code ini, dan
 *  saya juga TIDAK MENERIMA PERTANYAAN dari Anda
 *  mengenai isi source code ini.
 * 
 *  Semoga source code ini bermanfaat bagi Anda, dan juga
 *  bermanfaat bagi project yang sedang Anda buat.
 * 
 *  Salam saya, Eko Kurniawan Khannedy
 */
package org.eecchhoo.wordpress.automata;

import javax.swing.JOptionPane;

/**
 *
 * @author echo
 */
public class CalculatorPertambahan {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // Buat State (Dalam Diagram Sebagai Lingkaran)
        DefaultState A = new DefaultState(true, false);
        DefaultState B = new DefaultState(true, true);
        DefaultState C = new DefaultState(true, false);

        // Buat helper (Dalam Diagram Sebagai Garis)
        CharHelper helper1 = new DefaultCharHelper(B, StateUtilities.getOneToNine());
        CharHelper helper2 = new DefaultCharHelper(B, StateUtilities.getZeroToNine());
        CharHelper helper3 = new DefaultCharHelper(C, StateUtilities.getOperators());
        CharHelper helper4 = new DefaultCharHelper(B, StateUtilities.getOneToNine());

        // masukan garis ke lingkaran
        A.addCharHelper(helper1);
        B.addCharHelper(helper2);
        B.addCharHelper(helper3);
        C.addCharHelper(helper4);

        // buat state manager
        StateManager manager = new StateManager(A);

        // masukkan input
        String input = JOptionPane.showInputDialog("Masukkan Input Pertambahan : ");
        if (input != null) {
            try {
                JOptionPane.showMessageDialog(null, manager.calculate(input));
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "input yang dimasukkan tidak valid");
            }
        }
    }
}

sekarang tinggal jalankan  kan keluar dialog seperti ini :

image

misal gw masukin data seperti ini :

image

dan setelah ditekan ok, maka keluar dialog seperti ini :

image

artinya hasil penjumlahan adalah 1110, nah kalo gw masukin input yang error misal kayak gini :

image

maka keluar dialog kayak gini :

image

hehe, ternyata buat bikin kalkulator pertambahan aja rumit ya kalo pake automata :D, apalagi kalo mo buat kalkulator yang lengkap pake automata πŸ˜€

Iklan

35 pemikiran pada “teori bahasa dan automata : bikin aplikasi kalkulator pertambahan pake java

  1. mas, trus kalo bikin package-nya bagaimana???maksud saya kalo bikin exe-nya bagaimana biar bisa lagsung dipake di windows?????mohon dijawab mas yha………….

  2. mas ada program lengkapnya ga ko saya coba error ya dah coba di betulin malah makin banyak errornya kalo ada dan boleh harap kirim ke e-mail saya ya

  3. Mas, kalo ngubah regular expressions ke trasition table gimana caranya mas? Ada tutorial?

    Ini contoh productions pake regexp:

    decimal : [1-9][0-9]*
    point : [1-9][0-9]*.[0-9]*
    point : [0].[0-9]+
    hexadecimal: [0]x[0-9AF]+

    makasih banyak sebelumnya.

  4. Ping balik: Belajar JaVa « WAHYU FIGHTER

  5. Ping balik: Tutorial Java dari Eko Kurniawan Khannedy « nge-WP@net

  6. terima kaih banyak ms tutorialnya sangant membantu
    btw tolong dong jelasin bagaimana mengcompile program java lewat dos apa dulu yang harus dilakukan sampai finish ya mas ??? hahaha maaf maksa

    walaupun sekarang sudah banyak bermunculan IDE ,thanxs mas

  7. mas… minta programnya donk… kirim ke emailku yaw!!! boleh g mas??? please…
    aku mau jdiin panduan,, ada tugas besar kuliahku..
    bls y!!!

  8. ga ada yang sederhananya yak?????
    kalo ada mauuuu donk.. mau buat modul sistem operasi nih untuk pertemuan gambas… tapi ga ketemu.. ada sih websitenya tapi broken. jadi screen-shotnya ga keliatan…. T_____T
    thanks

  9. Bingung dengan Penerapan Copy-Paste di Netbeans-nya

    apakah temen-temen ada yang bisa bantu ato sudah jadi , ,, ,

    minta tolong kirim email bisa kah ?

  10. wah keren gan. kebetulan saya di ajarin dengan dosen yang sama. kami di suruh membuat aplikasi yang dapat membaca coding benar atau salah. tapi sampai sekarang belum jdi”.. mungkin agan bisa bantu reverensinya ka…. πŸ™‚

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s