scenario ::= ( actiondecl | featuredecl | attachmentdecl | timeconstdecl | domaindecl | dynamicdecl | showonedecl | hidedecl )* ( lawdecl | observationdecl | acausaldecl | causaldecl | occurrencedecl )* <EOF>
number ::= <NUMBER>
identifier ::= ( <IDENTIFIER> | <TIMECONSTANT> | <TIMEVAR> | <VALUEVAR> )
featurename ::= ( <IDENTIFIER> | <TIMECONSTANT> | <TIMEVAR> | <VALUEVAR> )
string ::= <STRING>
domaindecl ::= <DOMAIN> domaindecl_single ( <COMMA> domaindecl_single )*
domaindecl_single ::= newdomainname "=" "{" newvaluename ( <COMMA> newvaluename )* "}"
newdomainname ::= identifier
newvaluename ::= identifier
valuename ::= identifier
domainname ::= identifier
newfeaturename ::= identifier
featuredecl ::= <FEATURE> featuredecl_single ( <COMMA> featuredecl_single )*
featuredecl_single ::= newfeaturename new_feature_argtypes domainname
new_feature_argtypes ::= [ "(" domainname ( <COMMA> domainname )* ")" ]
dynamicdecl ::= <DYNAMICDECL> dynamicdecl_single ( <COMMA> dynamicdecl_single )*
dynamicdecl_single ::= "[" temporalterm "," ( temporalterm | "inf" ) "]" fluentformula
showonedecl ::= <SHOWONEDECL> showonedecl_single ( <COMMA> showonedecl_single )*
showonedecl_single ::= featurename
hidedecl ::= <HIDEDECL> hidedecl_single ( <COMMA> hidedecl_single )*
hidedecl_single ::= featurename
attachmentdecl ::= <ATTACH> ( <_DEFAULT> string | string string )
actiondecl ::= <ACTION> actiondecl_single ( <COMMA> actiondecl_single )*
actiondecl_single ::= newactionname [ "(" domainname ( <COMMA> domainname )* ")" ]
newactionname ::= identifier
actionname ::= identifier
timeconstdecl ::= <TIMECONST> timeconstdecl_single ( <COMMA> timeconstdecl_single )*
timeconstdecl_single ::= newtimeconstname number number
newtimeconstname ::= <TIMECONSTANT>
timeconstname ::= <TIMECONSTANT>
hasvalue ::= valuevar
| featureexpression
| valuename
setorsingle ::= ( single | "{" "}" | "{" single ( <COMMA> single )* "}" )
valuelist ::= "(" hasvalue ( <COMMA> hasvalue )* ")"
single ::= valuevar
| identifier
| featureexpression
newvaluevar ::= <VALUEVAR> "[" domainname "]"
newvaluevarlist ::= "(" newvaluevar ( <COMMA> newvaluevar )* ")"
valuevar ::= <VALUEVAR> "[" domainname "]"
featureexpression ::= featurename ( valuelist | )
temporalterm ::= temporalbase ( ( <PLUS> | <MINUS> ) temporalbase )*
temporalbase ::= "(" temporalterm ")"
| [ <MINUS> ] number
| timeconstname
| timevar
timevar ::= <TIMEVAR>
newtimevar ::= <TIMEVAR>
fluentformula ::= fluentimplication ( "<->" fluentimplication )*
fluentimplication ::= fluentdisjunction ( "->" fluentdisjunction )*
fluentdisjunction ::= fluentconjunction ( "|" fluentconjunction )*
fluentconjunction ::= fluentnegation ( "&" fluentnegation )*
fluentnegation ::= ( "!" )* fluentprimary
fluentprimary ::= featureexpression [ "==" [ "!" ] [ "[" "+" temporalterm "]" ] setorsingle ]
| "(" fluentformula ")"
| <FORALL> newvaluevar "[" fluentformula "]"
| <EXISTS> newvaluevar "[" fluentformula "]"
logicformula ::= logicimplication ( "<->" logicimplication )*
logicimplication ::= logiccausal ( "->" logiccausal )*
logiccausal ::= logicdisjunction [ ">>" logicdisjunction ]
logicdisjunction ::= logicconjunction ( "|" logicconjunction )*
logicconjunction ::= logicnegation ( "&" logicnegation )*
logicnegation ::= ( "!" )* logicprimary
logicprimary ::= ( "(" temporalterm <COMMA> ( temporalterm ( ")" | "]" ) | <INFINITY> ")" ) fluentformula | "[" temporalterm ( "," ( temporalterm ( ")" | "]" ) | <INFINITY> ")" ) fluentformula | "]" fluentformula ) | valuevar [ "=" | "!=" ] ( valuevar | valuename ) | temporalterm ( "=" | "<" | "<=" ) temporalterm [ ( "=" | "<" | "<=" ) temporalterm ] | <FORALL> newtimevar "[" logicformula "]" | <EXISTS> newtimevar "[" logicformula "]" | <FORALL> newvaluevar "[" logicformula "]" | <EXISTS> newvaluevar "[" logicformula "]" | "(" logicformula ")" )
crfconjunction ::= conditionalrf ( ";" conditionalrf )*
conditionalrf ::= ( "(" crfconjunction ")" | ( "forall" newvaluevar "[" )* conditionalrf_precondition "->" reassignmentformula ( "]" )* | ( "forall" newvaluevar "[" )* reassignmentformula ( "]" )* )
conditionalrf_precondition ::= ( "[" timevar "]" fluentformula | "(" conditionalrf_precondition ")" )
reassignmentformula ::= ( "[" temporalterm <COMMA> temporalterm "]" rrfdisjunction | "(" reassignmentformula ")" )
rrfdisjunction ::= rrfdisjunction_base ( "|" rrfdisjunction_base )*
rrfdisjunction_base ::= ( "(" rrfdisjunction ")" | restrictedrf )
restrictedrf ::= restrictedrf_base ( "&" restrictedrf_base )*
restrictedrf_base ::= ( "(" restrictedrf ")" | elementaryrf | logicformula )
elementaryrf ::= featureexpression ":=" [ "!" ] setorsingle
lawdecl ::= <ACS> "[" newtimevar <COMMA> newtimevar "]" actionname ( newvaluevarlist | ) "~>" crfconjunction
observationdecl ::= <OBS> logicformula
acausaldecl ::= <ACC> logicformula
causaldecl ::= <CC> logicformula
occurrencedecl ::= <OCC> "[" temporalterm <COMMA> temporalterm "]" actionname ( valuelist | )