Einzelnen Beitrag anzeigen

SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#30

Re: Automaten in Source Code

  Alt 22. Nov 2009, 10:33
Zitat:
Ja, aber Du findest einen Fehler nicht so leicht.
Tut mir Leid, ich beharre darauf, dass man (in diesem Beispiel) nicht sagen kann, dass CASE unüberschaubarer sein soll.

Ob ich die Case durchsuchen muss oder die Tabelle neu "berechnen" muss - ist für mich der gleiche Aufwand!

Zitat:
Du verwendest zudem zig mal den gleichen Code (case..of '0'..'9')
Nur als Denkanstoß:
Delphi-Quellcode:
Const
  DEA : Array [symDigit..symTerminal, stStart..stDecimals] =
// symDigit , symKomma, symTerminal
{stStart }  (stDigits , stError , stError),
{stDigits}  (stDigits , stComma , stStop),
{stComma}   (stDecimals, stError , stError),
{stDecimals}(stDecimals, stError , stStop)
            );
Man muss bei jeder Variante JEDEN Zusstandsübergang angeben/implementieren.
Wenn ich nun möchte, dass mein Automat ("0"en hab ich übrigens vergessen) nach dem Komma nur Ziffern "1".."8" akzeptieren soll, dann hab ich hier schon keinen Doppelten Code.
Will sagen: es ist Zufall, dass hier doppelter Text steht.

Wenn DU keine Fehler in der Tabelle machst, dann mache ICH keinen in meiner Case.

Zitat:
Wer primär auf Nanosekunden schaut, hat noch nicht kapiert, worum es beim Programmieren geht.
Aus dem Zusammenhang gerissene Zitate verarbeiten tust du gern, gell?


NOCHMAL:

Also werden alle Zustände "on demand" erzeugt(?).

Wenn aktueller Zustand in den nächsten übergehen soll, erzeugt dieser (wenn nicht schon getan) den Neuen.

WENN das die Lösung ist, geht mir hier OOP eindeutig zu weit (oder auch nicht(?)).

Ich würde ein Objekt, welches die Tabelle an sich repräsentiert modellieren, die dann alle Zustände erzeugt.
Sonst wären ja die Zustandsüberführungen über große Text-Entfernungen hinweg definiert.

Es ist nicht die Aufgabe eines jeden Zustandes, sich um den nächsten zu kümmern. (MEINE Meinung)

Zitat:
Aber Du hast doch noch gar keine Ahnung von Interfaces, Klassen usw. Wie willst Du dir denn dann ein Urteil erlauben?
Mit solchen Äußerungen wär ich an deiner Stelle vorsichtig!

Zitat:
Bleib halt bei deinen CASE-Konstrukten und -vor allen Dingen- kodiere Parser, Scanner, Lexer und DEA per Hand.
Du hast dem Anschein nach keinen Spaß mehr am (von-Hand-)Programmieren?

@Medium:
Was interessiert es den Programmierer, wie die die interne Umsetzung von etwas aussieht?
Ich GLAUBE, dass machen auch C-Compiler so (im Assembler-Code stehen dann "_" oder "__" vor allen Routinen)
Sebastian
  Mit Zitat antworten Zitat