[Prev] [Next] [Home DissOnline]


B. Manual zum Abfassen neuer Regeln für das EROS7-System

B.1. Gliederung der Regeln

Die Regeln gliedern sich in mehrere Teile: einen globalen Teil und je einen Teil je Reaktionsregel. Die Nummern der Reaktionsregeln können zwischen 1 und 1000 beliebige Werte annehmen. Die Regelnummern müssen nicht zusammenhängend sein, müssen jedoch eindeutig sein. Der Rückgabewert ist vom Typ RULEOK und kann die beiden Werte OK und BAD annehmen. OK bedeutet, daß der durch irule, op und sub_op selektierte Regelteil erfolgreich durchgeführt wurde, wogegen BAD einen Fehler anzeigt. Ein Fehler in diesem Sinne kann sein, daß die Bedingungen für diese Reaktion nicht erfüllt sind oder tatsächlich ein Fehler aufgetreten ist. Der Regelfunktionsaufruf wird dann verworfen und es wird versucht, den Aufbau des Reaktionsnetzwerks fortzusetzen. Der Grundaufbau einer Regeldatei sieht folgendermaßen aus:

C++-Code:

 #include "rx_eifc.h"
 #include "rx_datex.h"
 #include <iostream.h>
 #include "rules.h"
 
 RULEOK rules_cc (ostream &print, rx_eifc *eifc, rx_datex *val, int irule, OP op, int sub_op, int test, int trace) {
 // Deklaration der Variablen
    switch (irule) {
       case GLOBAL:
          // globale Regelinformationen
       case 1:
          // Regel 1
       case 7:
          // Regel 7
       default:
          return BAD;
    }
    return OK;
 }
In Tcl sieht der entsprechende Code folgendermaßen aus:

Tcl-Code:

 proc Tcl_rule {} {
    global_name
    # Deklaration der Variablen irule op sub_op test trace
    switch $irule {
    GLOBAL {
       # globale Regelinformationen
       }
    RULE_1 {
       # Regel 1
       }
    RULE_7 {
       # Regel 7
       }
    default {
       return BAD
       }
    }
 }
Dabei ist zu beachten, daß in Tcl die Aufrufparameter irule, op, sub_op, test und trace mit der Prozedur global_name auf die entsprechenden globalen Tcl-Variablen gelinkt werden. Die Pointer auf die Objekte der Klassen rx_datex und rx_eifc sind in Tcl nicht sichtbar, werden aber von den definierten Funktionen intern verwendet. Für rx_datex sind dies get, put, getco und putco. Die Funktionen, die den rx_eifc-Pointer intern verwenden, sind hier wegen ihrer größeren Anzahl nicht aufgeführt. Für die ostream-Referenz print gibt es in Tcl ein zu puts stdout äquivalentes Kommando print, das auf den vom Kernsystem zur Verfügung gestellten Stream schreibt.

Eine mögliche Fehlerquelle in Tcl sind die Kommentare (# ...). Die Kommentare erfahren in Tcl keine Sonderbehandlung, sondern das #-Zeichen ist ein Befehl, der alle seine Argumente verwirft. Aus diesem Grunde dürfen Kommentare nicht an allen Stellen der Tcl-Prozedur stehen, sondern nur an Stellen, an denen auch andere Kommandos enthalten sein dürfen. Der nachfolgende Ausschnitt verdeutlicht dies.

 proc Tcl_rule {} {
    global_name
    # ok
    switch $irule {
    GLOBAL {
       # ok
       }
    # Fehler
    RULE_1 {
       # ok
       set n 1 # Fehler
       # ok
       }
    default {
       return BAD
       }
    }
 }


[Prev] [Next] [Home DissOnline]


Hoellering@CCC.Chemie.Uni-Erlangen.DE
Copyright © 1998, Höllering Universität Erlangen-Nürnberg. All rights reserved.