Syntax of Operator Files for RIPP 0.1 with Resources


The operator file contains the set of operators that may be applied in the planning domain. It must be a text file having an arbitrary name. IPP will try to apply all the ops which are contained in it, i.e., you need to put different operator sets into different files.

Basic Name Conventions:

Upper-case letters denote non-terminal symbols, lower-case letters denote terminal symbols. + means one or arbitrarily many occurrances of a symbol. * means zero or arbitrarily many occurrances of a symbol. [symbol] means optional occurrance.


OP_FILE      ::= /* empty */ 
                 |  OP OP_FILE

OP           ::=  constantname ":v"  PARDEC  ":p"  PRECONDS ":e"  EFFECTS
 
PARDEC       ::= /* empty */ 
                 | variablename* typename  PARDEC


PRECONDS     ::= /* empty */ 
                 | RESOURCE-REQ PRECONDS 
                 | FACT PRECONDS


FACT         ::= /* empty */ 
                 | [!] predicatename "(" NAMELIST ")"  
                 | [!] "eq" "(" varname varname ")"
                 | [!] "eq" "(" varname constname ")"


NAMELIST     ::= /* empty */
                 | constantname NAMELIST
                 | variablename NAMELIST


RESOURCE-REQ ::=   COMPAR "(" rvarname number ")"
                 | COMPAR "(" rvarname database ")"
                 | COMPAR "(" rvarname database OP number ")"



EFFECTS      ::= FACT* ";" COND-EFF QUANT-EFF RES-EFF "."
                 

COND-EFF     ::= /* empty */
                 | FACT+ "=>" FACT+  ";" COND-EFF

QUANT-EFF    ::= /* empty */
                 | ALL PARDEC FACT* "=>" FACT+ ";" QUANT-EFF 
                  

RES-EFF      ::= /* empty */
                 | rvarname ASSIGN number ";" RES-EFF 
                 | rvarname ASSIGN database ";" RES-EFF 
                 | rvarname ASSIGN database OP number ";" RES-EFF  
                 | rvarname ASSIGN number "*" rvarname "+" number  
                   ";" RES-EFF  
                   
COMPAR       ::= ">" | "=" | "<"
 
ASSIGN       ::= "+=" | "-=" | ":="

OP           ::= "+" | "-" | "*" | "/"

Effects are a possibly empty list of literals, followed by conditional non-quantified effects, followed by universally quantified conditional effects. The effect condition in quantified effects can be empty. Resource effects are listed last. The last effect must be followed by ".", not by ";." as the grammer suggests. No ADD and DEL effects are allowed anymore. If you have a predicate without any parameters, you still have to add the "()", as in arm-empty(). Names should not be longer than 256 characters. Equality and Disequality should never occur in effects. Examples of accepted operator files can be found in our domain collection.