import java.io.*; /** * Realisiert einen Kellerautomaten, der die Sprache a^n b^n erkennt * @author David Tepasse * @version 1.0 */ public class Kellerautomat { CharKeller meiner = new CharKeller(); /** * Liest ein zeichen von der Konsole * @return char das eingelesene Zeichen */ public char liesEingabeZeichen() throws java.io.IOException{ DataInputStream rueckgabe = ( new DataInputStream( System.in )); //Erzeugt ein neues Objekt zum einlesen von konsoleneingaben String wert = rueckgabe.readLine(); //Speichert Konsoleneingabe in String return wert.charAt(0); } /** * Hier soll die Uebergangsfunktion realisiert werden. In Abhängigkeit von Zustand, Keller und Eingabe * wird der neue Zustand zurück gegeben. 9 ist der Fehlerzustand. * Hier müssen sie noch tätig werden * @return int der neue Zustand * @param zustand der alte Zustand * @param eingabe die aktuelle Eingabe */ public int uebergangsfunktion (int zustand, char eingabe) { //Falls falscher Eingabewert vorliegt return 9; } /** * Das Hauptprogramm des Automaten. * Zuerst wird ein Willkommensbericht angezeigt * mit der try catch Struktur wird jeglicher möglicherweise auftretende Fehler abgefangen * die while-Schleife wird solange durchlaufen, wie man kein 'e' (Abbruch) eingibt. * als erstes wird der neue Zustand bestimmt, dann wird ein neues Zeichen eigelesen... */ public void start () { System.out.println("Kellerautomat"); System.out.println(); System.out.println ("Geben sie ein Wort der Sprache a^n b^n an"); System.out.println ("Ende mit e"); int zustand=0; try { char eingabe=liesEingabeZeichen (); //Eingabe wird gelesen while ((eingabe !='e') && (zustand != 9)) { //Solange der Automat nicht beendet wird zustand=uebergangsfunktion (zustand, eingabe); eingabe=liesEingabeZeichen (); } if ((zustand == 1) && (meiner.empty())) System.out.println("Wort in Sprache"); else System.out.println("Wort nicht in Sprache"); } catch (Exception e) {} System.out.println ("Ende"); } }