Thema: ---Datum: ---

Source-Tutorial
Wie schreibe ich einen Akzeptor?

Vorwort:
Ein Akzeptor, was ist das eigentlich? Spontan kann man das Wort ohne großes Nachdenken von dem Wort "akzeptieren" ableiten und im Grunde ist dafür auch ein Akzeptor gedacht. Er soll überprüfen, ob etwas vorhandenes "akzeptiert" werden kann. In unserem Fall wäre dies der Aufbau einer E-Mail Adresse. Doch wie erstellt man solch einen Akzeptor und auf was muss man dabei Acht geben? Dies wollen wir in unserem ersten Teil des Tutorials herausfinden.

Was benötigt man für einen Akzeptor?
Für einen Akzeptor benötigt man lediglich ein Stück Papier und einen Stift. Doch wie zeichne ich richtig? Um sich mit dem Akzeptor richtig ausdrücken zu können, gibt es folgende Symbole:


Dieser Kreis mit dem ZX, stellt einen Zustand dar, wobei das X für die Nummer des Zustands [0..Unendlich] steht. Die Zustände fangen immer bei 0 an zu zählen.



Der Pfeil steht für eine Überprüfung. Sofern etwas in unseren Akzeptor "hineingetan" wird, beginnt die Überprüfung. Sofern die Überprüfung erfolgreich war, wird das Ganze in den nächsten Zustand übergeben.
Als kleines Beispiel hierzu soll das Wort "teSt" darauf überprüft werden, ob es nur aus Kleinbuchstaben besteht:


Der Gegebene Akzeptor benötigt mindestens einen Kleinbuchstaben, um in den Endzustand Z1 zu gelangen. In dem allerdings immernoch eine Überprüfung stattfinden kann, solange Kleinbuchstaben in einem Wort vorhanden sind. Sobald etwas anderes als ein Kleinbuchstabe vorkommt [Zahl/Großbuchstabe/o.Ä.] würde der Akzeptor in den Fehler-Zustand springen und das Wort hätte die Prüfung nicht bestanden. Der "Fehler-Zustand" wird nicht explizit definiert, sodass alles was nicht gewünscht ist, automatisch als Fehler gewertet wird.


Dies ist der Endzustand, in den unser Akzeptor letztendlich möchte. Gekennzeichnet wird dieser durch einen doppelten Kreis. Es ist allerdings möglich, wie in unserem obigen Beispiel, dass im Endzustand noch Überprüfungen erfolgen können. Das X gibt diesmal die Zahl des letzten Zustands an. Sollten wir 8 Zustände haben, so ist Z8 unser Endzustand.

Welche Einschränkungen bestimmen wir?
Da es die größe des Akzeptors sprengen würde, wenn wir jegliche Bereiche der E-Mail Adressen abdecken wollten, setzen wir bestimmte Einschränkungen und Vorgaben:
- Vor und hinter dem @ muss mindestens ein Zeichen stehen
-- Bei dem Zeichen muss es sich um einen Buchstaben handeln
- Die E-Mail Adresse besteht nur aus Kleinbuchstaben
- Es dürfen keine zwei aufeinander folgen
- Unsere E-Mail Adresse muss mit ".de" enden

Daraus können wir uns jetzt schon ein "Eingabealphabet" herleiten:
- Zeichen a..z (a bis z)
- @
-

Dies sind also die Bestandteile, welche unser Akzeptor überprüfen muss, um feststellen zu können, ob die eingegebene E-Mail Adresse richtig ist oder nicht.

Der Akzeptor vor dem "@"
Schauen wir uns erstmal den Teil vor dem @ an. Hierbei haben wir die Voraussetzungen, dass wir mindestens einen Buchstaben benötigen und das direkt vor dem @ kein stehen darf.
Sorgen wir also erstmal dafür, dass ein Buchstabe gesetzt sein muss:

Damit hätten wir definiert, dass wir um von Zustand0 in Zustand1 überzugehen, ein Kleinbuchstabe gesetzt sein muss.
In unserem nächsten Schritt benötigen wir das @:

Zwar haben wir hiermit das geforderte erreicht (mindestens ein Kleinbuchstabe vor dem @) allerdings könnte unser Akzeptor nur E-Mails als richtig erkennen, welche folgendermaßen aussehen würden a@ / b@ / c@ aber keine hallo@ / max@ E-Mail Adressen. Daher müssen wir den momentanen Stand noch etwas erweitern.

Mit unserer kleinen "Schleife" können wir nun auch längere Texte vor unserem @ haben. Dadurch sind E-Mail Adressen wie maxmustermann@ kein Problem mehr. Allerdings wird eine E-Mail Adresse wie max.mustermann@ immer noch nicht erkannt und als Fehler gewertet. Wir brauchen also noch einen kleinen Umweg, um dies möglich zu machen.

Somit hätten wir den Teil vor dem @ komplett. Damit können nun folgende E-Mail Adressen überprüft werden:
- a@
- hallo@
- max.mustermann@
- m.a.x.muster.man.n@

Wir gehen das Ganze einmal für das Beispiel "ha.ll.o@" durch:
- Wir starten in Z0
- Für das h gehen wir von Z0 nach Z1
- In Z1 gehen wir die Schleife für das a und landen wieder in Z1
- Nun geht es für den von Z1 nach Z3
- Da vor dem @ nichts anderes als ein Kleinbuchstabe stehen darf gehen wir von Z3 wieder zurück nach Z1 und nehmen das l mit
- In Z1 gehen wir die Schleife für das l und landen wieder in Z1
- Nun geht es für den von Z1 nach Z3
- Da vor dem @ nichts anderes als ein Kleinbuchstabe stehen darf gehen wir von Z3 wieder zurück nach Z1 und nehmen das o mit
- Von Z1 geht es nun nach Z2 und wir haben unser gewünschtes ha.ll.o@

Der Akzeptor nach dem @
Diesmal benötigen wir wieder einen Kleinbuchstaben direkt hinter dem @ und die E-Mail Adresse muss mit ".de" enden. Fangen wir erstmal mit dem Buchstaben an.

Nun geht es weiter das ".de" zu ermöglichen



Momentan wären nun allerdings nur Endungen wie a.de / b.de / c.de möglich. Daher müssen wir das Ganze noch etwas erweitern.

Nun können auch E-Mail Adressen mit Endungen wie hallo.de o.Ä. akzeptiert werden. Allerdings immernoch keine E-Mail Adressen wie ha.llo.de oder ha.d.dev.de, dies lässt sich aber auch noch ganz leicht ermöglichen.

Hierbei haben wir nun ein neues Zeichen, nämlich den "/" dieser sagt aus, dass alle Zeichen genommen werden können, außer dem Zeichen welches hinter dem "/" steht. Testen wir nun das Ganze einmal mit unserem "ha.d.dev.de":
- Wir starten in Z2
- Wir nehmen das h und gelangen in Z4
- Als nächstes nehmen wir das a und bleiben in Z4
- Nun wählen wir den und gelangen in Z5
- Nun wählen wir das d und gelangen in Z6
- Als nächstes wieder den und wir kommen zurück nach Z2
- Dann wählen wir das d und kommen zu Z4
- Hiernach das e und wir bleiben in Z4
- Dann das v und wir bleiben weiterhin in Z4
- Nun wählen wir den und kommen nach Z5
- Dann das d und wir sind in Z6
- Mit dem e landen wir in Z7 und unsere Überprüfung ist geglückt.

Der komplette Akzeptor
Wenn wir nun Beide Teile zusammenfügen, erhalten wir unseren (eingeschränkten) E-Mail Adressen Akzeptor:


Schlusswort
Ich hoffe euch hat das Tutorial gefallen und ihr konntet wieder neue Einblicke der Informatik gewinnen. In dem zweiten Teil des Tutorial wird es darum gehen, den erarbeiteten Akzeptor in ein Programm zu schreiben, welches uns am Ende sagen soll, ob eine E-Mail Adresse gültig ist oder nicht.