Forum: Programmieren allgemein
by alzaimar,
22. Nov 2009
Äh..Doch: Ein Scanner benötigt kein CASE. Ein Scanner implementiert einen NDEA. Du meinst aber eher soetwas:
Var
SymbolClass : Array Of TSymbol;
Entsprechend befüllen, fertig. Dann einfach 'Symbol' nehmen und freuen, wie einfach das Leben sein kann.
Wer primär auf Nanosekunden schaut, hat noch nicht kapiert, worum es beim Programmieren geht.
Ja, aber Du findest einen Fehler nicht...
Forum: Programmieren allgemein
by alzaimar,
21. Nov 2009
Ja.
Da es dem Automaten egal ist, ob es sich um eine 1, 2 usw. handelt, kann man das drastisch verkürzen: Der DEA kennt nur Ziffern, Komma, das Terminalsymbol (Ende der Eingabe) sowie ungültige Zeichen. Da ungültige Zeichen zu einem sofortigen Abruch führen, wird die Tabelle ziemlich klein. So klein, wie das Problem, das der DEA lösen soll:
Const
DEA : Array =
// symDigit ,...
Forum: Programmieren allgemein
by alzaimar,
21. Nov 2009
Nun ja. Was ist schon groß? Der Code mit 'CASE' sieht bei mehr als -sagen wir- 20 Zuständen auch nicht gerade übersichtlich aus (Spaghetti-Code). Bei einer DEA-Tabelle habe ich den Vorteil, das der eigentliche Code sehr übersichtlich ist. Und der Automat kann anhand der Tabelle extern abgelegt, automatisch generiert oder direkt gezeichnet werden. Bei einer CASE-Struktur tut man sich damit schon...
Forum: Programmieren allgemein
by alzaimar,
21. Nov 2009
Mit Case würe ich das nie und nimmer machen: Viel zu umständlich und zu unübersichtlich.
Ich mache das so:
1. Eingabealphabet definieren
2. Zustandsgraph aufzeichnen
3. Zustände durchnummerieren.
4. Zustandsübergangstabelle erstellen (Spalten = Alphabet, Zeilen = Zustände aus (3))
Procedure DEA (aInput : TAlphabetStream);
Begin
State := START;