Subato

Resource Files

Erste Automaten

Wir betrachten das Alphabet Σ = {a, b}. Definieren Sie jeweils einen DEA mit folgenden Eigenschaften.

  • a1: Akzeptiert alle Worte, die als zweites Zeichen ein b besitzen.
  • a2: Akzeptiert die drei Worte baa, ab, und abb.
  • a3: Akzeptiert alle Worte, die nicht mit ba enden.
  • a4: Akzeptiert alle Worte, die mit zwei gleichen Zeichen enden oder beginnen.
  • a5: Akzeptiert alle Worte, die eine ungerade Anzahl von a’s enthalten.

Sie können Ihre Lösungen hier testen. Hierzu ist das Haskellmodul Auto gegeben, mit dem Sie endliche Automaten definieren können. Ein neuer leerer Automat entsteht mit newAuto. Sie haben vier Funktionen, um die Zustände des Automaten zu definieren: node, startNode, terminalNode und startTerminalNode. Mit diesen Funktionen lassen sich Zustände, ein Startzustand, Endzustände oder ein Zustand, der gleichzeitig Startzustand und Endzustand ist, erzeugen. Allen diesen Funktionen ist ein String nachzustellen, der der Name des Zustands repräsentiert.

Einem Automaten kann ein Zustandsübergang mit dem Operator <: hinzugefügt werden. Ein Zustandsübergang lässt sich mit folgender Syntax beschreiben:
zustand1-//string/->zustand2
Für jedes Zeichen des Strings in der Mitte wird definiert, dass der Automat aus Zustand zustand1 in zustand2 übergeht.

Als Beispiel ist der Automat aus der Vorlesung in Haskell notiert.

Geben Sie Ihre Automaten a1 bis a5 entsprechend ein. Berücksichtigen Sie dabei, dass Einrückungen in Haskell relevant sind.

 

Zum lokalen Testen. Installieren Sie ghc.

Dann Auto.hs und A1.hs herunterladen.

Auf Kommandozeile:
:~$ ghci A1.hs
GHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help
[1 of 2] Compiling Auto             ( Auto.hs, interpreted )
[2 of 2] Compiling A1               ( A1.hs, interpreted )
Ok, modules loaded: A1, Auto.

Jetzt können Sie Automaten testen. Der Beispielautomat:

*A1> accept example "111100110101"
True
*A1> accept example "11111110000"
False
*A1>


Wenn Sie nun a1 bis a5 in A1.hs definieren, können Sie mit

:reload

in der ghci Session das Programm neu laden.


module A1 where import Auto -- Beispielautomat aus der Vorlesung -- Zustände s0 = startNode "s_0" s1 = node "s_1" s2 = node "s_2" s3 = terminalNode "s_3" st = startTerminalNode "st" -- Definition des Automaten mit seinen Übergängen example = newAuto <: s0 -//"1"/-> s0 <: s0 -//"0"/-> s1 <: s1 -//"1"/-> s0 <: s1 -//"0"/-> s2 <: s2 -//"0"/-> s2 <: s2 -//"1"/-> s3 <: s3 -//"01"/-> s3 -- Definieren Sie jetzt entsprechend die 5 Automaten aus der Aufgabe -- Sie können die oben definierten Zustände verwenden und weitere Zustände definieren a1 = newAuto a2 = newAuto a3 = newAuto a4 = newAuto a5 = newAuto
hs
You are not logged in and therefore you cannot submit a solution.