fmg.fmg8.umgebung2D.Vektor2D
Klasse zur Repr�sentation eines endlichen Automaten mit �bersetzerfunktion.
Der �bersetzerautomat kann aus folgenden Zust�nden bestehen (p und z sind die beim Zustzand gespeicherten Parameter; der Befehl des Zustands ist als Funktionsname vor die Klammer geschrieben):
- kno(p): Erzeuge Knoten mit dem Namen, der an Hp steht.
- bef(p, z): Setze Befehl des Knotens mit dem Namen an Adresse Hp auf den Wert an Adresse Hz.
- par(p, z): Setze Parameter des Knotens mit dem Namen an Adresse Hp auf den Wert an Adresse Hz.
- zus(p, z): Setze Zusatzparameter des Knotens mit dem Namen an Adresse Hp auf den Wert an Adresse Hz.
- KAN(p, z): F�ge eine Kante von dem Zustand, der an Adresse Hp steht zu dem Zustand, der an Adresse Hz steht ein; die Kante erh�lt die Beschriftung, die Vorher durch T-X erzeugt wurde.
- T-X(p): Erweitere die aktuelle Bedingung um den Wert, der an Hp steht, addiert mit k, wobei gilt:
k = 0, falls X = 'C',
k = 255, falls X = 'H',
k = Konstanten.autTOscript(Hp) - Hp, falls X = 'O' (511, 512: T, F; 513-520: Comp; 521, 522: OP).
- R-X(p, z): Speichere an Adresse Hp (nicht an Adresse, die in Hp steht!) den Wert k mit:
k = z, falls X = 'C',
k = Wert an Adresse Hz, falls X = 'V'.
- NXT(): Idle-Befehl, der keine Aktion durchf�hrt.
- ERG(p, z): Erg�nze Zustand p mit Namen, der in Hp steht um eine ausgehende Kante nach zum Zustand, der in Hz steht, sodass immer mindestens eine ausgehende Kante von p true
ist. Wenn c1, c2, ... die Bedingungen der ausgehenden Kanten
Nach den Befehlen kno, bef, par, zus, KAN und ERG wird automatisch noch R-V(Hp, H101) und evtl. R-V(Hz, H102) durchgef�hrt, das hei�t, dass in Adresse H101 nach jedem topologischen Befehl der Name des Ursprungsknotens steht; in H102 steht, im Fall, dass z benutzt wurde, der Wert der topologischen �nderung bzw. der Zielknoten der Kante. In allen F�llen, wo R-V(.,.) nicht durchgef�hrt wird, bleiben die Register erhalten. Insbesondere bleibt Hn mit n > 102 immer erhalten.
Nach jedem Zustandswechsel wird der Zeiger im Arbeitscode auf das n�chste Token verschoben. Der Code gilt als abgearbeitet, wenn die Variable eoc den Wert true annimmt oder kein g�ltiger Zustand f�r den Automaten definiert ist (bspw. wenn der �bersetzerautomat gar keine Zust�nde besitzt).
Das aktuelle Token ist in Sensor H100 gespeichert.
Das n�chste Token (look ahead) ist in Sensor H99 gespeichert (0 falls eoc).
Zu beachten ist, dass die Entscheidung, welche Transition aus einem Zustand heraus benutzt wird, getroffen wird, BEVOR der Code-Zeiger verschoben wird; H100 zeigt also zu dem Zeitpunkt noch das Token an, auf dem gerade gearbeitet wurde, H99 das, welches zum Zeitpunkt des n�chsten Zustands aktuell sein wird.
Die Register sind in den Sensoren H101..Hn gespeichert mit n = 100 + #Register (gew�hnlich n = 103).
ACHTUNG: Um Inkonsistenzen zu vermeiden, sollte auf die Attribute codeZeiger, realSensArray, eoc und boc auch innerhalb der Klasse nicht direkt zugegriffen werden, sondern nur �ber Getter und Setter (sonst genau �berlegen!).
@author Lukas K�nig