A Real-time Expert System Environment
for on-line Decision Support Applications

Technical Specifications

Forward Chaining Rules

The Forward Chaining Rules of RTXPS define the sequence of the ACTIONS. They set the status values of the ACTIONs depending on the status o the other ACTIONs and/or the values of the DESCRIPTORs.


RULE <rule#>
IF   <condition>
THEN <action>

<condition> := <condition <logical operator> <condition>
            := ACTION(<action name>) == <status value>
            := DESCRIPTOR(<descriptor name>) <comparative operator> <operand>
            := TRUE
<action>    := ACTION(<action name>) =>  DESCRIPTOR(<descriptor name>) | 
                                         <status value> | repeat
            := ACTION(<action name>) =>> DESCRIPTOR(<descriptor name>) | 
                                         <status value>
            := GROUP(<group label>) => enable | disable | repeat
            := DESCRIPTOR(<descriptor name>) = DESCRIPTOR(<descriptor name>) | 
<logical operator>     := AND | OR
<comparative operator> :=  < | > | <= | >= | == | !=
<status value> := ready | pending | ignored | failed | done
<operand>   := DESCRIPTOR(<descriptor name>) | <constant>
<constant>  := string | number

Depending on the action part 6 Types of Forward Chaining Rules can be distinguished:

  • ACTION => value
    The rule assigns a value to the specified ACTION, but only if the ACTION does not yet have a value assigned.

  • ACTION =>> value
    The rule assigns a value to the specified ACTION, overriding the current value.

  • GROUP => enable | disable
    The rules enables | disables the usage of the ACTIONs assigned to the specified GROUP.

  • ACTION => repeat
    The rule resets the ACTION value to ready and such repeats the the specified ACTION.

  • GROUP => repeat
    The rule clears the values of the ACTION assigned to the specified group and sets the value of the first ACTION in ths GROUP to ready, such repeating the ACTIONs in the GROUP.

  • DESCRIPTOR = value
    The rule assigns a value to the specified descriptor and does not have any direct effect on scheduling the ACTIONs.

Examples for the 6 types are:

RULE 000004
IF   ACTION(Zero_Action) == done
THEN ACTION(First_Action) => ready

RULE 000010
IF   ACTION(First_Action) == ignored
THEN ACTION(First_Action) =>> done

RULE 000020
THEN GROUP(0002) => enable

RULE 000030
IF   DESCRIPTOR(score) < 100
THEN ACTION(Test_Score) => repeat

RULE 000040
IF   ACTION(Test_Score) == done 
AND  DESCRIPTOR(score) < 50
THEN GROUP(0002) => repeat

RULE 000041
IF   ACTION(Test_Score) == done 
AND  DESCRIPTOR(score) < 50
THEN DECRIPTOR(test) = failed


The preprocessor script2rules can be used to automatically transform a script file into Forward Chaining Rules.

For all ACTIONs listed in the script file script2rules automatically generates the sequential scheduling rules. All other elements of the script file are not modified.

script2rules expects a script file as its only argument and writes to stdout:

Synopsis: script2rules <scriptfile>

The following sample script file:

ACTION: <action1> 
ACTION: <action2> 
RULE <nr> 
IF <condition> 
AND <condition> 
OR  <condition> 
THEN <conclusion> 
# <comment line> 
ACTION: <action3> 

is transformed by script2rules into:

RULE     1
THEN ACTION(<action1> => ready

RULE     2
IF   ACTION(<action1> == done
THEN ACTION(<action2> => ready

RULE <nr>
IF <condition>
AND <condition>
OR  <condition>
HEN <conclusion>

# <comment line>

RULE     3
IF   ACTION(<action2> == done
THEN ACTION(<action3> => ready

Copyright 1995-2003 by:   ESS   Environmental Software and Services GmbH AUSTRIA