Mit AutoEdit können Sie endliche Automaten, Kellerautomaten sowie Turing-Maschinen konstruieren, simulieren und transformieren. Weil die Konstruktion verschiedener Automatentypen unterschiedliche Herangehensweisen fordern, gehen wir im Folgenden von der Konstruktion eines endlichen Automaten aus. Besonderheiten bei der Konstruktion von Kellerautomaten und Turing-Maschinen werden im Anschluss erläutert.
Unter "Typ" können Sie den Automatentyp festlegen, den Sie erstellen wollen (Abb.1). Wenn Sie Ihren Automatentyp festgelegt haben, können Sie anschließend unter "Alphabet" die möglichen Eingabezeichen bestimmen. Es können auch wieder Zeichen aus dem Alphabet gelöscht werden. Definitionsgemäß ist hierbei zu beachten, dass ein Alphabet eine nicht-leere Menge ist und somit mindestens ein Zeichen existieren muss! Oft benutzte Alphabete - wie a, b, c - sind hier auch per Voreinstellung verfügbar. Wollen Sie ein Alphabet komplett zurücksetzen, so genügt ein Klick auf "leeren". Diese Schaltfläche befindet sich oben rechts vom Alphabet.(Abb.2)
Abb. 1: Auswahl eines Automatentyps
Abb. 2: Vordefinierte Alphabete
Die Übergangsfunktion des Automaten kann nun sowohl mit einer Tabelle, als auch in Form eines Graphen konstruiert werden. Für beide Möglichkeiten gibt es eine Registerkarte mit den entsprechenden Funktionen. Wenn Sie eine Übergangstabelle erstellen, können Sie zuerst die Zustände mit "Neuer Zustand" erstellen und benennen. Außerdem können Sie Startzustand und Endzustände bestimmen. Die Auswahl für den Startzustand befindet sich unten links.
Um Übergänge zu erstellen, müssen Sie die entsprechende Schaltfläche klicken, nachdem Sie den Zustand, dargestellt durch ein graues Rechteck, markiert haben. Der markierte Zustand ändert dann seine Farbe. Beachten Sie, dass Sie immer den Zustand anwählen müssen, von dem der Übergang ausgeht! Beachten Sie auch, dass Sie von einem Zustand nicht mehr Übergänge erstellen können, als Zustände vorhanden sind.
Die zu einem Übergang gehörenden Alphabetzeichen werden als Label hinzugefügt. Dazu müssen Sie vorher den Übergang markiert haben. Bei endlichen Automaten kann es nur so viele Label geben, wie Alphabetzeichen vorhanden sind.
Abb. 3: Beispiel für eine Übergangstabelle
Unter "Übergangsgraph" können Sie Zustände und Übergänge grafisch dargestellt sehen und Sie haben die Möglichkeit, auch dort selbige zu erstellen, zu löschen oder zu editieren. Dazu stehen Ihnen die Schaltflächen über der Grafik zur Verfügung. Diese haben dieselbe Anordnung und Funktion, wie auch in der Übergangstabelle, allerdings gibt es hier zum Umschalten von Endzustand oder nicht-Endzustand noch eine weitere.
Wenn der Button für neue Zustände eingerastet ist, so erzeugen Sie mit jedem Klick auf die Arbeitsfläche einen Zustand. Mit Entfernen können sie wieder gelöscht werden. | |
Wenn der Button für neue Übergänge eingerastet ist, klicken Sie nacheinander auf Ausgangs- und Folgezustand, um einen Übergang zu erzeugen. | |
Markieren Sie anschließend den Übergang, um dann mit einen Klick auf das Label-Button die Alphabetzeichen zuzuordnen (Abb.4). | |
Auch das Löschen einzelner Elemente ist leicht per Knopfdruck möglich. | |
Wenn ein Zustand markiert ist, können Sie mit dieser Schaltfläche ganz einfach umschalten, ob dieser Zustand ein Endzustand ist oder nicht. | |
Wenn Sie das Design nicht im Standard-Format haben wollen, sondern den gesamten Graphen in einem bestimmten Schema darstellen wollen, so können Sie mit dieser Schaltfläche das Layout eines Zustands, Übergangs oder Labels auf alle anderen Elemente des Graphen kopieren, um so schnell zu einem einheitlichen Aussehen zu kommen. | |
Mit dieser Schaltfläche können Sie die Ausrichtung ihrer Elemente automatisch vornehmen. Dabei werden Zustände in bestimmte Raster geschoben und Übergänge, sowie Labels entsprechend den Voreinstellungen zurecht gerückt. | |
Sie haben auch die Möglichkeit, während Sie einen Automaten konstruieren, diesen auf Gültigkeit zu prüfen. So erfahren Sie mit einem Klick, ob der Automat fehlerhaft ist oder nicht. | |
Wenn Sie den Graphen direkt weiterverwenden wollen, können Sie ihn hier exportieren. Näheres dazu wird im Folgenden noch erläutert. |
Name | Legt den Namen des Zustands fest |
FinalState | Bestimmt, ob der Zustand ein Endzustand ist |
Left | Position horizontal |
Top | Position vertikal |
Color | Farbe des Zustand-Symbols |
Radius | Größe des Zustand-Symbols |
LineColor | Farbe der Linien und Rahmen |
LineWidth | Dicke der Linien und Rahmen |
FontColor | Farbe der Beschriftung |
FontSize | Schriftgröße |
From | Ausgangszustand des Übergangs |
Target | Zielzustand des Übergangs |
ArrowSize | Auswahl der Pfeilgröße eines Übergangs |
DrawVertical | Bestimmt die Darstellungsart der Zeichen |
Read | Zu lesendes Eingabezeichen |
Abb. 4: Hinzufügen von Labels per Übergangsgraph
Wollen Sie einen Kellerautomaten konstruieren, so gibt es einige Unterschiede zu beachten. Zuerst haben Sie bei der Alphabet-Bestimmung ein zusätzliches Stack-Alphabet, welches Sie direkt unterhalb des normalen Alphabets editieren können.
Der nächste Unterschied folgt in der Übergangstabelle. Dort müssen Sie bei Kellerautomaten ein Stack-Vorbelegungszeichen bestimmen. Außerdem brauchen die Labels nun mehr Angaben. Es muss nicht nur das gelesene Alphabetzeichen zu einem Übergang bestimmt werden, sondern auch das Top of Stack (jenes Zeichen, welches ganz oben auf dem Stack liegt) und das Push, also jenes Zeichen, welches dabei auf den Stack gelegt wird. Aus diesem Grund ist nun die Labelanzahl pro Übergang nicht mehr auf die Anzahl der Alphabetzeichen beschränkt.
Bei dem Übergangsgraph ist der gleiche Unterschied in der "Eigenschaften"-Tabelle zu finden, in der bei der Einstellung für ein Label, die Zeilen Write und TopOfStack hinzukommen. Write ist äquivalent zu "Push".
Auch die Unterschiede von einer Turing-Maschine entspringen ihrer Definition. So finden Sie hier das Bandalphabet unterhalb des üblichen Alphabets. In der Übergangstabelle finden Sie unten links eine Einstellung für das Band-Vorbelegungszeichen.
Bei der Bestimmung der Labels gibt es hier das vom Band gelesene Zeichen, sowie das Zeichen, mit dem es überschrieben wird. Eine Turing-Maschine hat in jedem Schritt die Möglichkeit, die Leserichtung nach links oder nach rechts zu ändern, oder aber auf dem aktuellen Zeichen zu verbleiben. Auch das muss im Label eingetragen werden. Daraus folgt - wie auch beim Kellerautomaten - keine Begrenzung der Labels auf die Anzahl der Alphabetzeichen.
Auch hier sind diese Unterschiede im Übergangsgraph wiederzufinden. Die Eigenschaften-Tabelle enthält bei der Auswahl eines Labels einen Eintrag "Write" und einen Eintrag "Direction". Write bestimmt das auf das Band zu schreibende Zeichen und Direction legt die Leserichtung der Turing-Maschine fest.
Wenn Sie Ihren Automaten nun erstellt haben, können Sie verschiedene Grafiken als Grafik-Datei oder HTML weiterverwenden. Die Funktionen werden unter der Registerkarte "Exportieren" bereitgestellt. Sie haben die Auswahl zwischen HTML-Ausgabe und drei verschiedenen Grafikformaten. Für Ihren Graphen bekommen Sie noch zwei weitere Grafikformate zur Auswahl.
Schließlich können Sie Ihren Automaten ausführlich testen, indem Sie mit Eingabewörtern das Verhalten des Automaten nachvollziehen können. Dabei wird Ihnen jeder einzelne Schritt angezeigt. Für die Geschwindigkeit dieser Schritte gibt es einen Schieberegler. Auch ein Einzelschrittmodus ist verfügbar. Dazu müssen Sie nur vor dem Automatentest das Häkchen unter der Start-Schaltfläche aktivieren. Dann bestimmen Sie per Mausklick die Geschwindigkeit. Um einen Durchlauf abzubrechen, können Sie jederzeit "Stop Simulation" anwählen. Wenn der Automat bis zum Ende gelaufen ist, stoppt der Automat in einem Endzustand oder in einem anderen Zustand, was durch die entsprechende Farbe, rot oder grün, gekennzeichnet wird. Vorsicht, bei Turing-Maschinen kann es Endlos-Schleifen geben! Wenn der Automat überhaupt nicht stoppt, wird das nicht automatisch erkannt (Halteproblem). Sollte etwas nicht stimmen, kann der Einzelschrittmodus helfen, eine Fehlerquelle aufzudecken. Wenn alles in Ordnung ist, haben Sie auch noch die Möglichkeit, den Automaten in VCC zu verwenden oder ihn in Scheme-Code zu überführen.
Abb. 5: Automat stoppt im Endzustand | Abb. 6: Automat stoppt nicht im Endzustand |