Anwendung der Form Machine auf Programmprotokolle
Der in NWG/RFC #80 erwähnte Protocol Manager benötigt mehrere interessante Merkmale, die Eigenschaften der obigen Form Machine sind.
In bestimmten Fällen während eines Protokolldialogs könnte es akzeptabel sein, entweder eine Annahme für Verbindung A oder eine Zuweisung für Verbindung B zu erhalten, das heißt, die Reihenfolge ist manchmal unwichtig. Das definierte Verfahren zum Anwenden von Regeln erlaubt Reihenfolgeunabhängigkeit.
Ein Logger könnte uns eine Socket-Nummer senden, die in eine reguläre Nachricht eingebettet ist – die Socket-Nummer soll die erste einer zusammenhängenden Menge von Sockets sein, die wir verwenden können, um Verbindungen mit einem Programm aufzubauen. Wir möchten das Socket-Nummernfeld aus der regulären Nachricht extrahieren, es vielleicht in ein anderes Format umwandeln und etwas hinzuaddieren, um die zusätzlichen Socket-Namen zu erhalten. Als Ergebnis der regulären Nachricht möchten wir mehrere INIT-Systemaufrufe ausgeben, die die Socket-Nummern enthalten, die wir berechnet haben. Der Wertoperator und die arithmetischen Operatoren der Form Machine können dies leisten.
Eine dritte Eigenschaft der Form Machine, die auf Protokolle anwendbar ist, ist die Inter- und Intraregeleinbindung zur Auflösung kontextsensitiver Informationen. Im Allgemeinen wünschen wir, dass Regeln reihenfolgeunabhängig sind, aber in bestimmten Fällen möchten wir eine Ordnung auferlegen. Am Beispiel des Loggers in NWG/RFC #66 kann das vom Logger gesendete Close zwei verschiedene Bedeutungen haben, je nach seinem Kontext. Wenn das Close vor der regulären Nachricht mit der Socket-Nummer gesendet wird, dann bedeutet es Anruf abgelehnt. Wenn die reguläre Nachricht dem Close vorangeht, dann wird der Anruf angenommen. Da das Close kontextuelle Bedeutung hat, müssen wir es an die reguläre Nachricht binden, um zu vermeiden, IF und THEN in die Sprache der Form Machine einzuführen.
Nehmen wir einen Moment lang an, dass wir Systemaufrufe in Form-Machine-Notation ausdrücken können. (Die unten stehende Notation dient nur der Veranschaulichung und ist nicht Teil der Sprache der Form Machine.) Wir haben zwei Möglichkeiten, die reguläre Nachricht an das Close zu binden. Durch Intraregeleinbindung bestehen wir darauf, dass dem Close eine reguläre Nachricht vorangeht.
Reg. Msg , Close ->
Nehmen wir nun einen Moment lang an, dass die Gegenstelle nach jeder Übertragung ein Echo haben muss. Da wir nach Empfang der regulären Nachricht und bevor das Close gesendet wird ein Echo ausgeben müssen, müssen wir die Interregeleinbindung verwenden. Dies kann mit der Programmiervariable bewerkstelligt werden. Ihr wird ein Wert zugewiesen, wenn die reguläre Nachricht empfangen wird, und der Wert wird geprüft, wenn das Close empfangen wird.
Reg. Msg -> Echo , ([lambda]+1)
Close, ([lambda]=1) ->
Um die Interregeleinbindung über die Programmiervariable zu veranschaulichen, könnte das Verbindungsprotokoll in NWG/RFC #66 dargestellt werden, indem die folgende Form an einen Protokollmanager übergeben wird. (Die unten stehende Notation dient nur der Veranschaulichung und ist nicht Teil der Sprache der Form Machine).
1. ->INIT(parameters) , ([alpha]<-0)
Senden Sie ein INIT(RTS).
2. INIT(parameters) -> ALLOCATE(parameters)
Senden Sie eine Zuweisung als Antwort auf den Verbindungsabschluss (ein empfangenes STR).
3. Reg. Msg (parameters) -> ([alpha]<-1)
Wenn die Nachrichten mit Link-Nummern empfangen werden, setzen Sie einen internen Indikator. (Die Extraktion des Links wird nicht veranschaulicht.)
4. CLOSE(parameters),([alpha]=1) ->
INIT(parameters),INIT(parameters)
Wenn das Close nach der regulären Nachricht empfangen wird, wird [2] geprüft, um sicherzustellen, dass die reguläre Nachricht empfangen wurde, bevor die Duplexverbindung aufgebaut wird. Wenn das Close empfangen wird, ohne dass ihm eine reguläre Nachricht vorangeht (Anruf abgelehnt), wird die Form fehlschlagen (da keine Regel erfüllt ist).
Dieses Protokoll kann über eine einzelne Form behandelt werden, die vier Ersetzungsregeln enthält. Wir haben ähnliche Darstellungen für komplexere Protokollsequenzen untersucht. Solche nach Namen gespeicherten Protokollsequenzen sind ein Vorteil für den Benutzer; er kann anfordern, dass eine vordefinierte Sequenz automatisch ausgeführt wird.